Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
cocoa沙盒嵌入的命令行不工作_Cocoa_Nstask_Mac App Store_Appstore Sandbox_Code Signing Entitlements - Fatal编程技术网

cocoa沙盒嵌入的命令行不工作

cocoa沙盒嵌入的命令行不工作,cocoa,nstask,mac-app-store,appstore-sandbox,code-signing-entitlements,Cocoa,Nstask,Mac App Store,Appstore Sandbox,Code Signing Entitlements,我有一个第三方命令行工具,可以从一个主cocoa应用程序启动,该应用程序将在Mac app Store中分发 我需要对第三方命令行工具进行沙箱处理,但当我运行它(使用NSTask)时,它会因错误而崩溃 “特定于应用程序的签名:容器对象初始化失败:无法获取应用程序XXX的bundleid” (在控制台中,我可以看到以下错误消息)。 以下是我在主cocoa应用程序中所做的操作: NSTask* task = [[NSTask alloc]init]; NSString* comma

我有一个第三方命令行工具,可以从一个主cocoa应用程序启动,该应用程序将在Mac app Store中分发

我需要对第三方命令行工具进行沙箱处理,但当我运行它(使用NSTask)时,它会因错误而崩溃

“特定于应用程序的签名:容器对象初始化失败:无法获取应用程序XXX的bundleid”

(在控制台中,我可以看到以下错误消息)。 以下是我在主cocoa应用程序中所做的操作:

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  
codesign --display --verbose=4 XXX
资料如下:

<!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>
得到了以下信息:

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文件?我错过什么了吗?
有人能帮我吗?非常感谢您的帮助和指点。

我已经很久没有注意到这个问题了,但是仍然有人问我怎么做

根据苹果的开发文档

因此,您应该使用以下权限对嵌入式命令行进行签名:

<?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">
<dict>
    <key>com.apple.security.app-sandbox</key>
    <true/>
    <key>com.apple.security.inherit</key>
    <true/>
</dict>
</plist>

com.apple.security.app-sandbox
com.apple.security.inherit

现在你的应用程序工作了

应用程序是否要与Mac app Store一起分发?是的,有问题吗?没有。我相应地更改了标签,使您的问题更具可视性。非常感谢!我真的很感激。我建议大家看看其他MAS应用程序在类似情况下的表现。您是否使用任何应用程序来实现您的目标?