Gibt es einen Weg, IOKit
oder etwas ähnliches zu verwenden, das das Herunterladen zusätzlicher Pakete aus dem Internet nicht einschließt, das ich verwenden kann, um den Produktnamen eines USB-Geräts zu lesen?Produktname des USB-Geräts aus portIterator
Dies ist mein aktueller Code ...
func printSerialPaths(portIterator: io_iterator_t) {
var serialService: io_object_t
repeat {
serialService = IOIteratorNext(portIterator)
if (serialService != 0) {
var key: CFString! = "IOCalloutDevice"
var bsdPathAsCFtring: AnyObject? = IORegistryEntryCreateCFProperty(serialService, key, kCFAllocatorDefault, 0).takeUnretainedValue()
var bsdPath = bsdPathAsCFtring as! String?
if let path = bsdPath {
print(path)
}
var deviceNameCString: [CChar] = [CChar](count: 128, repeatedValue: 0)
let deviceNameResult = IORegistryEntryGetName(serialService, &deviceNameCString)
let deviceName = String.fromCString(&deviceNameCString)!
print("usb Device Name: \(deviceName)")
}
} while serialService != 0;
}
Ich habe versucht, auch andere CFStrings, wie „Produktnamen“ im IORegistryEntryCreateCFProperty()
Befehl wie ich habe an anderer Stelle ohne Glück vorgeschlagen gesehen. Wenn das Ersetzen alles ist, was ich brauche, wo finde ich die Dokumentation für den Rest dieser Strings?
Der Produktname, über den ich spreche, ist unten hervorgehoben. Ich bin mir nicht sicher, wie sein technischer Name lauten würde.
Das beinhaltet eine Menge guter Orte, um dies zu erforschen, aber leider habe ich nichts gefunden. "KUSBProductString" gibt es in Swift nicht. Auf der Suche nach anderen habe ich Sachen wie 'kUSBVendorName' gefunden, aber sie scheinen nur in anderen Sprachen wie Objective-C zu funktionieren und verursachen mir fatale Fehler. – crait
In diesem Fall sollte es ziemlich sicher sein, eigene Versionen dieser Konstanten in Swift zu definieren und diese einfach zu verwenden. Sie werden sich nicht ändern, außer dass OS X 10.11 neue eingeführt und die Eigenschaftswerte für die alten und neuen Schlüssel festgelegt hat. (Dies hat mit dem neuen USB-Stack zu tun, obwohl der Grund, warum Apple neue Property-Namen erstellt hat, nicht klar ist.) – pmdj
Die Verwendung eines Bridging-Headers hilft mir, die meisten Konstanten zu bekommen - sie sind nicht immer zugänglich, wenn ich nur IOKit in Swift importiere. http://stackoverflow.com/a/39026607/2227743 – Moritz