2016-06-02 6 views
5

Ich bin auf der Suche nach einer Möglichkeit zur Deaktivierung von Schlafmodus und Bildschirmschoner durch meine Anwendung mit Swift. Ich weiß das question hat been gefragt before, aber keine der Antworten sind aktuell (zumindest für Swift; ich weiß nicht über Objective-C).Verwenden von Swift zum Deaktivieren von Schlaf/Bildschirmschoner für OSX

Ursprünglich dachte ich, NSWorkspace.sharedWorkspace().extendPowerOffBy(requested: Int) zu verwenden, aber laut Apple's documentation ist es derzeit nicht implementiert.

Irgendwelche Vorschläge?

+0

Haben Sie zufällig eine Lösung gefunden? Für UIApplication kann dies getan werden: 'UIApplication.shared.isIdleTimerDisabled = true', aber' isIdleTimerDisabled' ist kein Mitglied von 'NSApplication'. Ich wäre glücklich, wenn Sie eine Lösung gefunden hätten. – Andreas

+0

@Andreas leider nein, habe ich nicht. – Matt

Antwort

1

Ich bin kürzlich auf diese answer gestoßen. Es verbindet sich bei Apple mit Q&A1340 und übersetzt Listing 2 in Swift.

Ich habe es in einen anderen Code umgestaltet, der zeigt, wie man sie beispielsweise in ganzen Schleifen verwenden kann. Ich habe den Code überprüft und es funktioniert.

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 
} 

Die Q&A1340 answer auch darauf hin, dass NSWorkspace.shared verwenden, sollten nur zur Unterstützung OS X < 10.6 verwendet werden.

+0

Ich habe schwerwiegende Probleme mit der Übersetzung von Listing 3 in Swift und kann daher auch nicht helfen. Wenn jemand mit einem verlinken könnte, wäre ich sehr glücklich. Die Probleme treten auf, wenn ich versuche, die switch-Anweisung zu übersetzen. – Andreas

Verwandte Themen