2014-10-11 14 views
9

Utilizzando Objective-C, come posso controllare a livello di codice lo stato dell'impostazione "Non disturbare" del sistema su OS X? Sto bene con l'utilizzo di hack o API private poiché non ho bisogno di inviare al Mac App Store.Controllare in modo programmato lo stato di non disturbo su OS X

+0

Hai trovato qualche soluzione? se è così, per favore postalo, ne ho davvero bisogno. – Mrug

+0

Non ho mai trovato una soluzione, ho rinunciato – Erik

risposta

2

This answer descrive come leggere e scrivere lo stato di Non disturbare utilizzando la riga di comando.

Si noti che il nome file contiene l'UUID hardware del Mac. Per semplicità, è una costante nel codice qui sotto. È possibile capirlo utilizzando l'app integrata System Information. Ci sono anche diversi modi per farlo a livello di programmazione, like this, che non ho ancora provato.

Utilizzando Swift, il contenuto del file plist può essere letto come NSDictionary come segue:

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

Quando ho provato, a volte sono voluti diversi secondi per il contenuto del plist file da aggiornare, quindi non si otterrà il nuovo stato immediatamente dopo la modifica.

+1

Sapete quali sarebbero le eccezioni sandbox necessarie per questo metodo? –

+1

Non si dovrebbe mai accedere direttamente alle impostazioni predefinite dell'utente, perché macOS utilizza un servizio da gestire. Pertanto, il contenuto del file e la risposta di 'NSUserDefaults'' valueForKey' possono differire. – clemens

7

Si può (e dovrebbe) è sufficiente utilizzare NSUserDefaults:

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

In Objective-C, è possibile accedere al valore in questo modo:

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

Swift 4

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