我有一个第三方命令行工具,它从一个主要的可可应用程序启动,该应用程序将在 Mac App Store 中分发。
我需要对第三方命令行工具进行沙箱处理,但是当我运行它(使用 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 文件添加到命令行工具?我错过了什么?有人可以帮助我吗?任何帮助或指针将不胜感激。