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.
SpokaneDude 01 de


Utilice "NSTemporaryDirectory ()". Mira
esto-

Respuestas:


296

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

~/Library/Developer/CoreSimulator

Navegar por el directorio de 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

44
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".

ingrese la descripción de la imagen aquí

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

¡Espero que ayude!


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

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

    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory     inDomains:NSUserDomainMask] lastObject];
 }

ahora llame a este método en AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

  //call here
   [self applicationDocumentsDirectory];

}

genial ... especialmente útil cuando hay múltiples simuladores
Yasitha Waduge

6

Esto me funcionó rápidamente:

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

3

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.

¡Espero que esto sea útil para otros!


Gracias, acabo de actualizar XcodeWay para admitir la carpeta del simulador de iOS 8
onmyway133

3

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:

/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, haga 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)")

Swift 3.0:let dirPaths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) print("App Path: \(dirPaths)")
AtomicBoolean el

2

Use Finder -> vaya a la carpeta e ingrese la ruta base dada 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);

1

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


1

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)")

1

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.


1

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

#!/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

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


0
 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/<app name>/"  --> is where the .sqlite files reside

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


0

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.