Быстрая ошибка при развертывании необязательного NSDictionary
Я пытаюсь использовать выходные данные инструмента system_profiler для сбора записей об установленных приложениях на текущем компьютере. Следующая команда выводит XML в формате plist:
system_profiler -nospawn SPApplicationsDataType -xml -detailLevel mini
и выводит что-то вроде этого:
<?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>SPApplicationsDataType</string>
<string>-xml</string>
<string>-detailLevel</string>
<string>mini</string>
</array>
<key>_SPCompletionInterval</key>
<real>8.4461650252342224</real>
<key>_dataType</key>
<string>SPApplicationsDataType</string>
<key>_detailLevel</key>
<integer>1</integer>
<key>_items</key>
<array>
<dict>
<key>_name</key>
<string>Terminal</string>
<key>has64BitIntelCode</key>
<string>yes</string>
<key>lastModified</key>
<date>2014-09-30T21:28:15Z</date>
<key>obtained_from</key>
<string>apple</string>
<key>path</key>
<string>/Applications/Utilities/Terminal.app</string>
<key>runtime_environment</key>
<string>arch_x86</string>
<key>signed_by</key>
<array>
<string>Software Signing</string>
<string>Apple Code Signing Certification Authority</string>
<string>Apple Root CA</string>
</array>
<key>version</key>
<string>2.5</string>
</dict>
который просто продолжает перечислять все установленные приложения в системе.
Однако при попытке присвоить эти данные NSDictionary
чтобы получить доступ к элементам, я так или иначе получаю эту ошибку:
фатальная ошибка: неожиданно найден ноль при развертывании необязательного значения
Я не могу понять, почему это так, и каждая попытка сбора этой информации всегда приводит к ошибке. Вот текущий код, который я пытаюсь использовать:
var path = NSBundle.mainBundle().pathForResource("/Users/Tyler/Documents/data", ofType: "plist")
var dict = NSDictionary(contentsOfFile: path!)
Я также попробовал:
if let path = NSBundle.mainBundle().pathForResource("/Users/Tyler/Documents/data", ofType: "plist") {
myDict = NSDictionary(contentsOfFile: path)
}
Это, конечно, после экспорта возвращенных данных в свой собственный файл, просто чтобы мне не приходилось каждый раз ждать запуска команды. В идеале я хотел бы получить вывод команды непосредственно с NSTask
и получение стандартного выхода.
Любая информация по этому вопросу будет принята с благодарностью! Я действительно зашел в тупик с этой ситуацией.
Спасибо!