Как уложить Ма c программно для сна с помощью Swift - PullRequest
0 голосов
/ 02 февраля 2020

Я пишу программу, чтобы заставить мой MacBook Pro go спать, когда приложение открывается, но я не могу понять это. Я не знаю, связано ли это с управлением питанием или с чем-то, но из того, что я обнаружил, это связано с IOKit.pwr_mgt. Ваша помощь будет оценена! Код ниже показывает, как включить спящий режим, но не переводить компьютер в спящий режим. Я также нашел функцию applicationDidFinishLaunching, поэтому код находится в этой функции.

var assertionID: IOPMAssertionID = 0
var success = IOPMAssertionRelease(assertionID)

1 Ответ

0 голосов
/ 03 февраля 2020

Это не связано с управлением питанием. Вам действительно нужно будет запустить скрипт с вашим приложением.

Самый простой способ выполнить sh - это сначала отключить возможность изолированной программной среды приложения.

Далее go в вашем приложении info.plist и добавьте NSAppleEventsUsageDescription ключ и описание, что-то вроде "This app needs your permission to put the display to sleep.".

Теперь вам просто нужно выполнить скрипт Apple, сообщающий системные события приложения в спящем режиме. "tell application \"System Events\" to sleep":

Создайте метод для выполнения этого скрипта:

func startScreenSleep() {
    let script = "tell application \"System Events\" to sleep"
    guard let appleScript = NSAppleScript(source: script) else { return }
    var error: NSDictionary?
    appleScript.executeAndReturnError(&error)
    if let error = error {
        print(error[NSAppleScript.errorAppName] as! String)
        print(error[NSAppleScript.errorBriefMessage] as! String)
        print(error[NSAppleScript.errorMessage] as! String)
        print(error[NSAppleScript.errorNumber] as! NSNumber)
        print(error[NSAppleScript.errorRange] as! NSRange)
    }
}

И вызовите его из метода viewDidLoad вашего ViewController:

override func viewDidLoad() {
    super.viewDidLoad()
    startScreenSleep()
}
...