web-dev-qa-db-fra.com

Un moyen facile de voir les NSUserDefaults sauvegardés?

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. 

206
Ethan

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.

154
RedBlueThing

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]);
344
marshn

Dans Swift, nous pouvons utiliser les éléments suivants: -

Swift 3.x & 4.x

Pour obtenir toutes les clés et valeurs:

for (key, value) in UserDefaults.standard.dictionaryRepresentation() {
    print("\(key) = \(value) \n")
}

Pour récupérer 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 récupérer les valeurs:

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))

Swift 2.x

Pour récupérer 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 récupérer les valeurs:

print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().values.array)
71
footyapps27

Vous pouvez vérifier les valeurs de chaque clé du tableau, renvoyées par

[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]
38
Morion

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.

21
Niels Castle

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)
6
RyanTCB

Utilisez le code ci-dessous.

NSLog(@"NSUserDefault: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
6
Mr.Javed Multani

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.

4
Hlung

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.

3
user1270061

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]);
    }
}
2

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).

2
Jeff

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.

1
Uwe

Swift 3

print(UserDefaults.standard.dictionaryRepresentation())
1
Ego Slayer

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.

1
progrmr

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

1
charles.cc.hsu

App simulateur

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

Version de script étendue

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

Mac App

defaults read com.bundleid.app
1
Atika

Vous pouvez NSLog chaque valeur que vous définissez, comme:

NSLog(@"%@",[[NSUserDefaults standardDefaults] stringForKey:@"WhateverTheKeyYouSet"]);
1
Tom Irving

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 avec defaults

Exemple:

$ defaults read com.Apple.Safari
{
    AutoplayPolicyWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
    AutoplayQuirksWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
    DefaultBrowserPromptingState2 = 4;
    ...
0
weevilgenius

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))

0
Ahmed M. Hassan

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
0
Ernesto MB