IOKit
など、インターネットから追加パッケージをダウンロードする必要がない、USBデバイスの製品名を読み取るための方法がありますか?USBデバイスの製品名をportIteratorから取得
これは私の現在のコードです...
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;
}
私は運で他の場所を示唆見てきたように私もIORegistryEntryCreateCFProperty()
コマンドでは、このような「製品名」などの他のCFStringsを、使用して試してみました。それを置き換えるだけなら、どこの文字列のドキュメントを見つけることができますか?
私が話している製品名が以下に強調表示されています。私はその技術的な名前がどんなものか分からない。
これには、これを研究し始める良い場所がたくさんありますが、残念ながら、私は何も考えていません。「kUSBProductString」はSwiftには存在しません。他の人を検索すると、 'kUSBVendorName'のようなものが見つかりましたが、Objective-Cのような他の言語でしか動作しないようで、致命的なエラーを引き起こしています。 – crait
その場合、Swiftでこれらの定数の独自のバージョンを定義し、それらを使用するだけでかなり安全です。彼らはOSX 10.11が新しいものを導入したことを除いて、変更するつもりはなく、古いキーと新しいキーの両方のプロパティ値を設定します。 (これは新しいUSBスタックと関係しますが、Appleが新しいプロパティ名を作成した理由は不明です)。 – pmdj
ブリッジヘッダを使用すると、ほとんどの定数を取得できます。SwiftでIOKitをインポートするだけでアクセスできるとは限りません。 http://stackoverflow.com/a/39026607/2227743 – Moritz