¿Dónde almacena el iPhone Simulator sus datos?

234

Tengo una base de datos SQLite que estoy usando para almacenar datos de la aplicación, y podría echarle un vistazo para resolver un problema que tengo, pero ¿dónde suele almacenar el iPhone Simulator sus datos?

Codebeef
fuente

Respuestas:

291

La respuesta aceptada es correcta para el SDK 3.2: el SDK 4 reemplaza la carpeta / User en esa ruta con un número para cada una de las versiones heredadas de iPhone OS / iOS que puede simular, por lo que la ruta se convierte en:

~ / Library / Application Support / iPhone Simulator / [Versión del sistema operativo] / Aplicaciones / [appGUID] /

Si tiene instalado el SDK anterior, su simulador 3.1.x continuará guardando sus datos en:

~ / Library / Application Support / iPhone Simulator / User / Applications / [appGUID] /

Para Xcode6 y iOS8

~ / Library / Developer / CoreSimulator / Devices / [DeviceID] / data / Containers / Data / Application / [AppID] /

dsmudger
fuente
66
cd ~/Library/Application\ Support/iPhone\ Simulator/
Robert
174
En lugar de buscar en el buscador cuál GUID es suyo, tenga en cuenta la respuesta de pisca46 a continuación: simplemente escriba po NSHomeDirectory()el depurador. Cortar y pegar en Ir> Ir a la carpeta (Cmd-Shift-G).
mackworth
Me preocupa un poco que cuando inicie el simulador diga 8.2, pero cuando busco en esta carpeta, el único número de versión que veo es 7.1. Eso me preocupa de estar buscando en el lugar equivocado.
bugloaf
1
@bugloaf Vea esta pregunta o respuesta a continuación
Raviprakash
44
Es difícil enfatizar cuánto más simple, más conveniente, menos propenso a errores y menos frustrante es esta respuesta (como se recomienda en el comentario anterior de mackworth). Simplemente puede agregar una línea a NSLogesto en la AppDelegatesuya didFinishLaunchingWithOptions:, o puede hacerlo po NSHomeDirectory()desde el depurador. En cualquier caso, copie la cadena y ábrala en el buscador con Cmd+Shift+G. Esto funciona mejor porque está preguntando con un comando estándar en lugar de necesitar saber algo que cambia.
Benjohn el
93

Hay otra forma (¿más rápida?) De encontrar dónde están los datos de su aplicación sin Terminal:

  1. Inicie la aplicación en el simulador.
  2. Monitor de actividad abierta
  3. Encuentra el nombre de tu aplicación en la pestaña CPU
  4. Haga doble clic en él y abra "Abrir archivos y puertos"

ingrese la descripción de la imagen aquí

Sergey Lost
fuente
1
NSString *uniqueIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString];le da el identificador del dispositivo
oabarca
@oabarca el identificador que obtiene no tiene nada que ver con la ID de dispositivo o la carpeta de aplicación del simulador; Estoy usando Xcode 11.2.1 y iOS 13.2.2
DawnSong
78

Lo encontré:

~/Library/Application Support/iPhone Simulator/User/
Codebeef
fuente
16
Cómo buscar: En Finder, presione CMD + SHIFT + G
rohan-patel el
Vea la respuesta actualizada a continuación por dsmudger, es la respuesta correcta en este momento.
Tom Susel
74

iOS 8 ~ / Library / Developer / CoreSimulator / Devices / [Device ID] / data / Applications / [appGUID] / Documents /

Wagh
fuente
1
¿Alguna forma de obtener la identificación del dispositivo?
msmq
2
@msmq tryxcrun instruments -s
Shazron
11
@msmq Encienda su simulador actual, Hardware -> Dispositivo -> Administrar dispositivos ... -> Seleccione su simulador en la lista "SIMULADORES". Luego a la derecha está "Identificador". Esta es la identificación del dispositivo.
RichX
¿Cómo encontrar el [appGUID] aquí?
Yang You
66

En Lion the Users/[username]/Libraryestá oculto.

Para ver simplemente en Finder, haga clic en el menú 'Ir' en la parte superior de la pantalla y mantenga presionada la tecla 'alt' para mostrar 'Biblioteca'.

Haga clic en 'Biblioteca' y podrá ver su carpeta de biblioteca previamente oculta.

Aconsejado previamente:

Utilizar

chflags nohidden /users/[username]/library

en un terminal para mostrar la carpeta.

Rafael Moreira
fuente
1
luego, puede encontrarlo en: ~ / Library / Application Support / iPhone Simulator / [OS version] / Applications / [appGUID] /
Rafael Moreira
Esa es una sugerencia interesante para los usuarios normales, pero me parece que los desarrolladores de iOS / OS X necesitan acceder a la biblioteca de forma bastante regular y, por lo tanto, no querrían que se oculte nunca más. (Por otra parte, supongo que muchos desarrolladores usan Terminal en lugar de Finder?)
ArtOfWarfare
58

La forma más fácil de todas.

  1. Atrapa un punto de interrupción en alguna parte.

  2. Entrar po NSHomeDirectory()en la ventana de la consola

Resultado:

(lldb) po NSHomeDirectory () / Users / usernam / Library / Developer / CoreSimulator / Devices / 4734F8C7-B90F-4566-8E89-5060505E387F / data / Containers / Data / Application / 395818BB-6D0F-499F-AAFE-068A783D9753

Lal Krishna
fuente
1
Si supiera esto antes. Esta debería haber sido la respuesta correcta
Ivan Cantarino
Creo que todas las otras respuestas también son correctas. Pero esto parece ser fácil para mí: -]
Lal Krishna
37

Si el simulador se está ejecutando, puede obtener la ruta al contenedor de cualquier aplicación:

xcrun simctl get_app_container booted <app bundle identifier>

Salida de ejemplo:

$ xcrun simctl get_app_container booted com.example.app
/Users/jappleseed/Library/Developer/CoreSimulator/Devices/7FB6CB8F-63CB-4F27-BDAB-884814DA6FE0/data/Containers/Bundle/Application/466AE987-76BC-47CF-A207-266E65E7DE0A/example.app

"arrancado" se puede sustituir a la mayoría simctl comandos en cualquier lugar donde se espere un UDID de dispositivo.

Puede ver la lista de dispositivos con xcrun simctl listy obtener ayuda sobre comandos específicos con xcrun simctl help.

Actualizar : por solicitud popular en Xcode 8.3 ahora puede especificar el tipo de contenedor que desea agregando "aplicación", "datos", "grupos" o un identificador de grupo de aplicaciones.

Para obtener el contenedor de datos:

$ xcrun simctl get_app_container booted com.example.app data
obispo ruso
fuente
Excelente uno. No es necesario ejecutar el comando para obtener device_id y appId. Un paso para obtener todo
iamhite
Este debe ser aceptado, porque es la forma más "estable" de hacer tales cosas.
Olha
35

Con Xcode 5 puede usar el siguiente código:

#import <Foundation/NSFileManager.h>

y:

NSString *homeDir = NSHomeDirectory();
NSLog(@"%@",homeDir);

El resultado puede verse así:

"/Users/<your user name>/Library/Application Support/iPhone Simulator/7.1/Applications/hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh"

¿Dónde hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhhhay alguna cadena hexadecimal que identifica su aplicación iOS?

Pisca46
fuente
16
Esto también funciona en el depurador: po NSHomeDirectory()
mackworth
30

Parece que Xcode 6.0 ha movido esta ubicación una vez más, al menos para los simuladores de iOS 8.

~ / Library / Developer / CoreSimulator / Devices / [DeviceID] / data / Containers / Data / Application / [AppID]

un lobo
fuente
44
en ~ / Library / Developer / CoreSimulator / Devices / [DeviceID] / también hay un archivo .plist llamado "device.plist" si mira dentro puede encontrar el nombre del dispositivo como iphone-6 o iphone-5s. deviceID es muy confuso, así que creo que deberías mirar dentro del archivo .plist.
EFE
1
¿Cómo obtener el AppID?
Nombre para mostrar
1
Hice trampa para encontrar la identificación de la aplicación, usando 'ls -l' y descubriendo qué archivos de la aplicación se habían creado más recientemente. Podría funcionar para otros también.
Maya Webster
1
O en el buscador, ordena por "fecha de creación" para que la aplicación esté en la parte superior de la lista.
Ammar Mujeeb
30

Una de las formas más fáciles de encontrar dónde está la aplicación dentro del simulador. Usuario "NSTemporaryDirectory ()"

Pasos-

  1. Aplique el punto de interrupción en cualquier lugar dentro de la aplicación y ejecútelo.
  2. Cuando la aplicación se detiene en el punto de interrupción, escriba el siguiente comando en la consola Xcode.

    po NSTemporaryDirectory ()

Vea la imagen de abajo para una visión adecuadaingrese la descripción de la imagen aquí

Ahora tiene la ruta exacta hasta la carpeta temporal. Puede regresar y ver todas las carpetas relacionadas con la aplicación.

Espero que esto también ayude. Happy Coding :)

Shubhendu
fuente
1
Consejo genial, pero ¿por qué no po NSHomeDirectory()?
Código Roadie
9

Donde Xcode almacena simuladores en 2019+ Catalina, Xcode 11.0

Tiempos de ejecución

$ open /Library/Developer/CoreSimulator/Profiles/Runtimes

Por ejemplo: iOS 13.0, watchOS 6.0Éstos toman la mayoría del espacio, con diferencia. Cada uno puede tener hasta ~ 5 GB

Dispositivos

$ open ~/Library/Developer/CoreSimulator/Devices

Por ejemplo: iPhone Xr, iPhone 11 Pro Max. Estos son típicamente <15 mb cada uno.

Explicación

Los simuladores se dividen entre tiempos de ejecución y dispositivos. Si tu corres$ xcrun simctl list , puede ver una descripción general, pero si desea encontrar la ubicación física de estos simuladores, busque en los directorios que he mostrado.

Es totalmente seguro eliminar tiempos de ejecución que no admite. Puede reinstalarlos más tarde si lo desea.

joshuakcockrell
fuente
8

Simplemente haz esto:

NSString *docDirPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
NSLog(@"%@", docDirPath);

Y obtendrás algo así:

/ Users / admin / Library / Developer / CoreSimulator / Devices / 58B5B431-D2BB-46F1-AFF3-DFC789D189E8 / data / Containers / Data / Application / 6F3B985F-351E-468F-9CFD-BCBE217A25FB / Documentos

Vaya allí y verá la carpeta de documentos de su aplicación, independientemente de la versión de XCode. (Use el comando "Ir a la carpeta ..." en el Finder y especifique una ruta "~ / biblioteca").

Versión rápida para ruta de cadena:

let docDirPath =
NSSearchPathForDirectoriesInDomains(.documentDirectory,
                                    .userDomainMask, true).first
print(docDirPath)

y URL de la carpeta:

let docDirUrl =
    FileManager.default.urls(for: .documentDirectory,
                             in: .userDomainMask).first
print(docDirUrl)
LembergSun
fuente
Estaba a punto de publicar casi la misma respuesta. Este método tiene la ventaja de proporcionar siempre la ruta correcta, en cualquier versión del simulador de iOS. Por cierto, también puede copiar el valor de la variable url en el depurador, si no desea iniciar sesión;)
Moose
7

En iOS 5:

/ Usuarios / [Nombre de usuario] / Biblioteca / Soporte de aplicaciones / iPhone Simulator / 5.0 / Aplicaciones / [AppGUID] /

Karthi
fuente
6

Para Xcode 4.6 se almacena en la siguiente ruta ...

/ Usuarios / [usuario actual] / Biblioteca / Soporte de aplicaciones / iPhone Simulator / 6.1 / Aplicaciones /

Para saberlo programáticamente use el siguiente código

  NSLog(@"path:%@",[[NSBundle mainBundle]bundlePath]);
Durai Amuthan.H
fuente
2
Swift :print("path: \(NSBundle.mainBundle().bundlePath)")
SwiftArchitect
4

Para iOS 8

Para ubicar la carpeta Documentos , puede escribir un archivo en la carpeta Documentos:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fileName = [documentsDirectory stringByAppendingPathComponent:@"Words.txt"];
NSString *content = @"Apple";
[content writeToFile:fileName atomically:NO encoding:NSStringEncodingConversionAllowLossy error:nil];

digamos, en didFinishLaunchingWithOptions.

Luego puede abrir una Terminal y encontrar la carpeta:

$ find ~/Library -name Words.txt
Oh ho
fuente
2

Para macOS Catalina, encontré mi db en:

~/Library/Developer/CoreSimulator/Devices/{deviceId}/data/Containers/Data/Application/{applicationId}/Documents/my.db

Para obtener el applicationId, acabo de ordenar las carpetas por fecha de modificación, aunque estoy seguro de que hay una mejor manera de hacerlo.

stevenspiel
fuente
1

Para usuarios nativos de reacción que no usan Xcode con frecuencia, solo puede usar find. Abra una terminal y busque con el nombre de la base de datos.

$ find ~/Library/Developer -name 'myname.db'

Si no sabe el nombre exacto, puede usar comodines:

$ find ~/Library/Developer -name 'myname.*'

perro pastor
fuente
0

Puedes intentar usar el siguiente código

NSString *fileName = @"Demo.pdf";
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *pdfFileName = [documentsDirectory stringByAppendingPathComponent:fileName];
    NSLog(@"File path%@",pdfFileName);
Raees Madathil Valapuram
fuente
0

Para abrir los dictorios donde está su aplicación que construye en xCode en los simuladores, haga lo siguiente:

  1. abrir un buscador Windor (icono de cara sonriente)
  2. luego haga clic en IR -> Ir a la carpeta
  3. tipo: ~ / Library / Application Support / iPhone Simulator
  4. Los Directorios son la versión iOS de los diferentes Simuladores.
  5. Los subdirectorios son las aplicaciones instaladas en el simulador
  6. La carpeta Documentos es donde el usuario generó contenido que realiza una copia de seguridad en iCloud
Mike Zriel
fuente
0

No estoy afiliado a este programa, pero si está buscando abrir algo de esto en el buscador SimPholders lo hace increíblemente fácil.

Jason
fuente