Où sont stockées les données NSUserDefaults d’une application Mac?

J’utilise NSUserDefaults pour stocker des données dans mon application.

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; [prefs setObject:@"dummy ssortingng" forKey:@"lastValue"]; [prefs synchronize]; 

À des fins de test, je dois voir le fichier plist System Preferences dans lequel mes données NSUserDefaults sont enregistrées sur le Mac.

Je sais où sont stockées les valeurs par défaut de l’application iOS, mais je ne connais pas l’application Mac. Où sont stockées les données NSUserDefaults d’une application Mac?

Ils peuvent être trouvés dans plus d’un endroit:

 ~/Library/Preferences/com.example.myapp.plist ~/Library/SyncedPreferences/com.example.myapp.plist 

et si en bac à sable

 ~/Library/Containers/com.example.myapp/Data/Library/Preferences/com.example.myapp.plist ~/Library/Containers/com.example.myapp/Data/Library/SyncedPreferences/com.example.myapp.plist 

Dans ~/Library/Preferences/com.example.myapp.plist .

(Xcode 7.3.1, macOS 10.11.6)

Pour supplémentaire, si vous utilisez des groupes d’applications

  if let prefs = NSUserDefaults(suiteName: "group.groupApps") { ... } 

fichier plist sera ici:

~ / Bibliothèque / Groupe Conteneurs / groupe. groupApps / Library / Preferences / group.groupApps.plist

Sur Sierra, j’ai trouvé les données ici: ~/Library/Application Support/ .

Un autre emplacement possible pour ces données entre en jeu lorsque vous essayez un terrain de jeu. J’expérimentais UserDefaults dans un Playground, en utilisant XCode 8.3 et Swift 3, et je voulais voir le fichier plist résultant. Après un certain travail de détective (les fichiers UserDefaults ont l’identifiant du bundle dans le nom de fichier et l’appel à Bundle.main.bundleIdentifier dans un Playground donne l’identifiant XCode), j’ai trouvé à ma grande surprise que les données UserDefaults étaient ajoutées à:

 ~/Library/Preferences/com.apple.dt.Xcode 

En d’autres termes, les clés et les valeurs sont ajoutées au fichier de préférences XCode! J’ai vérifié deux fois en trouvant des chaînes très improbables pour les clés et elles y ont bien été ajoutées. Je n’ai pas eu le courage d’essayer d’utiliser certaines touches déjà utilisées par XCode, mais la prudence semble bonne ici.