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

使用Swift禁用OSX的睡眠/屏幕保护程序,swift,macos,cocoa,Swift,Macos,Cocoa,我正在寻找一种通过我的应用程序使用Swift禁用睡眠模式和屏幕保护程序的方法。我知道这是一个问题,但没有一个答案是最新的(至少对于Swift;我不知道Objective-C) 我原本想使用NSWorkspace.sharedWorkspace().extendpowerofby(request:Int),但根据,它目前尚未实现 有什么建议吗?我最近遇到了这个问题。它链接到苹果,并将清单2翻译成Swift 我将其重构为一些不同的代码,这显示了如何在整个过程中使用它们,例如。我确实检查了代码,它工作

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

我原本想使用
NSWorkspace.sharedWorkspace().extendpowerofby(request:Int)
,但根据,它目前尚未实现


有什么建议吗?

我最近遇到了这个问题。它链接到苹果,并将清单2翻译成Swift

我将其重构为一些不同的代码,这显示了如何在整个过程中使用它们,例如。我确实检查了代码,它工作正常

import IOKit.pwr_mgt

var noSleepAssertionID: IOPMAssertionID = 0
var noSleepReturn: IOReturn? // Could probably be replaced by a boolean value, for example 'isBlockingSleep', just make sure 'IOPMAssertionRelease' doesn't get called, if 'IOPMAssertionCreateWithName' failed.

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

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

还指出,使用
NSWorkspace.shared
只能用于支持OSX<10.6。

您是否找到了解决方案?对于UIApplication,可以这样做:
UIApplication.shared.isIdleTimerDisabled=true
,但是
isIdleTimerDisabled
不是
NSApplication
的成员。如果你能找到解决办法,我会很高兴的。@Andreas不幸的是,我没有。这似乎对我有用。我认为值得注意的是,您需要导入IOKit和IOKit.pwr_mgt以使其工作