ios objective-c macos nsuserdefaults

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

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.