¿Manera fácil de ver NSUserDefaults guardados?

¿Hay alguna manera de ver lo que se ha guardado en NSUserDefaults directamente? Me gustaría ver si mis datos se guardaron correctamente.

Puede encontrar el archivo pList para su aplicación en el simulador si va a:

/ users / your user name / Library / Application Support / iPhone Simulator / / Aplicaciones

Este directorio tiene un grupo de directorios nombrados GUID. Si está trabajando en algunas aplicaciones, habrá algunas. Entonces necesitas encontrar tu aplicación binaria:

 find . -name foo.app ./1BAB4C83-8E7E-4671-AC36-6043F8A9BFA7/foo.app 

Luego vaya al directorio Biblioteca / Preferencias en el directorio GUID. Asi que:

 cd 1BAB4C83-8E7E-4671-AC35-6043F8A9BFA7/Library/Preferences 

Debería encontrar un archivo que se parece a:

 .foo.pList 

Abra esto en el editor pList y explore los valores persistentes al contenido de su corazón.

Puede imprimir todos los NSUserDefaults actuales al registro:

Solo llaves:

 NSLog(@"%@", [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]); 

Claves y valores:

 NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]); 

En Swift podemos usar lo siguiente:

Swift 3.xy 4.x

Para obtener todas las claves y valores:

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

Para recuperar la representación completa del diccionario de los valores predeterminados del usuario:

 print(Array(UserDefaults.standard.dictionaryRepresentation())) 

Para recuperar las claves:

 // Using dump since the keys are an array of strings. dump(Array(UserDefaults.standard.dictionaryRepresentation().keys)) 

Para recuperar los valores:

También podemos usar dump aquí, pero eso devolverá la jerarquía de herencia completa de cada elemento en la matriz de valores. Si se requiere más información sobre los objetos, utilice dump, de lo contrario, continúe con la statement de impresión normal.

 // dump(Array(UserDefaults.standard.dictionaryRepresentation().values)) print(Array(UserDefaults.standard.dictionaryRepresentation().values)) 

Swift 2.x

Para recuperar la representación completa del diccionario de los valores predeterminados del usuario:

 print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation()) 

Para recuperar las claves:

 print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array) 

Para recuperar los valores:

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

Puede verificar los valores de cada clave en la matriz, devuelta por

 [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] 

A veces uso el siguiente fragmento para imprimir la ubicación de mi archivo NSUserDefaults cuando se ejecuta en el simulador

 NSArray * path = NSSearchPathForDirectoriesInDomains (
    NSLibraryDirectory, NSUserDomainMask, YES);
 NSString * folder = [path objectAtIndex: 0];
 NSLog (@ "Sus NSUserDefaults están almacenados en esta carpeta:% @ / Preferences", carpeta);

Da paso a la carpeta de preferencias

Sus NSUserDefaults están almacenados en esta carpeta: / Users / castle / Library / Application Support / iPhone Simulator / User / Applications / BC5056A0-F46B-4AF1-A6DC-3A7DAB984960 / Library / Preferences

Su archivo NSUserDefaults se encuentra en la carpeta de preferencias y se nombra de acuerdo con su nombre de prefijo y aplicación, por ejemplo

 dk.castleandersen.dreamteam.grid.plist 

Espero que lo mismo sea cierto para el dispositivo real.

Use el código a continuación.

 NSLog(@"NSUserDefault: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]); 

En Swift 4.0

 //func dictionaryRepresentation() -> [String : AnyObject] 

porque dictionaryRepresentation de NSUserDefaults.standardUserDefaults () devuelve [String: AnyObject]

Lo convertimos en un NSDictionary . Luego al rodearlo entre paréntesis ‘()’ nos permitirá llamar a .TodasTeclas o .todos los valores igual que lo haría con cualquier NSDiccionario

  print((UserDefaults.standard.dictionaryRepresentation() as NSDictionary).allKeys) 

Fácil, ya que el nombre del archivo plist es .plist , puede usar el comando find para encontrar su ruta. Pero llevará mucho tiempo buscar en toda la computadora, por lo que debe elegir un buen scope, como ~/Library/Developer/CoreSimulator para Xcode 6.

ejemplo:

find ~/Library/Developer/CoreSimulator -type f -name com.awesome.app.plist

la salida será algo como esto …

/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

Y desde allí puedes usar open comando open . O si usa iTerm2 , simplemente haga clic en la ruta para abrirlo.

Para Xcode 7

Los valores predeterminados de NSUserDefaults se almacenan aquí:

/Users/{USER}/Library/Developer/CoreSimulator/Devices/{UUID}/data/Containers/Data/Application/{UUID}

NSUserDefaults para una suite / grupo de aplicaciones se almacenan aquí:

/Users/{USER}/Library/Developer/CoreSimulator/Devices/{UUID}/data/Containers/Shared/AppGroup/{UUID}/Library/Preferences/{GROUP_NAME}.plist

Recomendaría usar https://github.com/scinfu/NCSimulatorPlugin porque en la actualidad todo está detrás de los UUID y es difícil de encontrar. Permite un fácil acceso a los directorios de la aplicación de simulador.

Creé este método basado en la sugerencia de Morion para una mejor presentación. Úselo llamando a [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]); } } 

Busque la aplicación Mac llamada SimPholders2 . Vive en la barra de menú y enumera todos los simuladores que has usado y luego muestra cada una de tus aplicaciones. Seleccione uno y obtendrá una nueva ventana del Finder, ya abierta en el directorio de la aplicación. Esto hace que sea muy fácil encontrar su aplicación y todos sus directorios. Es un gran ahorro de tiempo (y doné fácilmente al autor).

Podrías NSLog cada valor que establezcas, como:

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

En Swift 2.2

 let path = NSSearchPathForDirectoriesInDomains(.LibraryDirectory, .UserDomainMask, true) let folder = path[0] NSLog("Your NSUserDefaults are stored in this folder: \(folder)/Preferences") 

imprimirá la ubicación de la carpeta de archivos de NSUserDefaults en la consola de depuración de Xcode. Copia la cadena de ruta. Abra su buscador, seleccione Ir a la carpeta en el elemento de menú Ir, pegue la cadena de ruta. Haga doble clic en el archivo plist. Verá los contenidos en su editor de Xcode.

Solo funciona en Simulator

Gracias @Niels Castle

Guardo un acceso directo en mi escritorio a la carpeta del simulador donde guarda las aplicaciones, es decir:

 /Users/gary/Library/Application Support/iPhone Simulator/User/Applications 

Ordenado por la fecha más reciente, simplemente ingrese a la carpeta de aplicaciones más reciente Biblioteca / Preferencias y vea el archivo en el editor plist.

Swift 3

 print(UserDefaults.standard.dictionaryRepresentation()) 

Aplicación Simulador

Este script de shell busca el nombre de la aplicación, obtiene el ID del paquete y abre carpetas que contienen los archivos 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 

Versión de script extendida

Uso: 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 

Aplicación encontrada Mi aplicación (com.organisation.MyApp) / Users / organization / Library / Developer / CoreSimulator / Devices / 3E4C8DC3-6FF4-428F-A624-B78DBE0B8C83 / data / Containers / Bundle / Application / 960A5232-219D-4C46-8CA3- 01E259D8DDAD / Mi aplicación.aplicación

UserDefaults encontrados para mi aplicación

Aplicación Mac

 defaults read com.bundleid.app 

Para aplicaciones MacOS
Vaya a: /Users/{User}/Library/Containers/com.{your company}. {Su aplicación} / Data / Library / Preferences y abra la pList de su aplicación con Xcode.

Después de leer la respuesta aceptada de esta pregunta, armé este sencillo script que abre los archivos plist utilizados por el simulador iOS para almacenar las preferencias de NSUserDefaults , y si bien asume una cierta configuración (encaja perfectamente), puede funcionar como un punto de partida para otros.

 $ cat open-prefs-plist.sh #!/bin/sh # The project name based on the workspace path, eg "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, eg "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 

Colocación de ejemplo:

 $ ls -1 MyProject MyProject Tests MyProject.xcodeproj MyProject.xcworkspace Podfile open-prefs-plist.sh