无法使用NSTask使用Sandbox编写

时间:2017-05-22 18:28:50

标签: macos nstask appstore-sandbox code-signing-entitlements

我很难用NSTask调试问题。

我使用以下内容启动NSTask:

NSTask *convTask = [[NSTask alloc] init];
[convTask setLaunchPath:[[NSBundle mainBundle] executablePath]];
[convTask setArguments: [NSArray arrayWithObjects: @"convTask", source, target, nil]];
[convTask launch];
[convTask waitUntilExit];
[convTask terminate];

所以它基本上是启动一个任务,这是我运行的应用程序的另一个实例。此任务应该将(文件)转换为目标(另一个文件)。这只有在激活沙盒时才有效。但即使在Sandbox模式下,当我使用我的终端使用传递给 NSTask 的相同参数来执行应用程序时,也会创建目标

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

根据Entitlement Key Reference

  

如果您的应用程序使用了使用posix_spawn函数或NSTask类创建的子进程,则可以将子进程配置为继承其父进程的沙箱。

  

要启用沙箱继承,子目标必须使用两个App Sandbox授权密钥:com.apple.security.app-sandbox和com.apple.security.inherit。如果您指定任何其他App Sandbox权利,系统将中止子进程。

我怀疑分叉自己不会成为一个成功的策略,因为这意味着父母必须只拥有这两个权利,这在子进程中不会非常有用。