Аутентифицируйте приложение macOS, чтобы вывести Mac из спящего режима

Я ищу способ аутентификации приложения macOS, которое позволило бы приложению вывести Mac пользователя из спящего режима.

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

Когда я запускаю код IOPMSchedulePowerEvent, значение «результата» в приведенном ниже коде равно (IOReturn) result = -536870207.

IOReturn result = IOPMSchedulePowerEvent(CFBridgingRetain(someCFDate), NULL, CFSTR(kIOPMAutoWake));

Покопавшись и найдя человека с похожей проблемой в этом сообщении на форуме , я почти уверен, что корень моей проблемы заключается в необходимости аутентификации приложения, чтобы оно могло вывести Mac пользователя из спящего режима. Я нашел часть документации Apple по локальной аутентификации здесь, но она до сих пор, похоже, не полностью решает мою проблему.

Итак, вкратце, как я могу предоставить приложению аутентификацию, необходимую для пробуждения Mac от спящего режима?

Изменить: я еще немного изучил проблему и думаю, что добился хорошего прогресса.

Во-первых, причина, по которой я получил kIOReturnNotPrivileged, заключалась в том, что вы должны запускать приложение от имени пользователя root в Xcode. Этого можно добиться, отредактировав схему отладки через Product > Scheme > Edit Scheme и изменив параметр «Debug Process as» на «Root».

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

Кажется, есть некоторые другие проблемы, которые возникают в Xcode 8.3, если ваше приложение находится в песочнице и работает от имени пользователя root. Я создам еще один пост, чтобы задать этот вопрос.


person mgwiggles    schedule 29.05.2017    source источник
comment
Действительно, возвращаемое значение, которое вы получаете, равно kIOReturnNotPrivileged.   -  person jtbandes    schedule 29.05.2017
comment
Ваше приложение находится в песочнице? Вы пытались запустить это из привилегированного помощника? developer.apple.com/library/content/ documentation/Security/ Обратите внимание, что LocalAuthentication API, на который вы ссылались, больше касается Touch ID, чем чего-либо еще.   -  person jtbandes    schedule 29.05.2017
comment
Привет @jtbandes. Да, мое приложение находится в песочнице. Я ознакомился с документацией, которую вы приложили. Похоже, привилегированный помощник, вероятно, даст мне то, что мне нужно. Однако оказывается, что использование привилегированного помощника запрещает отправку приложения в App Store. Я предполагаю, что не так много других способов позволить приложению вывести компьютер из спящего режима, поэтому лучше вообще запретить сон, например, в документации Apple здесь   -  person mgwiggles    schedule 29.05.2017