Я ищу способ аутентификации приложения 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. Я создам еще один пост, чтобы задать этот вопрос.
kIOReturnNotPrivileged
. - person jtbandes   schedule 29.05.2017