1

我很难调试 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];

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

谢谢你的帮助!

4

1 回答 1

0

根据权利密钥参考

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

和:

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

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

于 2017-05-22T19:47:30.723 回答