【问题标题】:How to Run a Shell Script with Mac App Sandbox Enabled?如何在启用 Mac App Sandbox 的情况下运行 Shell 脚本?
【发布时间】:2023-04-18 15:07:02
【问题描述】:

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

defaults write
killall

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

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

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

【问题讨论】:

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


    【解决方案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?

      【讨论】:

        最近更新 更多