我想在我的Cocoa应用程序中运行这个命令。在NSTask的帮助下,我通过将fileHandle输出编码为NSString来获得以下输出。但我不能提取特定密钥的值。我尝试使用SWXMLHash将其转换为xml,并使用jsonSerializer将其转换为JSON。但它变得更复杂了。
有办法这样做吗?
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
<key>_SPCommandLineArguments</key>
<array>
<string>/usr/sbin/system_profiler</string>
<string>-nospawn</string>
<string>-xml</string>
<string>SPCameraDataType</string>
<string>-detailLevel</string>
<string>full</string>
</array>
<key>_SPCompletionInterval</key>
<real>0.13360595703125</real>
<key>_SPResponseTime</key>
<real>0.22787702083587646</real>
<key>_dataType</key>
<string>SPCameraDataType</string>
<key>_detailLevel</key>
<integer>-1</integer>
<key>_items</key>
<array>
<dict>
<key>_name</key>
<string>FaceTime HD Camera</string>
<key>spcamera_model-id</key>
<string>Apple Camera VendorID_0x106B ProductID_0x1570</string>
<key>spcamera_unique-id</key>
<string>CC89657KQR6GDV4AQ</string>
</dict>
</array>
</dict>
</array>
</plist>发布于 2018-11-02 11:14:52
您应该能够使用PropertyListSerialization直接解析这个输出。看看文档。
我建议您看一下使用IOKit的情况。它可能有点令人望而生畏的API得到处理,但它提供了大量的力量。我曾经用它作为USB设备信息和连接/断开通知在过去,它工作得很好。我认为您会发现它比解析命令行实用程序的输出要健壮得多。
发布于 2018-11-02 12:05:13
您可以使用下面这样的内容来获得包含字典的Array。
let url = Bundle.main.url(forResource: "data", withExtension: "plist")!
let plistData = try! Data(contentsOf: url)
if let array = try! PropertyListSerialization.propertyList(from: plistData, options: [], format: nil) as? [[String:Any]] {
print(array)
}https://stackoverflow.com/questions/53117107
复制相似问题