如何在启用Mac App Sandbox的情况下运行Shell脚本?

时间:2013-11-12 19:17:45

标签: macos shell mac-app-store appstore-sandbox

是否有可能在沙箱中运行的应用程序执行shell脚本? 该脚本使用两个基本命令:

defaults write
killall

我知道沙盒有一些例外,可以通过授权文件添加,但不确定是否可以让用户确认小脚本的执行然后运行它?

请给我一个实际的提示...... 当我关闭沙箱运行我的应用程序时,一切正常。 使用沙盒时,两个命令都不起作用,这将显示在控制台中:

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

3 个答案:

答案 0 :(得分:2)

当应用程序为沙盒时,可以从NSApplicationScriptsDirectory目录运行脚本。

NSURL *scriptsDirectory = [[NSFileManager defaultManager] URLForDirectory:NSApplicationScriptsDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:&error];
  

那么用户如何为想要运行脚本的应用程序授予访问权限?

     

该机制非常简单:您的应用程序只能从用户帐户中的特定文件夹运行脚本。脚本可以进入该文件夹的唯一方法是用户在那里复制它们。从本质上讲,OS X为您提供了这些脚本中的内容的只读视图。

https://www.objc.io/issues/14-mac/sandbox-scripting/

关于这个主题的一篇很棒的文章^^^

答案 1 :(得分:0)

为什么你想首先沙盒这么强大的App呢?您是想修改特定其他应用程序(某种可能的话)的默认值和killall,还是“机器上存在的所有应用程序”?

如果对于特定的其他应用,为什么不在没有shell的情况下进行? 对于默认值,使用com.apple.security.temporary-exception.shared-preference.read-write并添加您想要修改的域(例如com.apple.DigitalColorMeter)并使用CFPreferencesSetValue()

对于killall,使用com.apple.security.temporary-exception.apple-events并运行Applescript /发送AppleEvents以终止特定进程。

答案 2 :(得分:0)

如果你有充分的理由可以杀死这样的应用程序:

How can I terminate my app in a helper app with sanboxing enabled?