Определение адресата сообщения для песочницы в какао - PullRequest
1 голос
/ 07 августа 2011

Итак, я только что добавил песочницу в один из моих продуктов. Это полностью функционально, за исключением того, что последний шаг в рабочем процессе - настройка рабочего стола. Это делается через 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 ]

1 голос
/ 14 февраля 2012

Я столкнулся с той же проблемой, но нашел другой обходной путь.Включив разрешение «Разрешить доступ к данным календаря», можно установить новые обои с помощью NSWorkspace.

Я знаю, что это довольно странный обходной путь, и я не знаю, ориентирован ли он на будущее (Apple может заблокироватьв будущих версиях).Он работает во время написания, и я подумал, что стоит поделиться им со следующим человеком, имеющим эту проблему.

0 голосов
/ 07 августа 2011

AFAIK нет никаких исключений для установки обоев. Кроме того, песочница, похоже, убивает не сам метод NSWorkspace, а скорее распределенное уведомление (это то, что говорится в журнале). Таким образом, если этот метод NSWorkspace реализован с использованием распределенных уведомлений, он должен использовать полезную нагрузку (-[NSNotification userInfo]), но полезные нагрузки не разрешены в песочнице.

Если вы хотите пойти по пути Apple Event, вы всегда можете попробовать изменить обои с помощью AppleScript (хотя это позволяет изменить только обои главного экрана):

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

(где the_image_file - это любое изображение, которое вы хотите установить.)

...