我在Xcode中创建了一个OS X应用程序,我希望让我的Mac在打开时不会进入睡眠状态。我知道你在iOS Swift中使用:
UIApplication.sharedApplication().idleTimerDisabled = true
但是你如何使用OS X Swift做到这一点?
答案 0 :(得分:3)
目前的方式显示在Technical QA 1340中。它表面上是关于睡眠和唤醒通知的,但请查看清单2,标题为“使用Mac OS X 10.6 Snow Leopard中的I / O Kit预防睡眠”。您基本上使用IOPMAssertionCreateWithName
进入禁止睡眠的状态,然后在完成后调用IOPMAssertionRelease
。
我没有示例代码,因为我没有亲自使用过这个代码,但将技术说明中的代码移植到Swift非常简单。
更新:该API在10.6中被引入,但在最新的操作系统中仍能正常运行,据我所知,仍然是首选方法。也适用于斯威夫特。
import IOKit
import IOKit.pwr_mgt
let reasonForActivity = "Reason for activity" as CFString
var assertionID: IOPMAssertionID = 0
var success = IOPMAssertionCreateWithName( kIOPMAssertionTypeNoDisplaySleep as CFString,
IOPMAssertionLevel(kIOPMAssertionLevelOn),
reasonForActivity,
&assertionID )
if success == kIOReturnSuccess {
// Add the work you need to do without the system sleeping here.
success = IOPMAssertionRelease(assertionID);
// The system will be able to sleep again.
}
答案 1 :(得分:0)
如果您正在尝试阻止空闲触发的睡眠,IOCancelPowerCharge可能会起作用。但如果有人手动触发睡眠,它就无法工作