所以我刚给我的一个产品添加了沙盒。除了工作流程的最后一步是设置桌面之外,它功能完全正常。它通过NSWorkspace实现。当我打电话
[[NSWorkspace sharedWorkspace] setDesktopImageURL:[NSURL fileURLWithPath:imagePath]
forScreen:screen
options:nil
error:&error];
我收到以下错误:
*** attempt to post distributed notification 'com.apple.desktop' thwarted by sandboxing.
是的,所以我需要一个像这样的临时例外:
<key>com.apple.security.temporary-exception.apple-events</key>
<array>
<string>XXXXX</string>
</array>
所以最终我需要弄清楚XXXXX中的内容,对吧?什么处理桌面设置?而且,更一般地说,是否有一种简单的方法来确定消息的目标包?
答案 0 :(得分:1)
我遇到了同样的问题,但我发现了一个不同的解决方法。通过启用&#34;允许日历数据访问&#34;权利,通过NSWorkspace设置新壁纸。
我知道这是一个非常奇怪的解决方法,我不知道它是否适合未来(Apple可能会在未来的版本中阻止它)。它在撰写本文时起作用,我认为值得与下一个遇到此问题的人分享。
答案 1 :(得分:0)
AFAIK设置壁纸没有任何例外。另外,沙盒似乎不是NSWorkspace
方法本身,而是分布式通知(这就是日志所说的)。因此,如果使用分布式通知实现此NSWorkspace
方法,则必须使用有效负载(-[NSNotification userInfo]
),但沙箱不允许使用有效负载。
如果您想要使用Apple Event路线,您可以尝试使用AppleScript更改壁纸(尽管只允许您更改主屏幕的壁纸):
tell application "Finder" to set the desktop picture to the_image_file
(the_image_file
是您要设置的任何图像。)