使用swift在OS X中禁用睡眠模式

时间:2016-04-20 23:54:18

标签: xcode swift macos

我在Xcode中创建了一个OS X应用程序,我希望让我的Mac在打开时不会进入睡眠状态。我知道你在iOS Swift中使用:

UIApplication.sharedApplication().idleTimerDisabled = true

但是你如何使用OS X Swift做到这一点?

2 个答案:

答案 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可能会起作用。但如果有人手动触发睡眠,它就无法工作