2012-10-18 40 views
8

我有一个简单的unix工具,可以从shell中启动主可可应用程序。如何沙盒命令行工具?

我需要它沙箱,但是当我运行它,它用错误“非法指令:4”崩溃,在console.app我可以看到下面的错误消息

沙箱创建失败:Container对象初始化失败:NIL没有错误描述 集装箱信息对象visdiff

文件被正确地协同设计签名。

我读过后Mac OS app, sandbox with command line tool?,但它并不能帮助

+0

也许需要更多信息。你的工具与你的应用程序打包在一起怎么样你如何执行“从外壳”的工具(代码,请)。对你提到的其他问题没有帮助(你遇到问题的地方在哪里)? –

+0

您是否在编码签名时使用了--entitlements参数? – Marius

回答

5

我有这个确切的问题,当我添加一个嵌入的Info.plist时,它就消失了。

尝试这些铛标志(假设你的build目录有info.plist):

-Xlinker -sectcreate -Xlinker __TEXT -Xlinker __info_plist -Xlinker info.plist

+1

哇。你已经保存了一天。如果可以的话,我会立即捐赠给你所有的SO点。谢谢!!! – Lizza

+0

不客气:) –

+0

你在嵌入式Info.plist中添加了什么信息?我相信这个plist是针对unix文件的 – Swati

4

直接从控制台启动控制台应用程序或者是从主沙盒应用程序叫什么名字?我在尝试沙箱某些二进制文件时,类似的错误,我只是能够使它只用下面的权利工作:

<dict>                                          
    <key>com.apple.security.app-sandbox</key>                                 
    <true/>                                          
    <key>com.apple.security.inherit</key>                                  
    <true/>                                          
</dict> 

当然,在这之后,你只能调用从父进程的二进制文件已经是沙箱了(这就是为什么我问你的二进制文件被称为:))。

+0

不,我的命令行工具是从unix shell调用的,它完全独立于主沙盒应用程序 – dafi

0

,如果你签订com.apple.security.inherit可执行似乎只能通过另一种被称为已经是沙盒的应用程序。所以你在运行密码后不能再从cmdline调用它。

+0

是的 - 这个问题一旦我用最小的com.apple.security.app-sandbox + com.apple.security.inherit plist签署了我的帮助程序可执行文件,有没有解决方法?或者是否需要为每个助手可执行文件添加“真实”权利,就好像它是父级应用一样,例如com.apple.security.network.client?我很担心文件系统的权利,因为我的帮手可能需要相当广泛的访问权限,远远超出了主文件夹的范围。 – user1475135