Existe-t-il un moyen de voir ce qui a été enregistré dans NSUserDefaults
directement? Je voudrais voir si mes données sauvegardées correctement.
Vous pouvez trouver le fichier pList de votre application dans le simulateur si vous allez à:
/ users / votre nom d'utilisateur / Bibliothèque/Application Support/iPhone Simulator/<Version du Sim>/Applications
Ce répertoire contient un groupe de GUID nommés. Si vous travaillez sur quelques applications, il y en aura quelques-unes. Vous devez donc trouver le binaire de votre application:
find . -name foo.app
./1BAB4C83-8E7E-4671-AC36-6043F8A9BFA7/foo.app
Accédez ensuite au 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 ceci dans l'éditeur de pList et parcourez les valeurs persistantes jusqu'au contenu de votre coeur.
Vous pouvez imprimer tous les NSUserDefaults actuels dans le journal:
Juste des 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 dump ici, mais cela renverra la hiérarchie complète de l'héritage de chaque élément du tableau values. Si davantage d'informations sur les objets sont requises, utilisez dump, sinon poursuivez 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)./Préférences ", dossier);
Il donne le chemin vers le dossier de préférences
Vos NSUserDefaults sont stockés dans ce dossier:/Utilisateurs/château/Bibliothèque/Support applicatif/iPhone Simulator/Utilisateur/Applications/BC5056A0-F46B-4AF1-A6DC-3A7DAB984960/Bibliothèque/Préférences
Votre fichier NSUserDefaults se trouve dans le dossier des préférences et est nommé en fonction de votre préfixe et nom de l'application, par exemple.
dk.castleandersen.dreamteam.grid.plist
Je m'attends à ce que la même chose soit vraie pour l'appareil réel.
Dans Swift 4.0
//func dictionaryRepresentation() -> [String : AnyObject]
parce que dictionaryRepresentation of NSUserDefaults.standardUserDefaults () renvoie [String: AnyObject]
Nous en avons jeté une NSDictionary
. Ensuite, en l'entourant entre 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]);
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 recherchez dans tout votre ordinateur, vous devez donc choisir une bonne étendue, 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 commande open
. Ou si vous utilisez iTerm2 , il suffit de cliquer sur le chemin pour l’ouvrir.
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 ces jours-ci, tout est derrière les UUID et est difficile à trouver. Il permet un accès facile aux répertoires de vos applications 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]);
}
}
Recherchez l'application Mac appelée SimPholders2. Il habite dans la barre de menus, 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 sur le répertoire de l'application. Cela facilite grandement la recherche de votre application et de tous ses répertoires. C'est un énorme gain de temps} (et j'ai volontiers fait un don à l'auteur).
Pour les applications MacOS
Allez à: /Users/{User}/Library/Containers/com.{your company}. {Votre application}/Données/Bibliothèque/Préférences et ouvrez la liste de programmes de votre application avec Xcode.
Swift 3
print(UserDefaults.standard.dictionaryRepresentation())
Je garde un raccourci sur mon bureau vers le dossier du simulateur où sont conservées les applications, à savoir:
/Users/gary/Library/Application Support/iPhone Simulator/User/Applications
Trié par date la plus récente, puis allez simplement dans le dossier de l'application le plus récent, Bibliothèque/Préférences, et affichez le fichier dans l'éditeur de pliste.
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. Ouvrez votre Finder, sélectionnez l’option de menu Aller au dossier dans Go, Coller la chaîne du chemin. Double-cliquez sur le fichier plist. Vous verrez le contenu dans votre éditeur Xcode.
Ne fonctionne que dans le simulateur
Merci @Niels Castle
Ce script de shell recherche le nom [ de l'application, obtient les dossiers bundle id et open 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
Utilisation: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 Mon application (com.organisation.MyApp) /Utilisateurs/organisation/Bibliothèque/Développeur/CoreSimulator/Devices/3E4C8DC3-6FF4-428F-A624-B78DBE0B8C83/data/Containers/Bundle/Application/960A5232-219D-4C46-8CA3-01E259D8DDAD/My App.app
UserDefaults trouvé pour mon application
defaults read com.bundleid.app
Vous pouvez NSLog chaque valeur que vous définissez, comme:
NSLog(@"%@",[[NSUserDefaults standardDefaults] stringForKey:@"WhateverTheKeyYouSet"]);
Pour les applications OS X , au lieu de rechercher le fichier de liste de plist par défaut de l'application, il est plus simple d'utiliser l'utilitaire de ligne de commande defaults
.
PR&EACUTE;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 paramètres utilisateur par défaut de Mac OS X à partir 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 autres informations qui doivent être conservées lorsque les applications ne sont pas en cours d'exécution (telles que la police par défaut pour les nouveaux documents ou la position d'un panneau d'informations). Une grande partie de cette information est accessible via une application. dans le panneau Préférences de cation, mais certaines parties ne le sont pas, comme la position du panneau Info. Vous pouvez accéder à cette 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;
...
Vous pouvez l'utiliser pour obtenir le chemin complet sur les préférences de l'utilisateur, le cache et de nombreuses autres données.
print(NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true))
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 préférences NSUserDefaults
. 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