Понимание привилегированных вспомогательных инструментов в OSX

Мне нужно в какой-то момент в моем приложении повышенные операции. Для этого я нашел яблоки SMJobBless механизм. Я написал простой вспомогательный инструмент и установил его через SMJobBless, Пока это работает. Но что я сейчас не понимаю: как запустить этот инструмент Helper после его установки?

2 ответа

Решение

Читая почти все, что я нашел для этого, я теперь использую XPC Conenction для активации вспомогательного инструмента, который затем запускается по требованию launchd после его установки с помощью SMBlessJob, Для этого вам нужно создать MachService через plist вашего вспомогательного инструмента:

<key>MachServices</key>
<dict>
    <key>com.my.program.Helper</key>
    <true/>
</dict>

(Это нужно сделать в launchd.plist вашего помощника, а не в info.plist).

В вашем вспомогательном инструменте вам необходимо создать службу Mach:

@property (atomic, strong, readwrite) NSXPCListener *listener;

        self->_listener = [[NSXPCListener alloc] initWithMachServiceName:@"com.my.program.Helper"];
        self->_listener.delegate = self;

После этого вы можете подключиться с помощью XPC. Если вам нужна дополнительная информация об этом, посмотрите этот пример от Apple: https://developer.apple.com/library/content/samplecode/EvenBetterAuthorizationSample/Listings/Read_Me_About_EvenBetterAuthorizationSample_txt.html

К сожалению, Apple отказалась от образца, на который ссылался Нидхеггер, и так и не выпустила новый на Swift. Для тех, кто ищет, как лучше всего подойти к этому в Swift, я собрал SwiftAuthorizationSample, который, надеюсь, показывает, как это сделать довольно просто. Так как я также сначала нашел это довольно запутанным и пришел к выводу, что это намного сложнее, чем должно быть, я сделал структуру SecureXPC, которая упрощает создание сервера для этого сценария. XPCMachServer.forBlessedHelperTool() - он автоматически настраивается на основе списков свойств, которые вы уже создали для SMJobBless.

Другие вопросы по тегам