Xcode 6 iPhone Simulator Application Support location

En Xcode 6, tengo una aplicación en la que estoy usando Core Data, pero no hay ninguna carpeta en Application Support para iOS 8 iPhone Simulator. ¿Dónde están almacenados mis archivos y la base de datos sqlite de Core Data?

El directorio del simulador se ha movido con Xcode 6 beta a …

~/Library/Developer/CoreSimulator 

Navegar por el directorio a la carpeta Documentos de su aplicación es un poco más arduo, por ejemplo,

 ~/Library/Developer/CoreSimulator/Devices/4D2D127A-7103-41B2-872B-2DB891B978A2/data/Containers/Data/Application/0323215C-2B91-47F7-BE81-EB24B4DA7339/Documents/MyApp.sqlite 

Sugeriría que use SimPholders para encontrar sus archivos 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.

Encontré la aplicación SimulatorManager muy útil. Lo lleva directamente a la carpeta de aplicaciones de los simuladores instalados. Lo he intentado con los 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”.

enter image description here

Nota : Esto solo funciona con Xcode 6 (6.1.1 en mi caso) y superior.

¡Espero que ayude!

Para saber dónde está almacenado su archivo .sqlite en su AppDelegate.m agregue el siguiente código

 - (NSURL *)applicationDocumentsDirectory { NSLog(@"%@",[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]); return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; } 

ahora llama a este método en AppDelegate.m

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //call here [self applicationDocumentsDirectory]; } 

Esto funcionó para mí en forma rápida:

 let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) println("App Path: \(dirPaths)") 

Luché con esto por un tiempo. Se convirtió en un gran dolor simplemente para llegar a mi sqlite db local. Escribí este script y lo convertí en un fragmento de código dentro de XCode. Lo ubico 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 simlink en la raíz de tu disco. (Puede que tenga que crear esta carpeta usted mismo la primera vez, y chmod it, o puede cambiar la ubicación a algún 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 abrirá una bobinadora de búsqueda al directorio persistente de Documentos de mi aplicación actual. De esta forma, no importa cuántas veces XCode cambie su ruta, solo cambia en la ejecución, y actualiza su simlink inmediatamente en cada ejecución.

¡Espero que esto sea útil para otros!

Buscador abierto> Biblioteca> Desarrollador> CoreSimulator> Dispositivos

A continuación, cambie el icono de Arreglo desde el buscador seleccione Fecha agregada

Seleccione su aplicación> datos> Contenedor> datos> Aplicaciones>

elige tu aplicación> Documentos> Aquí está tu archivo db

En mi caso:

 /Users/pluto/Library/Developer/CoreSimulator/Devices/A75107D2-A535-415A-865D-978B2555370B/data/Containers/Data/Application/265A12BC-FF5B-4235-B5EF-6022B83754B4/Documents/dboPhotoBucket.sqlite 

De lo contrario, haz esto:

 NSLog(@"app dir: %@",[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]); 

– Imprimirá la ruta completa a la carpeta de datos.

Rápido:

 let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) println("App Path: \(dirPaths)") 

Use Finder -> vaya a la carpeta e ingrese el sendero base dado para llegar a las carpetas de la aplicación

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil; NSLog(@"%@",basePath); 

El simulador coloca el archivo en ~ / Library / Developer / CoreSimulator / Devices / … pero la ruta siguiente / Devices es diferente para todos.

Utiliza este práctico método. Devuelve la ruta del directorio temporal para el usuario actual y no toma ningún argumento.

 NSString * NSTemporaryDirectory ( void ); 

Por lo tanto, en mi clase ViewController generalmente pongo esta línea en mi viewDidLoad solo como referencia cuando necesito tomar mi archivo CoreData almacenado. 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 ~ / Biblioteca para abrir el directorio oculto y 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, de modo que si no funciona en su máquina, busque en ese archivo para la syntax correcta, esto funciona en el mío usando Xcode 6.1 y el simulador iOS 8):

 let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask) println("Possible sqlite file: \(urls)") 

Los simuladores se encuentran en:

~/Library/Developer/CoreSimulator/

Aquí, se enumeran como directorios con nombres de UUID. Utilice 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 volver a ordenar esto 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.

Creé este script que comprime la última aplicación creada para cualquier simulador y lo comprime en el escritorio.

https://gist.github.com/Gerst20051/8ca49d5afbf09007b3696fab6e9f425c

 #!/bin/bash DESTINATION_DIR="$HOME/Desktop" APP_PATH=$(find ~/Library/Developer/CoreSimulator/Devices/*/data/Containers/Bundle/Application/*/*.app -type d -maxdepth 0 -print0 | xargs -0 ls -td | head -n1) APP_DIRNAME=$(dirname "$APP_PATH") APP_BASENAME=$(basename "$APP_PATH") FILE_NAME="${APP_BASENAME%.*}" cd "$APP_DIRNAME" zip -qr "$DESTINATION_DIR/$FILE_NAME.zip" "$APP_BASENAME" 
  1. NSTemporaryDirectory() gives this: /Users/spokaneDude/Library/Developer/CoreSimulator/Devices/1EE69744-255A-45CD-88F1-63FEAD117B32/data/Containers/Data/Application/199B1ACA-A80B-44BD-8E5E-DDF3DCF0D8D9/tmp 2. remove "/tmp" replacing it with "/Library/Application Support//" --> is where the .sqlite files reside 
  1. 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())

  2. 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.

  3. Y, además, puede preguntarse si existe alguna herramienta que pueda ayudarlo a ahorrar tiempo desde el cierre y la reapertura de la misma base de datos SQLite cada vez que se cambie 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 cambios en el directorio. Esto hace que SQLiteFlow pueda trabajar amigablemente 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