Ubicación del soporte de la aplicación Xcode 6 iPhone Simulator
137
En Xcode 6, tengo una aplicación en la que estoy usando Core Data, pero no hay una carpeta en el Soporte de aplicaciones para iOS 8 iPhone Simulator. ¿Dónde se almacenan mis archivos y la base de datos Core Data sqlite?
Intenta esto . Hay una aplicación que abre directamente el directorio Documentos de la última ejecución de la aplicación.
NSRover
Agregué una respuesta (en la parte inferior de las otras respuestas) que muestra cómo obtener programáticamente la ruta donde residen los archivos de Core Data.
Esto es correcto en general, pero parece que hay más cambios en la carpeta interna. Este es el camino que me funciona en Xcode Beta 3:~/Library/Developer/CoreSimulator/Devices/B2C6629C-998D-4E84-9ADB-06CAF5BA4B89/data/Containers/Data/Application/62593001-FADA-4647-AA80-FE9973956C05/Documents/
harryhorn
1
¿Hay alguna manera de entender que los números o la fuerza bruta son la única oportunidad de obtener datos?
vir us
89
NSLog (@ "dir de aplicación:% @", [[[NSFileManager defaultManager] URLsForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask] lastObject]); - imprimirá la ruta completa a la carpeta de datos
vir us
2
Necesitaba un acceso directo persistente al directorio de documentos de mi aplicación, para una depuración rápida. Después de la aplicación didFinishLaunchingWithOptions. #if DEBUG NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"]; NSString *aliasPath = [NSString stringWithFormat:@"XCodePaths/%@", appName]; remove([aliasPath UTF8String]); [[NSFileManager defaultManager]createSymbolicLinkAtPath:aliasPath withDestinationPath:DOCS_DIR error:nil]; #endif Ahora tengo un simlink que funciona, a pesar de que iOS8 + XCode6 cambia el GUID de datos de mi aplicación cada vez que construyo.
lubina
32
El xcrun simctl listcomando se puede usar para ver la correspondencia entre los nombres del simulador y los UDID del dispositivo. O más específicamente el xcrun simctl list devicescomando.
ThomasW
36
Te sugiero que uses SimPholders para encontrar tus archivos de Simulator. Es un elemento de la barra de menú que rastrea las aplicaciones de su simulador y le permite ir directamente a sus carpetas y contenido. Es impresionante.
También tenía problemas con SimPholders2 en Yosemite, así que comencé un script de línea de comandos para ayudarlo a encontrar y abrir una ventana del Finder para el simulador y la aplicación que desea. Revisa las carpetas y las listas de metadatos para enumerar todas las carpetas y aplicaciones del simulador. Si está interesado, échale un vistazo aquí
Rodrigo Lima
SimPholders2 funciona en Yosemite pero es un poco lento; una vez que hagas clic en el ícono en la barra de estado, solo espera unos segundos y debería aparecer.
Jason
¡Vaya, es increíble y los últimos trabajos con Yosemite + Xcode 6.3!
TruMan1
21
La aplicación SimulatorManager me pareció muy útil. Te lleva directamente a la carpeta de la aplicación de simuladores instalados. He intentado con simuladores 7.1, 8.0 y 8.1.
SimulatorManager reside como un icono en la bandeja del sistema y ofrece una opción para "Iniciar al iniciar sesión".
Nota : Esto funciona solo con Xcode 6 (6.1.1 en mi caso) y superior.
Amar, ¿cómo instalas el SimulatorManager? Pensé que era un complemento para Xcode pero es un proyecto Xcode
malena
1
en la barra superior, seleccione: Producto -> Archivo -> y luego exporte el archivo como una aplicación Mac sin volver a firmar (la última opción) obtendrá un archivo .app que puede colocar en la carpeta de la aplicación como una aplicación normal. ..
Heckscheibe
11
Para saber dónde está almacenado su archivo .sqlite en su AppDelegate.m agregue el siguiente código
Luché con esto por algún tiempo. Se convirtió en un gran dolor simplemente llegar a mi sqlite db local. Escribí este script y lo convertí en un fragmento de código dentro de XCode. Lo coloco dentro de mi appDidFinishLaunching dentro de mi appDelegate.
//xcode 6 moves the documents dir every time. haven't found out why yet. #if DEBUG NSLog(@"caching documents dir for xcode 6. %@",[NSBundle mainBundle]);NSString*toFile =@"XCodePaths/lastBuild.txt";NSError*err =nil;[DOCS_DIR writeToFile:toFile atomically:YES encoding:NSUTF8StringEncoding error:&err];if(err)NSLog(@"%@",[err localizedDescription]);NSString*appName =[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"];NSString*aliasPath =[NSString stringWithFormat:@"XCodePaths/%@", appName];remove([aliasPath UTF8String]);[[NSFileManager defaultManager] createSymbolicLinkAtPath:aliasPath withDestinationPath:DOCS_DIR error:nil];#endif
Esto crea un enlace sim en la raíz de su disco. (Es posible que deba crear esta carpeta usted mismo la primera vez, y modificarla, o puede cambiar la ubicación a otro lugar) Luego instalé el complemento xcodeway https://github.com/onmyway133/XcodeWay
Lo modifiqué un poco para que me permita simplemente presionar cmd + d y se abrirá una bobinadora de búsqueda en el directorio de Documentos persistentes de mi aplicación actual. De esta manera, no importa cuántas veces XCode cambie su ruta, solo cambia en la ejecución y actualiza su enlace simbólico inmediatamente en cada ejecución.
El simulador coloca el archivo en ~ / Library / Developer / CoreSimulator / Devices / ... pero la ruta después de / Devices es diferente para todos.
Usa este práctico método. Devuelve la ruta del directorio temporal para el usuario actual y no toma argumentos.
NSString*NSTemporaryDirectory(void);
Entonces, en mi clase ViewController, generalmente pongo esta línea en mi viewDidLoad solo como referencia cuando necesito tomar mi archivo almacenado CoreData. Espero que esto ayude.
NSLog(@"FILE PATH :%@",NSTemporaryDirectory());
(Nota: para ir a la ruta, desde el menú del buscador, haga clic en Ir y escriba ~ / Library para abrir el directorio oculto; luego, en la ventana del Finder, puede hacer clic en la ruta que se muestra en la consola).
Esta ubicación, una vez más, ha cambiado, si usa Swift, use esto para averiguar dónde está la carpeta (esto se copia del archivo AppDelegate.swift que Apple crea para usted, así que si no funciona en su máquina, busque ese archivo para la sintaxis correcta, esto funciona en el mío usando Xcode 6.1 y simulador iOS 8):
let urls =NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains:.UserDomainMask)
println("Possible sqlite file: \(urls)")
En Swift 4 o Swift 5 puedes usar NSHomeDirectory().
La forma más fácil en Xcode 10 (o Xcode 11) es pausar su aplicación (como cuando llega a un punto de interrupción) y ejecutar esta línea en la consola del depurador:
po NSHomeDirectory()
po significa objeto de impresión e imprime la mayoría de las cosas
Con Swift 4, puede usar el siguiente código para obtener el directorio de inicio de su aplicación. El directorio de documentos de su aplicación está allí.
print(NSHomeDirectory())
Creo que ya sabe que el directorio de inicio de su aplicación es modificable, por lo que si no desea agregar código adicional a su base de código, SimPholder es una buena herramienta para usted.
Y aún más, puede preguntarse si existe una herramienta que pueda ayudarlo a ahorrar tiempo al cerrar y volver a abrir la misma base de datos SQLite cada vez que se cambia el directorio de inicio de su aplicación. Y la respuesta es sí, una herramienta que conozco es SQLiteFlow . De su documento, dice que:
Manejar el nombre del archivo de la base de datos o los cambios de directorio. Esto hace que SQLiteFlow pueda funcionar con su base de datos SQLite en el simulador de iOS.
Aquí está el sh para el último simulador y aplicación usados. Simplemente ejecute sh y copie el texto impreso y pegue y ejecute el comando para mostrar en el buscador.
#!/bin/zsh
lastUsedSimulatorAndApplication=`ls -td -- ~/Library/Developer/CoreSimulator/Devices/*/data/Containers/Data/Application/*/ | head -n1`
echo $lastUsedSimulatorAndApplication
Respuestas:
El directorio del simulador se ha movido con Xcode 6 beta a ...
Navegar por el directorio de la carpeta Documentos de su aplicación es un poco más arduo, por ejemplo,
fuente
~/Library/Developer/CoreSimulator/Devices/B2C6629C-998D-4E84-9ADB-06CAF5BA4B89/data/Containers/Data/Application/62593001-FADA-4647-AA80-FE9973956C05/Documents/
#if DEBUG NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"]; NSString *aliasPath = [NSString stringWithFormat:@"XCodePaths/%@", appName]; remove([aliasPath UTF8String]); [[NSFileManager defaultManager]createSymbolicLinkAtPath:aliasPath withDestinationPath:DOCS_DIR error:nil]; #endif
Ahora tengo un simlink que funciona, a pesar de que iOS8 + XCode6 cambia el GUID de datos de mi aplicación cada vez que construyo.xcrun simctl list
comando se puede usar para ver la correspondencia entre los nombres del simulador y los UDID del dispositivo. O más específicamente elxcrun simctl list devices
comando.Te sugiero que uses SimPholders para encontrar tus archivos de Simulator. Es un elemento de la barra de menú que rastrea las aplicaciones de su simulador y le permite ir directamente a sus carpetas y contenido. Es impresionante.
fuente
La aplicación SimulatorManager me pareció muy útil. Te lleva directamente a la carpeta de la aplicación de simuladores instalados. He intentado con simuladores 7.1, 8.0 y 8.1.
SimulatorManager reside como un icono en la bandeja del sistema y ofrece una opción para "Iniciar al iniciar sesión".
Nota : Esto funciona solo con Xcode 6 (6.1.1 en mi caso) y superior.
¡Espero que ayude!
fuente
Para saber dónde está almacenado su archivo .sqlite en su AppDelegate.m agregue el siguiente código
ahora llame a este método en AppDelegate.m
fuente
Esto me funcionó rápidamente:
fuente
Luché con esto por algún tiempo. Se convirtió en un gran dolor simplemente llegar a mi sqlite db local. Escribí este script y lo convertí en un fragmento de código dentro de XCode. Lo coloco dentro de mi appDidFinishLaunching dentro de mi appDelegate.
Esto crea un enlace sim en la raíz de su disco. (Es posible que deba crear esta carpeta usted mismo la primera vez, y modificarla, o puede cambiar la ubicación a otro lugar) Luego instalé el complemento xcodeway https://github.com/onmyway133/XcodeWay
Lo modifiqué un poco para que me permita simplemente presionar cmd + d y se abrirá una bobinadora de búsqueda en el directorio de Documentos persistentes de mi aplicación actual. De esta manera, no importa cuántas veces XCode cambie su ruta, solo cambia en la ejecución y actualiza su enlace simbólico inmediatamente en cada ejecución.
¡Espero que esto sea útil para otros!
fuente
Buscador abierto> Biblioteca> Desarrollador> CoreSimulator> Dispositivos
Luego, cambie el ícono de Arreglo del buscador, seleccione Fecha de adición
Seleccione su aplicación> datos> Contenedor> datos> Aplicaciones>
elige tu aplicación> Documentos> Aquí está su archivo db
En mi caso:
De lo contrario, haga esto:
- Imprimirá la ruta completa a la carpeta de datos.
Rápido:
fuente
let dirPaths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) print("App Path: \(dirPaths)")
Use Finder -> vaya a la carpeta e ingrese la ruta base dada para llegar a las carpetas de la aplicación
fuente
El simulador coloca el archivo en ~ / Library / Developer / CoreSimulator / Devices / ... pero la ruta después de / Devices es diferente para todos.
Usa este práctico método. Devuelve la ruta del directorio temporal para el usuario actual y no toma argumentos.
Entonces, en mi clase ViewController, generalmente pongo esta línea en mi viewDidLoad solo como referencia cuando necesito tomar mi archivo almacenado CoreData. Espero que esto ayude.
(Nota: para ir a la ruta, desde el menú del buscador, haga clic en Ir y escriba ~ / Library para abrir el directorio oculto; luego, en la ventana del Finder, puede hacer clic en la ruta que se muestra en la consola).
fuente
Esta ubicación, una vez más, ha cambiado, si usa Swift, use esto para averiguar dónde está la carpeta (esto se copia del archivo AppDelegate.swift que Apple crea para usted, así que si no funciona en su máquina, busque ese archivo para la sintaxis correcta, esto funciona en el mío usando Xcode 6.1 y simulador iOS 8):
fuente
Los simuladores se encuentran debajo de:
~/Library/Developer/CoreSimulator/
Aquí, se enumeran como directorios con nombres de UUID. Use ordenar por 'Fecha de modificación' para encontrar la última. Dentro de navegar a:
/data/Containers/Data/Application/
Aquí obtendrá una lista de todas las aplicaciones en ese dispositivo. Puede ordenar esto nuevamente para obtener la última aplicación.
NOTA: Xcode cambia el nombre del directorio cada vez que ejecuta la aplicación, así que no confíe en hacer alias / atajos en el escritorio.
La forma más fácil es usar la aplicación aquí , que hace todo automáticamente.
fuente
Creé este script que comprimirá la última aplicación creada para cualquier simulador y la comprimirá en el escritorio.
https://gist.github.com/Gerst20051/8ca49d5afbf09007b3696fab6e9f425c
fuente
En Swift 4 o Swift 5 puedes usar
NSHomeDirectory()
.La forma más fácil en Xcode 10 (o Xcode 11) es pausar su aplicación (como cuando llega a un punto de interrupción) y ejecutar esta línea en la consola del depurador:
po
significa objeto de impresión e imprime la mayoría de las cosasfuente
fuente
Con Swift 4, puede usar el siguiente código para obtener el directorio de inicio de su aplicación. El directorio de documentos de su aplicación está allí.
print(NSHomeDirectory())
Creo que ya sabe que el directorio de inicio de su aplicación es modificable, por lo que si no desea agregar código adicional a su base de código, SimPholder es una buena herramienta para usted.
Y aún más, puede preguntarse si existe una herramienta que pueda ayudarlo a ahorrar tiempo al cerrar y volver a abrir la misma base de datos SQLite cada vez que se cambia el directorio de inicio de su aplicación. Y la respuesta es sí, una herramienta que conozco es SQLiteFlow . De su documento, dice que:
fuente
Aquí está el sh para el último simulador y aplicación usados. Simplemente ejecute sh y copie el texto impreso y pegue y ejecute el comando para mostrar en el buscador.
fuente