Я чувствую вашу боль и нахожусь в одной лодке.Я отвечаю за версию приложения для Mac, которая должна выполнять различные задачи по настройке системы.Конечно, некоторые из этих задач должны быть выполнены с административными правами.Я начал с использования примера кода из BetterAuthorizationSample .Это было серьезной болью для реализации, но, похоже, это сработало.Но затем столкнулись со случаями сбоя в некоторых системах.Я не понимал всего, что делал код BAS, и мое отсутствие опыта кодирования, вероятно, способствовало возникновению проблем.Поэтому мне пришлось удалить эти привилегированные функции из моего приложения.
Кажется, Apple не заботится об отсутствии документации.См. это сообщение от создателя инфраструктуры ServiceManagement .Из его комментариев я предполагаю, что XPC является «интуитивно понятной заменой», о которой он говорит, но поскольку она доступна только в Lion, вам все равно придется найти другое решение для Snow Leopard или более ранних клиентов.Мне также не ясно, можно ли использовать XPC для привилегированных помощников (задач системного уровня, требующих доступа администратора или root) или просто для разделения привилегий в вашем собственном приложении, чтобы сделать его более безопасным.
BASдокументация остро нуждается в обновлении, но она также не является главным приоритетом .
Теперь я пытаюсь переписать свое приложение с нуля. Профессиональная защита приложений какао Грэма Ли дает некоторое представление о том, как использовать привилегированных помощников с SMJobBless, но не дает подробных сведений о доступе по требованию к запускаемым заданиям.
ИтакВот что я смог найти:
Если вы хотите запускать своего привилегированного помощника по требованию, вам придется использовать сокет IPC.Вы должны добавить запись Sockets в список launchd.plist вашего помощника.После установки приложения с помощью SMJobBless помощнику потребуется «зарегистрироваться» с помощью launchd (через LAUNCH_KEY_CHECKIN), чтобы получить дескрипторы файлов сокетов.
К сожалению, единственные упоминания о LAUNCH_KEY_CHECKIN, по-видимому, присутствуют в SampleD и BAS пример кода.
У меня нет опыта работы с сокетами, так что на данный момент это мой контрольно-пропускной пункт.Я хотел бы использовать API самого высокого уровня, который я могу, поэтому я пытаюсь выяснить, могу ли я использовать для этого какие-либо классы Objective-C (например, NSStream).
Вы можете найти лист рассылки для разработчиков launchd полезно.Другой вариант XPC, о котором я только что узнал, это XPCKit .Это стоит посмотреть.
HTH