macos - 即使我添加了请求更改共享首选项的权利, cocoa 沙箱也并不总是有效

标签 macos cocoa sandbox

我开发了一个沙箱应用程序。它的功能之一是对/Users/username/Library/Preferences com.apple.finder.plist 进行一些更改。因此,为了做到这一点,我已将以下内容添加到我的 entitlement.plist 中:

<key>com.apple.security.temporary-exception.shared-preference.read-write</key>
<array>
    <string>com.apple.finder</string>
</array>
<key>com.apple.security.temporary-exception.apple-events</key>
<array>
    <string>com.apple.finder</string>
    <string>com.apple.systemevents</string>
</array>

如果我关闭沙箱,我的应用程序运行得很好,但是,如果我启用沙箱,有时我的应用程序可以运行,但大多数时候我的应用程序无法运行。

我所做的是,1.我使用 NSAppleScript 对 finder.plist 进行更改,然后 2.告诉“finder”退出并再次重新启动。 “退出”和重新启动部分工作得很好:

tell application "Finder" to quit
set inTime to current date
    repeat
tell application "System Events"
    if "Finder" is not in (get name of processes) then exit repeat
end tell
if (current date) - inTime is greater than 10 then exit repeat
    delay 0.2
end repeat

tell application "Finder" to activate

(来自 How to relaunch finder application )

然而,不断变化的 finder.plist 似乎并不总是有效。 (没有错误)但是如果我关闭沙箱,它就会起作用。

所以我的结论是,沙箱破坏了我的代码,但我真的不知道如何解决这个问题,因为我已经添加了权利?

最佳答案

您可能希望启用沙箱以使应用程序符合 App Store 要求。 我认为您将很难(不可能)让您的应用程序获得临时豁免的批准,尤其是系统事件和查找器。

如果您获得这些临时豁免,您几乎可以执行不需要 root 访问权限的所有操作,即删除文件等。这违背了沙箱的目的。

绝对不允许从您的应用重新启动 Finder。我建议您寻找另一种方法来完成您需要做的事情。

关于macos - 即使我添加了请求更改共享首选项的权利, cocoa 沙箱也并不总是有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15297528/

相关文章:

c - 从仅给出指针的编译代码中获取未导出的 C 函数名称。

cocoa - CGEventPost - 按住一个键(Shift)

objective-c - localizedCaseInsensitiveCompare 似乎不适用于瑞典语字符

python - 使用 pysandbox 限制功能 (RF)

javascript - 使用 Apple Remote 播放/暂停 Soundcloud 选项卡的脚本

javascript - 升级到 iOS 7 后,通过 USB 连接的 iPhone 未出现在 OS X Safari 'Develop' 菜单中

cocoa - 如何检查 NSWindow 是否打开

macos - NSTask 从沙盒应用程序中生成

python - 不使用进口机器访问模块 'sys'

c - 在 mac 中使用 Carbon Framework 检测双显示器/显示器?