1

我开发了一个沙盒应用程序。它的功能之一是对 /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

(来自如何重新启动 finder 应用程序

然而,不断变化的 finder.plist 似乎并不总是有效。(没有错误)但是如果我关闭沙盒,它就可以了。

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

4

1 回答 1

3

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

如果您获得了这些临时豁免,您几乎可以做任何不需要 root 访问权限的事情,例如删除文件等。这违背了沙盒的目的。

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

于 2013-03-09T09:31:39.170 回答