Mac App Store で配布されるメインの cocoa アプリから起動するサードパーティのコマンド ライン ツールがあります。
サードパーティのコマンド ライン ツールをサンドボックス化する必要がありますが、(NSTask を使用して) 実行すると、エラーでクラッシュします。
「アプリケーション固有の署名: コンテナー オブジェクトの初期化に失敗しました: アプリ XXX の bundleid を取得できませんでした」
(コンソールに次のエラー メッセージが表示されます)。メインのココアアプリで行うことは次のとおりです。
NSTask* task = [[NSTask alloc]init];
NSString* commandPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"command"];
task.launchPath = commandPath;
[task setArguments:args];
[task launch];
これを実行するたびに、「OS X はアプリケーションを実行するにはライブラリを修復する必要があります。これを許可するには、パスワードを入力してください。」次のコマンドを使用して、このコマンド ライン ツールに署名しました。
codesign --entitlements ./XXX.entitlements -s "3rd Party Mac Developer Application: XXX" ./commandlinetool
確認するために、次のコマンドを使用して再確認しました。
codesign --display --entitlements - ./commandlinetool
情報は次のとおりです。
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.files.downloads.read-write</key>
<true/>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
</dict>
</plist>
このコマンドでも確認しました:
codesign --display --verbose=4 XXX
そして、この情報を得ました:
Identifier=com.XXX.XXX.XXX
Format=Mach-O thin (x86_64)
CodeDirectory v=20100 size=75902 flags=0x0(none) hashes=3786+5 location=embedded
Hash type=sha1 size=20
CDHash=24fdcb9b5444a91f60xxxxx3a66bafa7030109e63fb1c
Signature size=4347
Authority=3rd Party Mac Developer Application: XXX
Authority=Apple Worldwide Developer Relations Certification Authority
Authority=Apple Root CA
Signed Time=May 10, 2014, 12:04:34 PM
Info.plist=not bound
Sealed Resources=none
Internal requirements count=1 size=216
また、info.plist ファイルをコマンド ライン ツールに追加しようとしました。この章の手順に従って、ここにリンクの説明を入力しましたが、何も起こりませんでした。Info.plist の結果はまだ「バインドされていません」です。
サードパーティのコマンド ライン ツールをサンドボックス化する方法と、info.plist ファイルをコマンド ライン ツールに追加する方法を教えてください。私は何か見落としてますか?これについて私を助けることができる人はいますか?どんな助けやポインタも大歓迎です。