Как я могу написать «все пользовательские» настройки в OS X Lion? - PullRequest
3 голосов
/ 15 сентября 2011

Я работаю над приложением, которое хранит некоторые настройки для всех пользователей. Это делается путем передачи kCFPreferencesAnyUser в качестве параметра userName для CFPreferencesSetValue.

До OS X версии 10.7 (Lion) это работало нормально. Однако, когда этот код выполняется на Lion, вызов не выполняется, даже если приложение запускается из учетной записи администратора. Документация для CFPreferencesSetValue гласит:

Обратите внимание, что вы можете сохранить настройки для «Любой пользователь», только если у вас есть права администратора.

... и из результатов поиска я вижу, что требуемые привилегии изменились между Snow Leopard и Lion (с admin до root ). Кажется также, что я мог бы продолжать использовать подобный код, следуя примеру SMJobBless кода Apple ...

... для безопасной установки вспомогательного инструмента, выполняющего привилегированную операцию ...

Замечу, однако, что документация для kCFPreferencesAnyUser сама гласит:

Этот домен в настоящее время не поддерживается.

Является ли использование вспомогательного инструмента правильным способом создания пользовательских настроек? Или есть какой-то другой поддерживаемый метод, который я должен использовать?

1 Ответ

1 голос
/ 16 сентября 2011

На самом деле это очень хороший вопрос, и, похоже, нет особенно хорошего ответа.

SMJobBless имеет проблему с тем, что вам необходимо кодировать инструмент с такой же подписью, как у родительского приложения. К сожалению, это системные настройки, и, следовательно, только Apple может теперь производить необходимые подписи кода для вспомогательного инструмента.

Учитывая это, я думаю, что есть три варианта:

  • использовать более старый API авторизации для запуска вспомогательного инструмента (например, AuthorizationExecuteWithPrivileges)
  • используйте автономное приложение, чтобы написать настройки
  • Roll-your-own Preference API (используется либо из подключаемого модуля prefpane, либо нет)

Хуже всего во всем этом то, что API-интерфейсы CFPreference, по-видимому, полностью не работают - просто ничего не происходит при установке значения глобального предпочтения.

EDIT

К сожалению. Я думаю, что я немного прыгнул вперед. Да, если вы делаете это из своего собственного дополнения, тогда код SMJobBless поможет. Тем не менее, очень сложно кодировать вспомогательное приложение и некоторую форму IPC только для чтения и записи общих значений предпочтений - может быть проще свернуть собственную систему предпочтений с помощью общего файла, если ваши потребности достаточно просты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...