Macos 在沙盒中运行terminal命令
我写了一个Mac应用程序,可以让桌面图标可见/不可见。我使用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
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脚本退出它。无需调用外部程序。尽管这些也将受到沙箱的限制,但它们至少更有可能拥有启用沙箱的官方权利。