ios - ¿Una forma sencilla de ver los NSUserDefaults guardados?
objective-c macos (19)
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, entonces use el volcado, de lo contrario, continúe con la declaración 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)
¿Hay una manera de ver lo que se ha guardado en NSUserDefaults
directamente? Me gustaría ver si mis datos se guardaron correctamente.
Simulador de aplicación
Este script de shell busca el nombre de la aplicación, obtiene la ID del paquete y abre las 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 extendido
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) / Usuarios / organización / Biblioteca / Desarrollador / CoreSimulator / Dispositivos / 3E4C8DC3-6FF4-428F-A624-B78DBE0B8C83 / data / Containers / Bundle / Application / 960A5232-219D-4C46-8CA3- 01E259D8DDAD / My App.app
UserDefaults encontrado para mi aplicación
Aplicación Mac
defaults read com.bundleid.app
A veces utilizo el siguiente fragmento de código 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(@"Your NSUserDefaults are stored in this folder: %@/Preferences", folder);
Muestra la ruta a la carpeta de preferencias.
Sus NSUserDefaults se almacenan 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 prefijo y nombre de aplicación, por ejemplo
dk.castleandersen.dreamteam.grid.plist
Espero que lo mismo sea cierto para el dispositivo real.
Busque la aplicación Mac llamada SimPholders2 . Vive en la barra de menú y enumera todos los simuladores que ha usado y luego muestra cada una de sus aplicaciones. Seleccione uno y obtendrá una nueva ventana del Finder, ya abierta al 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 fácilmente doné al autor).
Construí 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]);
}
}
Después de leer la respuesta aceptada de esta pregunta, armé este sencillo script que abre los archivos plist utilizados por el simulador de iOS para almacenar las preferencias de NSUserDefaults
, y aunque asume una cierta configuración (se ajusta perfectamente a la mía), puede funcionar como punto de partida para otros.
$ 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
Ejemplo de colocación:
$ ls -1
MyProject
MyProject Tests
MyProject.xcodeproj
MyProject.xcworkspace
Podfile
open-prefs-plist.sh
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 plist de NSUserDefaults en la consola de depuración de Xcode. Copia la cadena de ruta. Abra su Finder, seleccione Ir a la carpeta en el elemento del menú Ir, Pegue la cadena de ruta. Haga doble clic en el archivo plist. Verás los contenidos en tu editor de Xcode.
Solo funciona en simulador
Gracias @Niels Castle
En Swift 4.0
//func dictionaryRepresentation() -> [String : AnyObject]
porque dictionaryRepresentation of NSUserDefaults.standardUserDefaults () devuelve [String: AnyObject]
Lo echamos en un NSDictionary
. Luego, al rodearlo entre paréntesis ''()'' nos permitirá llamar a .allKeys o .allValues tal como lo haría en cualquier NSDictionary
print((UserDefaults.standard.dictionaryRepresentation() as NSDictionary).allKeys)
Fácil, ya que el nombre del archivo plist es <app-bundle-identifier>.plist
, puedes usar el comando find para encontrar su ruta. Pero tomará mucho tiempo si busca en toda su computadora, por lo que debe elegir un buen alcance, 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 comando open
. O si usa iTerm2 , simplemente presione el comando y haga clic en la ruta para abrirla.
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, luego vaya a la carpeta de aplicaciones / Preferencias más reciente y vea el archivo en el editor de plist.
Para Xcode 7
NSUserDefaults standardDefaults se almacenan aquí:
/Users/{USER}/Library/Developer/CoreSimulator/Devices/{UUID}/data/Containers/Data/Application/{UUID}
Los NSUserDefaults para un grupo de aplicaciones / 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 estos días todo está detrás de los UUID y es un dolor encontrarlo. Permite un fácil acceso a los directorios de la aplicación de tu simulador.
Para las aplicaciones OS X , en lugar de encontrar el archivo plist predeterminado de la aplicación, es más sencillo usar la utilidad de línea de comandos defaults
.
NOMBRE
defaults -- access the Mac OS X user defaults system
SINOPSIS
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 }
DESCRIPCIÓN
defaults
permiten a los usuarios leer, escribir y eliminar los valores predeterminados de los usuarios de Mac OS X desde un shell de línea de comandos. Las aplicaciones de Mac OS X y otros programas utilizan el sistema predeterminado para registrar las preferencias del usuario y otra información que debe mantenerse cuando las aplicaciones no se ejecutan (como la fuente predeterminada para nuevos documentos o la posición de un panel de información). Gran parte de esta información es accesible a través del panel de Preferencias de una aplicación, pero parte de ella no lo es, como la posición del panel de Información. Puede acceder a esta información pordefaults
Ejemplo:
$ defaults read com.apple.Safari
{
AutoplayPolicyWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
AutoplayQuirksWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
DefaultBrowserPromptingState2 = 4;
...
Podría registrar cada valor que establezca, como:
NSLog(@"%@",[[NSUserDefaults standardDefaults] stringForKey:@"WhateverTheKeyYouSet"]);
Puede encontrar el archivo pList para su aplicación en el simulador si va a:
/ users / su nombre de usuario / Library / Application Support / iPhone Simulator / <Sim Version> / Applications
Este directorio tiene un montón de directorios con nombre GUID. Si estás trabajando en algunas aplicaciones, habrá algunas de ellas. Así que 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ías encontrar un archivo que parezca:
<Bundle Identifier>.foo.pList
Abra esto en el editor pList y explore los valores persistentes hasta el 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]);
Puede verificar los valores para cada clave en la matriz, devueltos por
[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]
Swift 3
print(UserDefaults.standard.dictionaryRepresentation())
Utilice el código de abajo.
NSLog(@"NSUserDefault: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
Para aplicaciones MacOS
Vaya a: /Users/{User}/Library/Containers/com.{your company}. {Su aplicación} / Data / Library / Preferences y abra la lista de su aplicación con Xcode.