0

system_profilerツールからの出力を使用して、現在のマシンにインストールされているアプリケーションの記録を収集しようとしています。次のコマンドは、 XMLplist形式で出力します。

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ただし、要素にアクセスするためにそのデータをに割り当てようとすると、何らかの方法で次のエラーが発生します。

致命的なエラー: オプション値のラップ解除中に予期せず nil が見つかりました

これがなぜなのか理解できず、この情報を収集しようとすると常にエラーが発生します。私が使用しようとしている現在のコードは次のとおりです。

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理想的には、コマンドの出力を直接受け取り、standardOutputを受け取りたいと思います。

この件に関する情報は大歓迎です!この状況で本当に行き詰まりました。

ありがとう!

4

0 に答える 0