11

我有一个由我制作的简单 unix 工具,可以从 shell 启动主要的可可应用程序。

我需要对其进行沙箱处理,但是当我运行它时,它会因错误“非法指令:4”而崩溃,在 console.app 上我可以看到以下错误消息

沙盒创建失败:容器对象初始化失败:NIL 容器信息对象没有 visdiff 的错误描述

该文件已使用 codesign 正确签名。

我读过这篇文章Mac OS app, sandbox with command line tool?但这无济于事

4

4 回答 4

9

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

试试这些 clang 标志(假设你info.plist在构建目录中有):

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

于 2013-05-03T16:12:21.657 回答
4

控制台应用程序是直接从控制台启动还是从主沙盒应用程序调用?在尝试对某些二进制文件进行沙箱处理时,我收到了类似的错误,我只能通过仅使用以下权利使其工作:

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

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

于 2012-10-19T17:00:05.660 回答
1

虽然@Nick Moore 的回答非常好,但在今天的 Xcode 中的 Packaging - Create Info.plist Section in Binary (CREATE_INFOPLIST_SECTION_IN_BINARY) 下有一个选项。所需要的只是将 thue 设置为 Yes。

于 2018-11-09T15:38:11.440 回答
0

似乎如果您使用 com.apple.security.inherit 签署可执行文件,则它只能由已被沙盒化的另一个应用程序调用。因此,在运行 codesign 后,您将无法再从 cmdline 调用它。

于 2014-07-31T05:27:27.647 回答