La suppression d'un fichier plist ne réinitialise pas l'application sur macOS 10.9+
Tout en développant une application Cocoa sur 10.9, j'ai remarqué que si je vais à ~/Library/Preferences
et supprimer le fichier plist pour mon application (réinitialiser), sur la prochaine génération-and-run, l'application se comporte comme si le fichier plist n'avait jamais été supprimée à tous.
Il m'a fallu beaucoup de temps pour traquer pourquoi cela se produit et je ne le vois pas de question/réponse, à ce sujet, et donc je suis en train d'écrire cette question et d'y répondre moi-même pour aider les autres.
- Une solution simple: redémarrage de l'ordinateur. Maintenant supprimer le fichier plist. Maintenant, construire et exécuter, et vous sera de commencer par nettoyer préf. La raison: Les préférences sont synchronisés dans la mémoire, et sont restaurés à partir de la mémoire, à moins que vous nettoyez la mémoire d'abord, qui est ce que le redémarrage ne.
- Eh bien, oui, ça ira. Mais le redémarrage de votre ordinateur entre chaque générer et exécuter n'est PAS une solution pratique.
- Personne ne suggère de redémarrer avant chaque construction et de l'exécution que dans la situation particulière où vous voulez supprimer le fichier plist pour le réinitialiser. C'est un problème grave parce que vous êtes à combattre le système, qui est de garder un secret en cache du fichier plist et simplement les restaure quand vous le supprimer.
Vous devez vous connecter pour publier un commentaire.
Sur 10.9, le système est en train de faire quelque plus robuste "mise en cache" des préférences. Après la suppression du fichier plist, j'ai allumé le Moniteur d'Activité et de force tué le "cfprefsd" du processus. Attention: il existe plusieurs procédés avec ce nom en cours d'exécution et que vous souhaitez seulement à tuer celui qui exécute, en vertu de votre propre utilisateur; ne pas tuer celui qui exécute en tant que root.
Faisant cela semble rincer les préférences de cache et à la prochaine exécution de mon application, j'obtiens un magnifique commencer à partir de zéro lancement.
Edit: Comme indiqué ci-dessous, à l'aide de
defaults delete [your bundle identifier]
à la ligne de commande s'affiche également à éliminer le problème de mise en cache. J'ai eu un succès mitigé avec cette.defaults delete MyAppsBundleIdentifier
, mais il ne fonctionne pas. Enfin ce n'travail a étékillall cfprefsd
.J'ai découvert que de tuer le processus utilisateur cfprefsd sera reflush le cache, vos modifications seront conservées
killall -u $USER cfprefsd
Dans le terminal:
defaults delete com.somecompany.someapp
BTW, j'ai juste sorti un GUI application qui peut être plus pratique que de travailler avec les valeurs par défaut de la commande:
http://www.tempel.org/PrefsEditor
Il fonctionne pratiquement le même que Xcode plist de l'éditeur, mais affecte l'utilisateur, les préférences de l'application directement.
Pour supprimer toutes vos préférences, vous pouvez ouvrir vos préférences dans ma Préf. de l'Éditeur, Sélectionnez Tout, puis de les supprimer avec la touche retour arrière ou Suppr, et ils sont instantanément toutes disparu.
Cependant, pour cette tâche particulière, à l'aide de
defaults delete
peut-être encore plus rapide, surtout si vous mettez la commande dans un fichier texte se terminant par ".la commande", et de le rendre exécutable (avecchmod +x
). Ensuite, vous pouvez double-cliquez dessus dans le Finder pour l'exécuter.