无法使用 NSTask 使用 Sandbox 编写

Unable to use NSTask to write using Sandbox

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

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

感谢您的帮助!

根据 Entitlement Key Reference:

If your app employs a child process created with either the posix_spawn function or the NSTask class, you can configure the child process to inherit the sandbox of its parent.

和:

To enable sandbox inheritance, a child target must use exactly two App Sandbox entitlement keys: com.apple.security.app-sandbox and com.apple.security.inherit. If you specify any other App Sandbox entitlement, the system aborts the child process.

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