我在Xcode中創建了OS X應用程序,並且我希望在打開Mac時不讓它進入睡眠狀態。我知道在你使用的斯威夫特:使用swift在OS X中禁用睡眠模式
UIApplication.sharedApplication().idleTimerDisabled = true
但你怎麼用OS X Swift呢?
我在Xcode中創建了OS X應用程序,並且我希望在打開Mac時不讓它進入睡眠狀態。我知道在你使用的斯威夫特:使用swift在OS X中禁用睡眠模式
UIApplication.sharedApplication().idleTimerDisabled = true
但你怎麼用OS X Swift呢?
如果您嘗試阻止閒置觸發的睡眠,IOCancelPowerCharge可能會起作用。但如果手動觸發睡眠,它將不起作用
我該怎麼做?我在網上找不到任何告訴我如何去做的事。 –
當前方式顯示在Technical QA 1340中。它表面上關於睡眠和喚醒通知,但請查看列表2,標題爲「使用Mac OS X 10.6 Snow Leopard中的I/O Kit預防睡眠」。您基本上使用IOPMAssertionCreateWithName
進入睡眠不允許的狀態,然後在完成後致電IOPMAssertionRelease
。
我沒有示例代碼,因爲我沒有親自使用它,但將技術說明中的代碼移植到Swift會非常簡單。
更新:那API是介紹在10.6,但在最新的操作系統仍然能正常工作,而據我所知還是做的首選方式。也適用於Swift。
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.
}
我很感謝你試圖幫助,但這個答案適用於OS X 10.6。我有OS X 10.11。此代碼也在Objective-C中。 Swift直到OS X 10.9纔出現。我需要Swift的代碼。 –
@NathanaelCarper這在OS X 10.13中完美工作。我把它重構成我自己的代碼,發佈[在這裏](https://stackoverflow.com/questions/37601453/using-swift-to-disable-sleep-screen-saver-for-osx/46519646#46519646)。 – Andreas
看看源的'caffeinate'命令:http://opensource.apple.com/source/PowerManagement/PowerManagement-321.2.9/caffeinate/caffeinate.c – jtbandes