Existe-t-il un moyen de voir ce qui a été enregistré NSUserDefaults
directement? Je voudrais voir si mes données ont été enregistrées correctement.
Existe-t-il un moyen de voir ce qui a été enregistré NSUserDefaults
directement? Je voudrais voir si mes données ont été enregistrées correctement.
Réponses:
Vous pouvez trouver le fichier pList pour votre application dans le simulateur si vous allez sur:
/ users / votre nom d'utilisateur / Library / Application Support / iPhone Simulator / <Sim Version> / Applications
Ce répertoire a un tas de répertoires nommés GUID. Si vous travaillez sur quelques applications, il y en aura quelques-unes. Vous devez donc trouver votre application binaire:
find . -name foo.app
./1BAB4C83-8E7E-4671-AC36-6043F8A9BFA7/foo.app
Allez ensuite dans le répertoire Library / Preferences du répertoire GUID. Alors:
cd 1BAB4C83-8E7E-4671-AC35-6043F8A9BFA7/Library/Preferences
Vous devriez trouver un fichier qui ressemble à:
<Bundle Identifier>.foo.pList
Ouvrez-le dans l'éditeur pList et parcourez les valeurs persistantes au contenu de votre cœur.
NSUserDefaults
, alors NSUserDefaults
ils ne sont pas conservés dans un fichier .plist mais plutôt gérés en mémoire: stackoverflow.com/questions/6193597/…
Vous pouvez imprimer tous les NSUserDefaults actuels dans le journal:
Juste les clés:
NSLog(@"%@", [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]);
Clés et valeurs:
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
for (key, value) in UserDefaults.standard.dictionaryRepresentation() {
print("\(key) = \(value) \n")
}
print(Array(UserDefaults.standard.dictionaryRepresentation()))
// Using dump since the keys are an array of strings.
dump(Array(UserDefaults.standard.dictionaryRepresentation().keys))
Nous pouvons également utiliser le vidage ici, mais cela renverra la hiérarchie d'héritage complète de chaque élément du tableau de valeurs. Si plus d'informations sur les objets sont nécessaires, utilisez dump, sinon continuez avec l'instruction print normale.
// dump(Array(UserDefaults.standard.dictionaryRepresentation().values))
print(Array(UserDefaults.standard.dictionaryRepresentation().values))
print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation())
print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array)
print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().values.array)
Vous pouvez vérifier les valeurs de chaque clé du tableau, renvoyées par
[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]
J'utilise parfois l'extrait de code suivant pour imprimer l'emplacement de mon fichier NSUserDefaults lors de l'exécution dans le simulateur
NSArray * path = NSSearchPathForDirectoriesInDomains ( NSLibraryDirectory, NSUserDomainMask, YES); NSString * folder = [chemin objectAtIndex: 0]; NSLog (@ "Vos NSUserDefaults sont stockés dans ce dossier:% @ / Preferences", dossier);
Il donne le chemin vers le dossier des préférences
Vos NSUserDefaults sont stockés dans ce dossier: / Users / castle / Library / Application Support / iPhone Simulator / User / Applications / BC5056A0-F46B-4AF1-A6DC-3A7DAB984960 / Library / Preferences
Votre fichier NSUserDefaults se trouve dans le dossier des préférences et est nommé en fonction de votre préfixe et du nom de l'application, par exemple
dk.castleandersen.dreamteam.grid.plist
Je m'attends à ce qu'il en soit de même pour le périphérique réel.
Facile, puisque le nom du fichier plist est <app-bundle-identifier>.plist
, vous pouvez utiliser la find
commande pour trouver son chemin. Mais cela prendra très longtemps si vous recherchez tout votre ordinateur, vous devez donc choisir une bonne portée, comme ~/Library/Developer/CoreSimulator
pour Xcode 6.
exemple:
find ~/Library/Developer/CoreSimulator -type f -name com.awesome.app.plist
la sortie sera quelque chose comme ça ...
/Users/hlung/Library/Developer/CoreSimulator/Devices/B61913F6-7D7C-4E45-AE2F-F45220A71823/data/Containers/Data/Application/E4CC51CF-11E5-4168-8A74-6BAE3B89998F/Library/Preferences/com.awesome.app.plist
Et à partir de là, vous pouvez utiliser la open
commande. Ou si vous utilisez iTerm2 , il vous suffit de cliquer avec le bouton droit sur le chemin pour l'ouvrir.
Dans Swift 4.0
//func dictionaryRepresentation() -> [String : AnyObject]
parce que dictionaryRepresentation de NSUserDefaults.standardUserDefaults () renvoie [String: AnyObject]
Nous l'avons jeté dans un NSDictionary
. Ensuite, en l'entourant de parenthèses '()' nous permettra d'appeler .allKeys ou .allValues comme vous le feriez sur n'importe quel NSDictionary
print((UserDefaults.standard.dictionaryRepresentation() as NSDictionary).allKeys)
Utilisez le code ci-dessous.
NSLog(@"NSUserDefault: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
Pour les applications OS X , au lieu de trouver le fichier plist par défaut de l'application, il est plus simple d'utiliser l' defaults
utilitaire de ligne de commande.
NOM
defaults -- access the Mac OS X user defaults system
SYNOPSIS
defaults [-currentHost | -host hostname] read [domain [key]] defaults [-currentHost | -host hostname] read-type domain key defaults [-currentHost | -host hostname] write domain { 'plist' | key 'value' } defaults [-currentHost | -host hostname] rename domain old_key new_key defaults [-currentHost | -host hostname] delete [domain [key]] defaults [-currentHost | -host hostname] { domains | find word | help }
LA DESCRIPTION
defaults
permet aux utilisateurs de lire, d'écrire et de supprimer les valeurs par défaut de l'utilisateur Mac OS X à partir d'un shell de ligne de commande. Les applications Mac OS X et d'autres programmes utilisent le système par défaut pour enregistrer les préférences de l'utilisateur et d'autres informations qui doivent être conservées lorsque les applications ne sont pas en cours d'exécution (comme la police par défaut pour les nouveaux documents ou la position d'un panneau d'informations). La plupart de ces informations sont accessibles via le panneau Préférences d'une application, mais certaines ne le sont pas, comme la position du panneau Info. Vous pouvez accéder à ces informations avecdefaults
Exemple:
$ defaults read com.apple.Safari
{
AutoplayPolicyWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
AutoplayQuirksWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
DefaultBrowserPromptingState2 = 4;
...
Pour Xcode 7
NSUserDefaults standardDefaults sont stockés ici:
/Users/{USER}/Library/Developer/CoreSimulator/Devices/{UUID}/data/Containers/Data/Application/{UUID}
NSUserDefaults pour un groupe de suites / applications sont stockés ici:
/Users/{USER}/Library/Developer/CoreSimulator/Devices/{UUID}/data/Containers/Shared/AppGroup/{UUID}/Library/Preferences/{GROUP_NAME}.plist
Je recommanderais d'utiliser https://github.com/scinfu/NCSimulatorPlugin car de nos jours tout est derrière les UUID et sont difficiles à trouver. Il permet un accès facile à vos répertoires d'application de simulateur.
J'ai construit cette méthode sur la base de la suggestion de Morion pour une meilleure présentation. Utilisez-le en appelant[self logAllUserDefaults]
- (void) logAllUserDefaults
{
NSArray *keys = [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys];
NSArray *values = [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allValues];
for (int i = 0; i < keys.count; i++) {
NSLog(@"%@: %@", [keys objectAtIndex:i], [values objectAtIndex:i]);
}
}
NSLog(@"%@", [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] debugDescription]);
(Presque comme dans la réponse la plus votée ci-dessus.)
Recherchez l'application Mac appelée SimPholders2 . Il vit dans la barre de menus et répertorie tous les simulateurs que vous avez utilisés, puis affiche chacune de vos applications. Sélectionnez-en un et vous obtenez une nouvelle fenêtre du Finder, déjà ouverte dans le répertoire de l'application. Cela facilite la recherche de votre application et de tous ses répertoires. C'est un énorme gain de temps (et j'ai facilement fait un don à l'auteur).
Ce script shell recherche le nom de l'application, obtient l' ID de l' ensemble et ouvre les dossiers contenant les fichiers Plist .
#!/bin/bash
appname="$1"
[ -z $appname ] && read -p "Application name : " appname
apppath=$(find ~/Library/Developer/CoreSimulator/Devices/ -name "$appname.app" -print -quit)
if [[ ! -z $apppath ]]; then
appbundle=$(osascript -e "id of app \"$apppath\"")
find ~/Library/Developer/CoreSimulator/Devices/ -name "$appbundle.plist" -exec bash -c 'open "$(dirname "$1")"' -- {} \;
else
echo "No application found by that name: $appname.app"
fi
Usage: iphone-app-folder "My App"
#!/bin/bash
appname="$1"
[ -z "$appname" ] && read -p "Application name : " appname
apppath=$(find ~/Library/Developer/CoreSimulator/Devices -name "$appname.app" -print -quit)
if [[ ! -z $apppath ]]; then
appbundle=$(osascript -e "id of app \"$apppath\"")
echo "Found app $appname (${appbundle})"
echo -e "\033[1;30m$apppath\033[0m"
plists=$(find ~/Library/Developer/CoreSimulator/Devices -name "$appbundle.plist" -print -quit)
count=$(echo plists | wc -l | sed "s/ //g")
if [[ $count -eq 1 ]] && [[ -f "$plists" ]]; then
echo -e "\033[1;32mUserDefaults found for $appname\033[0m"
echo -e "\033[1;30m$plists\033[0m"
plistutil -i "$plists"
/usr/bin/open $(dirname "$plists")
elif [[ ${#plists} -gt 0 ]]; then
echo -e "\033[1;32mUserDefaults found for $appname\033[0m"
i=1
while read line; do
echo "[${i}] ${line} "
i=$((i+1))
done < <(echo "$plists")
echo
read -p "Select defaults to read: [1-${count}] " choice
plist=$(echo ${plists} | sed -n "${choice}p")
plistutil -i "$plist"
/usr/bin/open $(dirname "$plist")
else
echo -e "\033[31mNo UserDefaults plist found for $appname\033[0m"
fi
else
echo -e "\033[31mNo application found by that name: $appname.app\033[0m"
fi
Application trouvée My App (com.organisation.MyApp) / Users / organization / Library / Developer / CoreSimulator / Devices / 3E4C8DC3-6FF4-428F-A624-B78DBE0B8C83 / data / Containers / Bundle / Application / 960A5232-219D-4C46-8CA3- 01E259D8DDAD / My App.app
UserDefaults trouvé pour My App
defaults read com.bundleid.app
Dans Swift 2.2
let path = NSSearchPathForDirectoriesInDomains(.LibraryDirectory, .UserDomainMask, true)
let folder = path[0]
NSLog("Your NSUserDefaults are stored in this folder: \(folder)/Preferences")
affichera l'emplacement du dossier de fichiers plist de NSUserDefaults dans la console de débogage Xcode. Copiez la chaîne de chemin d'accès. Ouvrez votre Finder, sélectionnez Aller au dossier dans l'élément de menu Aller, Collez la chaîne de chemin. Double-cliquez sur le fichier plist. Vous verrez le contenu dans votre éditeur Xcode.
Ne fonctionne que dans Simulator
Merci @Niels Castle
Je garde un raccourci sur mon bureau vers le dossier du simulateur où il conserve les applications, c'est-à-dire:
/Users/gary/Library/Application Support/iPhone Simulator/User/Applications
Trié par date la plus récente, accédez simplement au dossier d'application Bibliothèque / Préférences le plus récent et affichez le fichier dans l'éditeur de plist.
Swift 3
print(UserDefaults.standard.dictionaryRepresentation())
Solution Swift 5 Xcode 11.2
Il s'agit du chemin complet où vos valeurs de clé UserDefaults seront dans un fichier plist. Suivez et recherchez le fichier .plist de votre identifiant de bundle d'application.
/ Utilisateurs / 'Votre nom d'utilisateur' / Bibliothèque / Développeur / CoreSimulator / Périphériques / 4176EED3-B9FC-4C77-A25E-ASD201B9FDFG2 / données / Conteneurs / Données / Application / 56D7CE31-9A8B-4371-9B0F-9604E239423B0 / Bibliothèque / Préférences
Voici "4176EED3-B9FC-4C77-A25E-ASD201B9FDFG2" est votre ID de périphérique
et "56D7CE31-9A8B-4371-9B0F-9604E239423B0" est votre ID d'application
Je les obtiens normalement en triant les dossiers par date de dernière modification dans le Finder. Et le dossier modifié le plus récent est l'ID de mon appareil et l'ID de l'application.
Prendre plaisir!
Vous pouvez NSLog chaque valeur que vous définissez, comme:
NSLog(@"%@",[[NSUserDefaults standardDefaults] stringForKey:@"WhateverTheKeyYouSet"]);
Après avoir lu la réponse acceptée à cette question, j'ai rassemblé ce script simple qui ouvre les fichiers plist utilisés par le simulateur iOS pour stocker les NSUserDefaults
préférences, et bien qu'il suppose une certaine configuration (s'adapte parfaitement à la mienne), il peut fonctionner comme point de départ pour d'autres .
$ cat open-prefs-plist.sh
#!/bin/sh
# The project name based on the workspace path, e.g. "MyProject" from "./MyProject.xcworkspace"
WORKSPACE_NAME=$(echo `find . -name *.xcworkspace -type d -exec basename {} \;` | cut -d'.' -f1)
SIMULATOR_PATH="$HOME/Library/Application Support/iPhone Simulator"
# The App's bundle ID taken from its info plist, e.g "com.myproject" from "./MyProject/MyProject-Info.plist"
BUNDLE_ID=`/usr/libexec/PlistBuddy -c Print:CFBundleIdentifier $WORKSPACE_NAME/$WORKSPACE_NAME"-Info.plist"`
# Open all plist files in the simulator path that match the app's bundle ID
# normally one per iOS version
find "$SIMULATOR_PATH" -name $BUNDLE_ID".plist" -type f -print0 \
| while IFS= read -r -d '' PLIST; do
echo $PLIST
open "$PLIST"
done
Exemple de placement:
$ ls -1
MyProject
MyProject Tests
MyProject.xcodeproj
MyProject.xcworkspace
Podfile
open-prefs-plist.sh
Vous pouvez l'utiliser pour obtenir le chemin complet des préférences utilisateur, du cache et de nombreuses autres données
print(NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true))
Vous pouvez imprimer le chemin du répertoire de préférences à partir du application:didFinishLaunchingWithOptions:
rappel dans votre AppDelegate:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
print(FileManager.default.urls(for: .preferencePanesDirectory, in: .userDomainMask).first!)
return true
}
Ensuite, vous pouvez regarder le fichier plist directement pour voir ce qui y est enregistré.