无法使用NSTask使用Sandbox编写

问题描述 投票:1回答: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];

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

谢谢你的帮助!

macos nstask appstore-sandbox code-signing-entitlements
1个回答
0
投票

根据Entitlement Key Reference

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

和:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.