即使我添加了更改共享首选项的请求权限,但可可沙箱并不总是有效

时间:2013-03-08 15:30:41

标签: 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并不总是起作用。 (没有错误)但是如果我关闭沙盒,它就可以了。

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

1 个答案:

答案 0 :(得分:3)

您可能希望启用沙盒制作符合App Store标准的应用。 我认为您将很难(不可能)通过临时豁免批准您的应用程序,尤其是系统事件和查找器。

如果您获得了这些临时豁免,您几乎可以完成所有不需要root访问权限的操作,例如删除文件等。它会破坏沙盒的目的。

从来没有允许从您的应用程序重新启动Finder。我建议你找另一种方法去做你需要做的事情。