Une façon simple de voir les Nsuerdefaults sauvegardés?
y a-t-il un moyen de voir directement ce qui a été sauvegardé dans NSUserDefaults
? J'aimerais voir si mes données sont sauvegardées correctement.
19 réponses
vous pouvez trouver le fichier pList pour votre application dans le simulateur si vous allez à:
/users/ votre nom d'utilisateur /Library/Application Support/Simulateur d'iPhone/
ce répertoire contient un tas de répertoires GUID nommés. 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
puis allez à la Bibliothèque / Préférences répertoire dans le répertoire GUID. So:
cd 1BAB4C83-8E7E-4671-AC35-6043F8A9BFA7/Library/Preferences
vous devez trouver un fichier qui ressemble à:
<Bundle Identifier>.foo.pList
ouvrez ceci dans l'éditeur de pList et parcourez les valeurs persistantes à votre contenu de cœur.
vous pouvez imprimer tous les Nsuerdefaults courants dans le log:
Juste clés:
NSLog(@"%@", [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]);
touches et valeurs:
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
dans Swift, nous pouvons utiliser ce qui suit: -
Swift 3.x et 4.x
Pour obtenir toutes les clés et les valeurs de l':
for (key, value) in UserDefaults.standard.dictionaryRepresentation() {
print("\(key) = \(value) \n")
}
pour extraire la représentation complète du dictionnaire des valeurs par défaut de l'utilisateur:
print(Array(UserDefaults.standard.dictionaryRepresentation()))
pour récupérer les clés:
// Using dump since the keys are an array of strings.
dump(Array(UserDefaults.standard.dictionaryRepresentation().keys))
pour la récupération des valeurs:
nous pouvons utiliser dump ici aussi, mais qui retournera le hiérarchie d'héritage complète de chaque élément dans le tableau des valeurs. Si vous avez besoin de plus d'informations sur les objets, utilisez dump, sinon allez de l'avant avec l'instruction d'impression normale.
// dump(Array(UserDefaults.standard.dictionaryRepresentation().values))
print(Array(UserDefaults.standard.dictionaryRepresentation().values))
Swift 2.x
pour extraire la représentation complète du dictionnaire des valeurs par défaut de l'utilisateur:
print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation())
pour récupérer les clés:
print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array)
pour la récupération des valeurs:
print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().values.array)
vous pouvez vérifier les valeurs pour chaque clé dans le tableau, retourné par
[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]
j'utilise parfois l'extrait suivant pour imprimer l'emplacement de mon fichier par défaut Nsuerdefaults lors de l'exécution dans le simulateur
NSArray *path = NSSearchPathForDirectoriesInDomains( NSLibraryDirectory, NSUserDomainMask, YES); NSString *folder = [path objectAtIndex:0]; NSLog(@"Your NSUserDefaults are stored in this folder: %@/Preferences", folder);
il fournit le chemin vers le dossier Préférences
vos Nuserdefaults sont stockés dans ce dossier: /Users/castle/Library/Application Support/iPhone Simulator/User/Applications/BC5056A0-F46B-4AF1-A6DC-3A7DAB984960/Library/Preferences
votre Le fichier NSUserDefaults est situé dans le dossier préférences et nommé en fonction de votre préfixe et du nom d'application, par exemple
dk.castleandersen.dreamteam.grid.plist
Je m'attends à ce que la même chose soit vraie pour le dispositif réel.
utiliser le code ci-dessous.
NSLog(@"NSUserDefault: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
Dans Swift 4.0
//func dictionaryRepresentation() -> [String : AnyObject]
parce que la représentation dictionnairedes défauts de Nsuserdef.standardUserDefaults() renvoie [String: AnyObject]
nous le plaçons dans un NSDictionary
. Puis en l'entourant entre parenthèses '() ' nous permettra d'appeler .allKeys or .toutes les valeurs tout comme vous le feriez sur N'importe quel NSDictionary
print((UserDefaults.standard.dictionaryRepresentation() as NSDictionary).allKeys)
facile, puisque le nom du fichier plist est <app-bundle-identifier>.plist
, vous pouvez utiliser la commande find
pour trouver son chemin. Mais cela prendra beaucoup de temps si vous cherchez sur tout votre ordinateur, donc vous devez choisir un bon scope, comme ~/Library/Developer/CoreSimulator
pour Xcode 6.
exemple:
find ~/Library/Developer/CoreSimulator -type f -name com.awesome.app.plist
le résultat sera quelque chose comme ceci...
/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 de là vous pouvez utiliser open
commande. Ou si vous utilisez iTerm2 , il suffit de command-click sur le chemin pour l'ouvrir.
Pour Xcode 7
Nsuerdefaults standardDefaults sont stockés ici:
/Users/{USER}/Library/Developer/CoreSimulator/Devices/{UUID}/data/Containers/Data/Application/{UUID}
NSUserDefaults pour un bureau/app groupe sont stockées ici:
/Users/{USER}/Library/Developer/CoreSimulator/Devices/{UUID}/data/Containers/Shared/AppGroup/{UUID}/Library/Preferences/{GROUP_NAME}.plist
je recommande d'utiliser https://github.com/scinfu/NCSimulatorPlugin parce que ces jours-ci tout est derrière UUIDs et sont un douleur à trouver. Il permet un accès facile à vos répertoires d'applications de simulateur.
j'ai construit cette méthode basée sur 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]);
}
}
recherchez L'application Mac appelée SimPholders2 . Il se trouve dans la barre de menu, et liste tous les simulateurs que vous avez utilisés, puis affiche chacune de vos applications. Sélectionnez - en une et vous obtenez une nouvelle fenêtre de Finder, déjà ouverte sur le répertoire de l'application. Cela rend super facile de trouver votre application et tous ses répertoires. C'est un énorme gain de temps (et j'ai fait un don à l'auteur).
Simulateur App
cette recherche de script shell pour le nom de l'application, Obtenir le bundle id , et dossiers ouverts contenant les fichiers Plist .
#!/bin/bash
appname=""
[ -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 "")"' -- {} \;
else
echo "No application found by that name: $appname.app"
fi
Extended version du script
Utilisation: iphone-app-folder "My App"
#!/bin/bash
appname=""
[ -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 "3[1;30m$apppath3[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 "3[1;32mUserDefaults found for $appname3[0m"
echo -e "3[1;30m$plists3[0m"
plistutil -i "$plists"
/usr/bin/open $(dirname "$plists")
elif [[ ${#plists} -gt 0 ]]; then
echo -e "3[1;32mUserDefaults found for $appname3[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 "3[31mNo UserDefaults plist found for $appname3[0m"
fi
else
echo -e "3[31mNo application found by that name: $appname.app3[0m"
fi
trouvé app My App (com.organisation.MyApp) /Users/organisation/Library/Developer/CoreSimulator/Devices/3E4C8DC3-6FF4-428F-A624-B78DBE0B8C83/data/Containers/Bundle/Application/960A5232-219D-4C46-8CA3-01E259D8DDAD/mon application.app
UserDefaults trouvé pour Mon Application
Mac App
defaults read com.bundleid.app
vous pouvez enregistrer chaque valeur que vous définissez, comme:
NSLog(@"%@",[[NSUserDefaults standardDefaults] stringForKey:@"WhateverTheKeyYouSet"]);
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 plist de NSUserDefaults dans la console de débogage Xcode. Copiez la chaîne de chemin. Ouvrez votre Finder, sélectionnez Go to Folder dans le menu Go, collez la chaîne de chemin. Double-cliquez sur le fichier plist. Vous verrez le contenu dans votre éditeur Xcode.
travaux en simulateur seulement
Merci Au Château De Niels
je garde un raccourci sur mon bureau vers le dossier du simulateur où il garde les applications, à savoir:
/Users/gary/Library/Application Support/iPhone Simulator/User/Applications
Trié par date la plus récente, puis allez simplement dans la Bibliothèque/Préférences la plus récente du dossier app et de voir le fichier dans l'éditeur plist.
Swift 3
print(UserDefaults.standard.dictionaryRepresentation())
pour MacOS apps
Aller à: / Users / {User} / Library/Containers / com.{de votre entreprise}.{votre app}/Données/Bibliothèque/Préférences et ouvrez votre application pList avec Xcode.
après avoir lu la réponse acceptée de cette question, j'ai mis en place ce script simple qui ouvre les fichiers plist utilisés par le simulateur iOS pour stocker les préférences NSUserDefaults
, et bien qu'il suppose une certaine configuration (correspond parfaitement à la mienne), il peut fonctionner comme un 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
pour OS X applications , au lieu de trouver le fichier plist par défaut de l'application, il est plus simple d'utiliser l'utilitaire en ligne de commande defaults
.
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 }
DESCRIPTION
defaults
permet aux utilisateurs de lire, écrire, et supprimez Mac OS X user par défaut d'un shell en ligne de commande. Mac Les applications 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 maintenues lorsque les applications ne sont pas en cours d'exécution (tels que la police par défaut pour les nouveaux documents, ou la position d'un panneau d'information). Une grande partie de cette information est accessible au moyen d'une application.- le panel des préférences de cation, mais il y en a qui ne le sont pas, comme la position du panel D'information. Vous pouvez accéder à ceci information 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;
...