我正在寻找一种对 macOS 应用程序进行身份验证的方法,该方法允许该应用程序将用户的 Mac 从睡眠状态唤醒。
我知道我可以安排一个电源事件来使用与所提供的类似的代码唤醒计算机here https://stackoverflow.com/questions/3315685/how-to-wake-from-sleep-programmatically.
当我运行 IOPMSchedulePowerEvent 代码时,下面代码中“result”的值为 (IOReturn) result = -536870207。
IOReturn result = IOPMSchedulePowerEvent(CFBridgingRetain(someCFDate), NULL, CFSTR(kIOPMAutoWake));
经过一番挖掘并找到有类似问题的人后这个论坛帖子 https://forums.macrumors.com/threads/using-iopmschedulepowerevent.472101/,我非常有信心问题的根源在于需要对应用程序进行身份验证以允许其将用户的 Mac 从睡眠状态唤醒。我找到了一些用于本地身份验证的苹果文档here https://developer.apple.com/reference/localauthentication?language=objc,但它似乎仍然没有完全解决我的问题。
简而言之,我如何为应用程序提供将 Mac 从睡眠状态唤醒所需的身份验证?
Edit:我一直在进一步研究这个问题,我认为我已经取得了很好的进展。
首先,我得到的原因是kIOReturnNotPrivileged
是因为你必须在 Xcode 中以 root 身份运行该应用程序。这可以通过通过“产品”>“方案”>“编辑方案”编辑调试方案并将“调试进程为”选项更改为“根”来完成。
将应用程序设置为以 root 身份运行,我能够正确安排电源事件,使我的机器进入睡眠状态并在规定的时间将其唤醒。
如果您将应用程序沙箱化并以 root 身份运行,那么 Xcode 8.3 中似乎会出现一些其他问题。我将创建另一个帖子来问这个问题。