确定Cocoa中沙盒消息的目的地

时间:2011-08-07 06:27:16

标签: objective-c cocoa desktop sandbox nsworkspace

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

2 个答案:

答案 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是您要设置的任何图像。)