L'idea è questa:
Un applicazione che controlla quando cambia il file delle preferenze del sistema
Codice: Seleziona tutto
com.apple.systempreferences.plist
Codice: Seleziona tutto
AttentionPrefBundleIDs
Si qui tutto ok, però l'icona del dock rimaneva con il badge sino a quando non forzavo un riavvio con killall Dock ... allora ho indagato ancora è ho cercato se c'era un messaggio di notifica e ho trovato questo...
Codice: Seleziona tutto
francescogerminara@FGMACBOOKPRO01 ~ % strings /System/Applications/System\ Preferences.app/Contents/PlugIns/SystemPreferencesDockTile.docktileplugin/Contents/MacOS/SystemPreferencesDockTile | grep "com.apple"
com.apple.systempreferences
com.apple.systempreferences.refreshdocktile
francescogerminara@FGMACBOOKPRO01 ~ %
Codice: Seleziona tutto
com.apple.systempreferences.refreshdocktile
Qui in sintesi le funzioni realizzate
Monitoraggio del cambio file delle preferenze
Codice: Seleziona tutto
let filewatcher = FileWatcher([NSString(string: "~/Library/Preferences/com.apple.dock.plist").expandingTildeInPath,
NSString(string: "~/Library/Preferences/com.apple.systempreferences.plist").expandingTildeInPath]
Codice: Seleziona tutto
func forceUpdateAttentionPrefBundleIDs(_ path: String) -> Void {
if(path.contains( "com.apple.systempreferences.plist")){
timestamp.printTimestamp()
var nsDictionary: NSMutableDictionary?
nsDictionary = NSMutableDictionary(contentsOfFile: path)
let AttentionPref : NSMutableDictionary? = nsDictionary?.value(forKey: "AttentionPrefBundleIDs") as? NSMutableDictionary
if((AttentionPref?.count ?? 0) > 0){
AttentionPref?.removeAllObjects()
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
print("Modifico AttentionPrefBundleIDs in 0")
nsDictionary!.write(toFile: path, atomically: false)
// let nameNotification = "com.apple.dock.prefchanged"
let nameNotification = "com.apple.systempreferences.refreshdocktile"
CFNotificationCenterPostNotification(CFNotificationCenterGetDistributedCenter(), CFNotificationName(nameNotification as CFString) , nil, nil, true)
print("---prefchanged notify---")
}
}
}
}