2016-04-20 79 views
0

我在Xcode中創建了OS X應用程序,並且我希望在打開Mac時不讓它進入睡眠狀態。我知道在你使用的斯威夫特:使用swift在OS X中禁用睡眠模式

UIApplication.sharedApplication().idleTimerDisabled = true 

但你怎麼用OS X Swift呢?

+0

看看源的'caffeinate'命令:http://opensource.apple.com/source/PowerManagement/PowerManagement-321.2.9/caffeinate/caffeinate.c – jtbandes

回答

0

如果您嘗試阻止閒置觸發的睡眠,IOCancelPowerCharge可能會起作用。但如果手動觸發睡眠,它將不起作用

+2

我該怎麼做?我在網上找不到任何告訴我如何去做的事。 –

1

當前方式顯示在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. 
} 
+0

我很感謝你試圖幫助,但這個答案適用於OS X 10.6。我有OS X 10.11。此代碼也在Objective-C中。 Swift直到OS X 10.9纔出現。我需要Swift的代碼。 –

+0

@NathanaelCarper這在OS X 10.13中完美工作。我把它重構成我自己的代碼,發佈[在這裏](https://stackoverflow.com/questions/37601453/using-swift-to-disable-sleep-screen-saver-for-osx/46519646#46519646)。 – Andreas