Macos 在沙盒中运行terminal命令

Macos 在沙盒中运行terminal命令,macos,cocoa,finder,nstask,appstore-sandbox,Macos,Cocoa,Finder,Nstask,Appstore Sandbox,我写了一个Mac应用程序,可以让桌面图标可见/不可见。我使用NSTask运行一个终端命令来重置Finder: - (void)killFinder { NSTask *killFinderTask = [[NSTask alloc]init]; NSArray *killFinderArray = [NSArray arrayWithObjects:@"Finder", nil]; [killFinderTask setLaunchPath:@"/usr/bin/kill

我写了一个Mac应用程序,可以让桌面图标可见/不可见。我使用
NSTask
运行一个终端命令来重置
Finder

- (void)killFinder
{
    NSTask *killFinderTask = [[NSTask alloc]init];
    NSArray *killFinderArray = [NSArray arrayWithObjects:@"Finder", nil];
    [killFinderTask setLaunchPath:@"/usr/bin/killall"];
    [killFinderTask setArguments:killFinderArray];
    [killFinderTask launch];
    [killFinderTask waitUntilExit];
}
在打开沙箱之前,它运行正常。当我打开沙箱时,控制台中的一条消息说:

killall: warning: kill -TERM 46676: Operation not permitted

我的应用程序仍在运行,但结果不正确。重置
查找器的部件未运行。如何避免此问题,以便仍可以使用沙箱,但任务仍在运行?

使用
NSUserScriptTask
运行脚本


脚本文件必须(由用户)放置在
NSApplicationScriptsDirectory
中,才能在沙箱之外运行。

我认为您不能。至少我希望你不能,否则它不是一个沙箱。你的应用程序无法从沙箱中伸出,这就是为什么你不能。即使你做到了这一点,你的应用程序也将被拒绝。你是否将你的应用程序提交到Mac app store?我希望如此,但这似乎是不可能的。所以我只能在Mac应用商店外发布。顺便说一句,这从来不是重新启动Finder的好方法。您可以使用
kill()
以编程方式发送与
kill
相同的信号。您可以使用
NSRunningApplication
终止它。您可以使用Apple脚本退出它。无需调用外部程序。尽管这些也将受到沙箱的限制,但它们至少更有可能拥有启用沙箱的官方权利。