web-dev-qa-db-fra.com

La suppression du fichier plist ne réinitialise pas l'application sur macOS 10.9+

Lors du développement d'une application Cocoa sur 10.9, j'ai remarqué que si je vais sur ~/Library/Preferences et supprimez le fichier plist de mon application (pour le réinitialiser), lors de la prochaine génération et exécution, l'application se comporte comme si le fichier plist n'avait jamais été supprimé du tout.

Il m'a fallu beaucoup de temps pour découvrir pourquoi cela se produisait et je n'ai pas vu de question/réponse à ce sujet sur SO, donc j'écris cette question et j'y réponds moi-même pour aider les autres.

42
Bryan

Sur 10.9, le système fait une "mise en cache" plus robuste des préférences. Après avoir supprimé le fichier plist, j'ai lancé Activity Monitor et tué de force le processus "cfprefsd". Attention: il existe plusieurs processus avec ce nom en cours d'exécution et vous ne voulez tuer que celui qui s'exécute sous votre propre utilisateur; ne tuez pas celui qui s'exécute en tant que root.

Cela semble vider le cache des préférences et lors de la prochaine exécution de mon application, j'obtiens un lancement à partir de zéro.

Modifier: comme indiqué ci-dessous, en utilisant defaults delete [your bundle identifier] sur la ligne de commande semble également éliminer le problème de mise en cache. J'ai eu un succès mitigé avec cela.

59
Bryan

J'ai découvert que la suppression du processus utilisateur cfprefsd entraînerait le reflush du cache, donc vos modifications seront conservées

killall -u $USER cfprefsd

14
Pencilcheck

Dans le terminal:

defaults delete com.somecompany.someapp

12
Tom Andersen

BTW, je viens de publier une application GUI qui peut être plus pratique que de travailler avec la commande par défaut:

http://www.tempel.org/PrefsEditor

Il fonctionne pratiquement de la même manière que l'éditeur de plist de Xcode, mais affecte directement les préférences de l'application de l'utilisateur.

Pour supprimer toutes vos préférences, vous pouvez ouvrir vos préférences dans mon éditeur de préférences, Sélectionner tout, puis les supprimer avec la touche Retour arrière ou Supprimer, et elles sont instantanément disparues.

Cependant, pour cette tâche particulière, en utilisant defaults delete peut être encore plus rapide, surtout si vous placez la commande dans un fichier texte se terminant par ".command" et la rendez exécutable (avec chmod +x). Ensuite, vous pouvez double-cliquer dessus dans le Finder pour l'exécuter.

10
Thomas Tempelmann