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
risposta
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.
Sapete quali sarebbero le eccezioni sandbox necessarie per questo metodo? –
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
Si può (e dovrebbe) è sufficiente utilizzare NSUserDefaults:
let theDefaults = NSUserDefaults(suiteName: "com.apple.notificationcenterui")
print(theDefaults?.boolForKey("doNotDisturb"))
In Objective-C, è possibile accedere al valore in questo modo:
NSUserDefaults* defaults = [[NSUserDefaults alloc]initWithSuiteName:@"com.apple.notificationcenterui"];
BOOL dnd = [defaults boolForKey:@"doNotDisturb"];
Swift 4
UserDefaults(suiteName: "com.apple.notificationcenterui")?.bool(forKey: "doNotDisturb")
- 1. Come controllare lo stato del server PostgreSQL Mac OS X
- 2. C'è un modo per controllare in modo programmato lo stato della modalità aereo?
- 3. Controllare lo stato di AutoResetEvent
- 4. Identificare in modo univoco la finestra attiva su OS X
- 5. sem_init su OS X
- 6. valgrind non funziona su OS X 10.8
- 7. Mono su OS X: System.Data.SQLite non funziona
- 8. Installazione di librerie C++ su OS X
- 9. Controllare lo stato di Gearman Worker su una particolare macchina
- 10. xlocale rotto su OS X?
- 11. Come risolvere PhantomJS non trovato su PATH su OS X?
- 12. Oggi Widget su OS X non funziona
- 13. PyCharm - $ PATH su OS X
- 14. su OS X 10.7 non funziona?
- 15. Mouse multipli su OS X
- 16. Come monitorare un processo su OS X?
- 17. JNotify su Mac OS X?
- 18. Programmazione in Lua su OS X?
- 19. Installa pip su OS X
- 20. Installazione di readline 6.0 su OS X
- 21. Installazione di Git su OS X
- 22. QWidget su Mac OS X non attivo in Qt 5.x
- 23. HsOpenSSL segfaults su OS X
- 24. dtruss non riesce su ps su OS X 10.11
- 25. emacs su OS X 10.6
- 26. Gcc su OS X: simboli non definiti per l'architettura x86_64
- 27. Il modo migliore per installare pygame su OS X Lion?
- 28. Supporto retina in Qt5 su OS X
- 29. Indirizzo MAC dall'interfaccia su OS X (C)
- 30. Inizializzazione di un'altra finestra utilizzando lo storyboard per OS X
Hai trovato qualche soluzione? se è così, per favore postalo, ne ho davvero bisogno. – Mrug
Non ho mai trovato una soluzione, ho rinunciato – Erik