在沙箱中运行终端命令

时间:2014-07-02 14:13:17

标签: 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/killall"];
    [killFinderTask setArguments:killFinderArray];
    [killFinderTask launch];
    [killFinderTask waitUntilExit];
}

在打开沙盒之前,它运行正常。当我打开沙盒时,控制台中的消息说:

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

我的应用仍在运行,但结果不正确。重置Finder的部分未运行。我如何规避这个问题,以便我仍然可以使用沙盒,但任务仍在运行?

1 个答案:

答案 0 :(得分:1)

使用NSUserScriptTask运行脚本。

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