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_Command Line_Sandbox - Fatal编程技术网

Cocoa 如何沙箱命令行工具?

Cocoa 如何沙箱命令行工具?,cocoa,command-line,sandbox,Cocoa,Command Line,Sandbox,我有一个简单的unix工具,它可以从shell启动主cocoa应用程序 我需要对它进行沙箱处理,但当我运行它时,它会崩溃,并出现错误“非法指令:4”,在console.app上,我可以看到以下错误消息 沙盒创建失败:容器对象初始化失败:NIL 容器信息对象,无visdiff错误描述 文件已使用codesign正确签名 我读过这篇文章,但没有帮助控制台应用程序是直接从控制台启动的,还是从主沙盒应用程序调用的?我在尝试对一些二进制文件进行沙箱处理时收到了类似的错误,我仅通过使用以下权限即可使其正常工

我有一个简单的unix工具,它可以从shell启动主cocoa应用程序

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

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

文件已使用codesign正确签名


我读过这篇文章,但没有帮助

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

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

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

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

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

请尝试使用这些铿锵标志(假设构建目录中有
info.plist
):


-Xlinker-sectcreate-Xlinker\uuuu TEXT-Xlinker\uuuu info\u plist-Xlinker info.plist

如果您使用com.apple.security.inherit对可执行文件进行签名,则只能由另一个已经沙盒的应用程序调用它。因此,在运行codesign之后,您不能再从cmdline调用它。

虽然@Nick Moore的答案非常好,但在今天的Xcode中,在打包下有一个选项—以二进制格式创建Info.plist节(以二进制格式创建INFOPLIST节)。需要做的只是将thue设置为Yes。

No,我的命令行工具是从unix shell调用的,它完全独立于主沙盒应用程序。您在代码签名时是否使用了--Rights参数?可能需要更多信息。你的工具是如何与你的应用打包的?如何“从shell”执行工具(请输入代码)。你提到的另一个问题(你在哪里遇到问题)有什么对你没有帮助?哇。你拯救了这一天。如果可以的话,我现在就把我所有的SO点数都捐给你。非常感谢。您在embedded info.plist中添加了哪些信息?我相信这个plist是针对unix的file@Swati您喜欢的任何信息-对于Mac OS应用程序,通常的Info.plist值。例如CbundLeverVersion,等等。是的,当我用最小的com.apple.security.app-sandbox+com.apple.security.inherit plist对助手的可执行文件进行签名时,这个问题就出现了。有解决办法吗?或者我是否需要为每个helper可执行文件添加“真实”权限,就像它是父应用程序一样,例如com.apple.security.network.client?我担心文件系统的权利,因为我的助手可能需要相当广泛的访问,远远超出主文件夹的范围。