2014-10-11 10 views
9

Wie kann ich unter Objective-C programmatisch den Status der Systemeinstellung "Nicht stören" unter OS X überprüfen? Es ist in Ordnung, Hacks oder private APIs zu verwenden, da ich nicht an den Mac App Store senden muss.Programmatische Überprüfung des Status von "Bitte nicht stören" unter OS X

+0

Haben Sie eine Lösung gefunden? Wenn ja, dann poste es bitte, ich brauche es dringend. – Mrug

+0

Ich habe nie eine Lösung gefunden, ich gab – Erik

Antwort

2

This answer beschreibt, wie Sie den Status nicht stören über die Befehlszeile lesen und schreiben.

Beachten Sie, dass der Dateiname die Hardware-UUID Ihres Computers enthält. Der Einfachheit halber ist es eine Konstante im folgenden Code. Sie können es mit der integrierten System Information App herausfinden. Es gibt auch verschiedene Möglichkeiten, es programmgesteuert zu bekommen, like this, die ich noch nicht ausprobiert habe.

Mit Swift, den Inhalt der plist Datei kann als NSDictionary wie folgt gelesen werden:

import Foundation 

// Get path to file 
let uuid = "00000000-0000-0000-0000-000000000000" 
let filepath = "~/Library/Preferences/ByHost/com.apple.notificationcenterui.\(uuid).plist".stringByExpandingTildeInPath 

// Load file as `NSDictionary` 
if let dict = NSDictionary(contentsOfFile: filepath) { 

    // Get state of Do Not Disturb 
    let doNotDisturbState = dict["doNotDisturb"] as? Bool 
    println(doNotDisturbState) 
} 

Als ich es getestet, dauerte es manchmal mehrere Sekunden für den Inhalt des plist Datei wird aktualisiert, daher erhalten Sie den neuen Zustand nicht unmittelbar nach der Änderung.

+1

Weißt du, was die notwendigen Sandbox-Ausnahmen für diese Methode wäre? –

+1

Sie sollten niemals direkt auf Benutzereinstellungen per Datei zugreifen, da macOS einen Dienst zur Verwaltung verwendet. Daher kann der Inhalt der Datei und die Antwort von 'NSUserDefaults'' valueForKey' abweichen. – clemens

7

Sie können (und sollten) einfach NSUserDefaults verwenden:

let theDefaults = NSUserDefaults(suiteName: "com.apple.notificationcenterui") 
print(theDefaults?.boolForKey("doNotDisturb")) 
1

In Objective-C, können Sie den Wert wie folgt zugreifen:

NSUserDefaults* defaults = [[NSUserDefaults alloc]initWithSuiteName:@"com.apple.notificationcenterui"]; 
BOOL dnd = [defaults boolForKey:@"doNotDisturb"]; 
0

Swift 4

UserDefaults(suiteName: "com.apple.notificationcenterui")?.bool(forKey: "doNotDisturb")