使用Swift为OSX禁用睡眠/屏幕保护程序

时间:2016-06-02 20:23:48

标签: swift macos cocoa

我正在寻找一种方法来使用Swift通过我的应用程序禁用睡眠模式和屏幕保护程序。我知道questionbeenbefore,但没有一个答案是最新的(至少对于Swift;我不知道Objective-C)。

我原本以为使用NSWorkspace.sharedWorkspace().extendPowerOffBy(requested: Int),但根据Apple's documentation,它目前尚未实现。

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

我最近遇到了这个answer。它链接到Apple的Q&A1340,并将清单2翻译成Swift。

我将它重构为一些不同的代码,它们展示了如何在整个runloop中使用它们。我确实检查了代码,但它确实有效。

var assertionID: IOPMAssertionID = 0
var success: IOReturn?

func disableScreenSleep(reason: String = "Unknown reason") -> Bool? {
    guard success != nil else { return nil }
    success = IOPMAssertionCreateWithName(kIOPMAssertionTypeNoDisplaySleep as CFString,
                                          IOPMAssertionLevel(kIOPMAssertionLevelOn),
                                          reason as CFString,
                                          &assertionID)
    return success == kIOReturnSuccess
}

func  enableScreenSleep() -> Bool {
    if success != nil {
        success = IOPMAssertionRelease(noSleepAssertionID)
        success = nil
        return true
    }
    return false
}

Q&A1340 answer还指出使用NSWorkspace.shared只应用于支持OS X< 10.6。