1

所以我只是在我的一个产品中添加了沙盒。除了工作流程中的最后一步是设置桌面之外,它完全可以使用。它通过 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 中的内容,对吗?什么处理桌面设置?而且,更一般地说,是否有一种简单的方法来确定消息的目标包?

4

2 回答 2

1

我遇到了同样的问题,但我找到了不同的解决方法。通过启用“允许日历数据访问”权限,通过 NSWorkspace 设置新壁纸即可。

我知道这是一个非常奇怪的解决方法,我不知道它是否面向未来(Apple 可能会在未来的版本中阻止它)。它在撰写本文时有效,我认为值得与遇到此问题的下一个人分享。

于 2012-02-14T12:58:47.590 回答
0

AFAIK 设置墙纸也不例外。此外,沙盒似乎不是杀死NSWorkspace方法本身,而是杀死分布式通知(这就是日志所说的)。因此,如果此NSWorkspace方法是使用分布式通知实现的,则它必须使用有效负载 ( -[NSNotification userInfo]),但沙箱不允许有效负载。

如果您想走 Apple Event 路线,您可以随时尝试使用 AppleScript 更改墙纸(尽管这只允许您更改主屏幕的墙纸):

tell application "Finder" to set the desktop picture to the_image_file

the_image_file您要设置的图像在哪里。)

于 2011-08-07T07:28:42.420 回答