1

そのため、製品の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 に答える