是否可以让一个在沙箱中运行的应用程序执行一个 shell 脚本?该脚本使用两个基本命令:
defaults write
killall
我知道沙盒有一些例外,可以通过权利文件添加,但不确定是否可以让用户确认小脚本的执行然后运行它?
请给我一个实用的提示......当我在关闭沙盒的情况下运行我的应用程序时,一切正常。两个命令上的沙箱都不起作用,这显示在控制台中:
killall: warning: kill -TERM 12322: Operation not permitted
是否可以让一个在沙箱中运行的应用程序执行一个 shell 脚本?该脚本使用两个基本命令:
defaults write
killall
我知道沙盒有一些例外,可以通过权利文件添加,但不确定是否可以让用户确认小脚本的执行然后运行它?
请给我一个实用的提示......当我在关闭沙盒的情况下运行我的应用程序时,一切正常。两个命令上的沙箱都不起作用,这显示在控制台中:
killall: warning: kill -TERM 12322: Operation not permitted
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/
关于这个主题的一篇很棒的文章^^^
为什么你首先要对如此强大的应用程序进行沙箱处理?你想修改默认值并杀死特定的其他应用程序(以某种方式可能)或“机器上存在的所有应用程序”吗?
如果对于特定的其他应用程序,为什么不不用外壳呢?对于默认写入使用 com.apple.security.temporary-exception.shared-preference.read-write 并添加您要修改的域(例如 com.apple.DigitalColorMeter)并使用 CFPreferencesSetValue()
对于 killall 使用 com.apple.security.temporary-exception.apple-events 并运行 Applescript / send AppleEvents 以终止特定进程。
如果你有充分的理由可以杀死这样的应用程序: