我很难用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 的相同参数来执行应用程序时,也会创建目标。
感谢您的帮助!
答案 0 :(得分:0)
如果您的应用程序使用了使用posix_spawn函数或NSTask类创建的子进程,则可以将子进程配置为继承其父进程的沙箱。
和
要启用沙箱继承,子目标必须使用两个App Sandbox授权密钥:com.apple.security.app-sandbox和com.apple.security.inherit。如果您指定任何其他App Sandbox权利,系统将中止子进程。
我怀疑分叉自己不会成为一个成功的策略,因为这意味着父母必须只拥有这两个权利,这在子进程中不会非常有用。