我有一个简单的unix工具,我从shell启动主要的cocoa应用程序。
我需要沙箱,但是当我运行它时,它崩溃并出现错误“非法指令:4”,在console.app上我可以看到以下错误消息
沙箱创建失败:容器对象初始化失败:NIL 容器信息对象没有visdiff的错误描述
使用codesign正确签名文件。
我已阅读帖子Mac OS app, sandbox with command line tool?,但没有帮助
答案 0 :(得分:7)
我遇到了这个问题,当我添加了一个嵌入式Info.plist时它就消失了。
尝试使用这些clang标志(假设您在构建目录中有info.plist
):
-Xlinker -sectcreate -Xlinker __TEXT -Xlinker __info_plist -Xlinker info.plist
答案 1 :(得分:4)
控制台应用程序是直接从控制台启动还是从主沙盒应用程序调用?我在尝试沙箱一些二进制文件时遇到了类似的错误,我只能使用以下权利使其工作:
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.inherit</key>
<true/>
</dict>
当然,之后你只能从已经沙盒化的父进程中调用二进制文件(这就是我问你的二进制文件是如何被调用的原因:)。
答案 2 :(得分:1)
虽然@Nick Moore的回答非常好,但在当今的Xcode中,“包装-在Binary中创建Info.plist”部分(CREATE_INFOPLIST_SECTION_IN_BINARY)中有一个选项。所有需要做的就是将thue设置为是。
答案 3 :(得分:0)
如果您使用com.apple.security.inherit签署可执行文件,它似乎只能由另一个已经沙箱化的应用程序调用。因此,在运行codesign后,您无法再从cmdline调用它。