Quiero utilizar el defaults write
para cambiar una casilla de verificación en las Preferencias del Sistema. Por ejemplo
defaults write ./com.apple.speech.synthesis.general.prefs TimeAnnouncementPrefs -dict-add TimeAnnouncementsEnabled -bool YES
Sin embargo, el sistema operativo almacena en caché los archivos de preferencias, por lo que el comando defaults no tiene efecto hasta que se actualice la caché. La aplicación de Preferencias del Sistema actualiza la caché después de realizar un cambio en su interfaz de usuario, así que es posible. Algunas personas han sugerido sudo killall cfprefsd
pero eso no funciona en Big Sur.
En otro lugar, el usuario3439894 ha publicado un buen AppleScript que manipula la interfaz de usuario de las Preferencias del Sistema. Pero dicha manipulación de la UI no funciona cuando el Protector de Pantalla se está ejecutando.
Me gustaría averiguar cómo la aplicación de Preferencias del Sistema consigue actualizar la caché de preferencias. Haciendo strings
de la aplicación Preferencias del Sistema (en /System/Applications/System\ Preferences.app/Contents/macOS/System\ Preferences
) muestra un método updateCacheFileWithPrefPane:
que podría hacer el trabajo, pero no sé cómo llamar a ese método. El método, sea cual sea, es privado, pero sólo lo necesito para mí (no para una aplicación pública).
¿Es posible utilizar dtrace
o dtruss
para averiguar qué hace la aplicación de Preferencias del Sistema para indicar al sistema operativo que actualice su caché para una casilla concreta? Quiero escribir un Objetivo-C programa para hacer lo mismo, pero necesito que un experto en dtrace/dtruss me ayude.