Cara menidurkan Mac secara terprogram dengan Swift

Saya sedang menulis program untuk membuat MacBook Pro saya tertidur ketika aplikasi terbuka tetapi sepertinya saya tidak dapat memahaminya. Saya tidak tahu apakah ini ada hubungannya dengan manajemen daya atau apa, tetapi dari apa yang saya temukan ada hubungannya dengan IOKit.pwr_mgt. Bantuan Anda akan dihargai! Kode di bawah ini hanyalah cara mengaktifkan mode tidur tetapi tidak memasukkan komputer ke mode tidur. Saya juga menemukan fungsi applicationDidFinishLaunching sehingga kodenya ada di fungsi itu.

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

person Community    schedule 02.02.2020    source sumber


Jawaban (1)


Ini tidak terkait dengan manajemen daya. Anda sebenarnya perlu menjalankan skrip dengan aplikasi Anda.

Cara termudah untuk melakukannya adalah dengan terlebih dahulu menonaktifkan kemampuan Sandbox Aplikasi Anda.

Selanjutnya buka aplikasi Anda info.plist dan tambahkan kunci NSAppleEventsUsageDescription dan deskripsi, seperti "This app needs your permission to put the display to sleep.".

Sekarang Anda hanya perlu menjalankan skrip Apple yang memberitahukan peristiwa sistem aplikasi untuk tidur. "tell application \"System Events\" to sleep":

Buat metode untuk menjalankan skrip itu:

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)
    }
}

Dan panggil dari metode viewDidLoad ViewController Anda:

override func viewDidLoad() {
    super.viewDidLoad()
    startScreenSleep()
}
person Leo Dabus    schedule 03.02.2020
comment
Bagi saya dikatakan bahwa Acara Sistem tidak berjalan - person ; 03.02.2020
comment
Apakah Anda memeriksa kotak centang preferensi sistem › keamanan & privasi › tab privasi › Otomatisasi › Aplikasi Anda › Peristiwa Sistem? Saat Anda menjalankan aplikasi untuk pertama kalinya, Anda akan diminta untuk mengizinkannya jika kotak pasir Aplikasi Anda dinonaktifkan dan jika NSAppleEventsUsageDescription ada di daftar info Anda - person Leo Dabus; 03.02.2020
comment
Anda mungkin perlu mengizinkan sistem Anda menjalankan aplikasi dari mana saja. Buka Aplikasi Anda › Utilitas › Terminal dan jalankan sudo spctl --master-disable - person Leo Dabus; 03.02.2020
comment
@TheCodeGuy dropbox.com/s/u3n4by04ub0kvol/ - person Leo Dabus; 03.02.2020
comment
Itu tidak benar-benar meminta saya untuk mengizinkan jika kotak pasir aplikasi dinonaktifkan - person ; 03.02.2020
comment
Anda akan melihat dialog ini ketika menjalankan aplikasi yang tertaut di atas dropbox.com /s/2cs2u8wnf4s4sqv/dialog%20box.png?dl=1 Setelah mengeklik ok, sistem akan tertidur. Saya baru saja mengujinya di mesin lain yang menjalankan Mojave. Hanya perlu menurunkan target OS - person Leo Dabus; 03.02.2020