如何在启用 Mac App Sandbox 的情况下运行 Shell 脚本?
Posted
技术标签:
【中文标题】如何在启用 Mac App Sandbox 的情况下运行 Shell 脚本?【英文标题】:How to Run a Shell Script with Mac App Sandbox Enabled? 【发布时间】:2013-11-12 19:17:45 【问题描述】:是否有可能有一个在沙盒中运行的应用程序执行一个 shell 脚本? 该脚本使用两个基本命令:
defaults write
killall
我知道沙盒有一些例外,可以通过权利文件添加,但不确定是否可以让用户确认小脚本的执行然后运行它?
请给我一个实用的提示... 当我在关闭沙盒的情况下运行我的应用程序时,一切正常。 两个命令上的沙箱都不起作用,这会显示在控制台中:
killall: warning: kill -TERM 12322: Operation not permitted
【问题讨论】:
【参考方案1】:当应用程序被沙盒化时,可以从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/
关于这个主题的一篇很棒的文章^^^
【讨论】:
【参考方案2】:您为什么首先要将如此强大的应用程序沙盒化?您想修改默认值并为特定的其他应用程序(以某种方式可能)或“所有存在于机器上的应用程序”修改默认值并杀死所有应用程序吗?
如果对于特定的其他应用程序,为什么不不用外壳呢? 对于默认写入使用 com.apple.security.temporary-exception.shared-preference.read-write 并添加您要修改的域(例如 com.apple.DigitalColorMeter)并使用 CFPreferencesSetValue()
对于 killall 使用 com.apple.security.temporary-exception.apple-events 并运行 Applescript / 发送 AppleEvents 以终止特定进程。
【讨论】:
嘿,我想你的回答听起来很不错......让我在接下来的几天里检查一下,我给你信用;)【参考方案3】:如果你有充分的理由,你可以像这样杀死应用程序:
How can I terminate my app in a helper app with sanboxing enabled?
【讨论】:
以上是关于如何在启用 Mac App Sandbox 的情况下运行 Shell 脚本?的主要内容,如果未能解决你的问题,请参考以下文章
全网首发:(解决办法)MAC OS Xcode给应用设置沙箱(Enable App Sandbox)之后,运行报错Illegal instruction: 4
Mac App Sandbox - NSHomeDirectory() 问题
Mac App Store Sandbox - 安装用户脚本?
如何在 OSX 上为 Python 应用程序启用 App 沙箱(Python 应用程序针对 Mac App Store)