Ruta del directorio de documentos de Xcode Device Simulator

91

En iOS 7, el directorio de documentos de los simuladores de iOS se puede encontrar en:

/Users/Sabo/Library/Application Support/iPhone Simulator/

Sin embargo, en iOS 8 Beta Simulator , no puedo encontrar el directorio correspondiente para iOS 8 en el directorio de arriba.

¿Dónde está la ruta del directorio de documentos para el simulador de iOS 8?

ingrese la descripción de la imagen aquí

Puño de fuego
fuente
Prueba esto . Hay una aplicación que abre directamente el directorio Documentos de la última aplicación ejecutada.
NSRover
pruebe este enlace stackoverflow.com/questions/24133022/…
Tunvir Rahman Tusher
Si no puede encontrar la carpeta de su biblioteca, probablemente esté oculta. Al escribir este comando en la terminal, se mostrará: chflags nohidden ~ / Library
simon_smiley
Si le gusta el complemento Xcode, pruebe github.com/onmyway133/XcodeWay , un complemento Xcode que puede navegar a la carpeta del simulador y muchos otros lugares
onmyway133

Respuestas:

156

en mi computadora, la ruta es:

~/Library/Developer/CoreSimulator/Devices/1A8DF360-B0A6-4815-95F3-68A6AB0BCC78/data/Container/Data/Application/

NOTA: probablemente esos ID largos (es decir, UDID) sean diferentes en su computadora.

holex
fuente
1
Si su aplicación usa CoreData, puede haber una manera más fácil de buscar la ubicación de la carpeta: stackoverflow.com/a/25937606/1103584
DiscDev
13
No, esto es incorrecto. No hay distinción entre proyectos ObjC y proyectos Swift. Esos son UDID (identificadores únicos de dispositivo) y puede ver el suyo ejecutando 'xcrun simctl list'
Jeremy Huddleston Sequoia
@JeremyHuddlestonSequoia, correcto o no, así es como se copió el proyecto Swift y un ObjC en mi computadora. No necesito mencionar que ambos se compilaron solo en el simulador (esa era la pregunta original). Si el Xcode marca una diferencia entre los UDID para diferentes idiomas y cree que no es correcto, es posible que deba informarlo a Apple.
holex
7
Holex, estoy diciendo que su declaración es incorrecta, no que el diseño sea incorrecto (tenga en cuenta que en realidad soy el tipo de Apple que diseñó CoreSimulator, por lo que probablemente sería la primera persona en corregir algo allí que creo que es incorrecto). Los UDID corresponden a dispositivos separados. La única razón por la que sus proyectos swift y objc estarían usando diferentes UDID es porque implementó sus proyectos en diferentes dispositivos simuladores (por ejemplo, para uno, lo implementó en el iPhone 5s y el otro en el iPhone 6).
Jeremy Huddleston Sequoia
@JeremyHuddlestonSequoia, puedes corregir mi respuesta en cualquier momento, si te sientes lo suficientemente seguro.
holex
76

NSLogdebajo del código en algún lugar de "AppDelegate", ejecute su proyecto y siga la ruta. Esto le resultará fácil acceder a los documentos en lugar de buscar aleatoriamente dentro de "~ / Library / Developer / CoreSimulator / Devices /"

C objetivo

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

Swift
Si está usando Swift 1.2, use el código a continuación que solo se generará en desarrollo cuando use el Simulador debido al #if #endifbloqueo:

#if arch(i386) || arch(x86_64)
  let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! NSString
  NSLog("Document Path: %@", documentsPath)
#endif

Copie su ruta de "/ Users / ankur / Library / Developer / CoreSimulator / Devices / 7BA821 ..." vaya a " Finder " y luego " Ir a la carpeta " o command+ shift+ gy pegue su ruta, deje que la mac lo lleve a su directorio de documentos :)

Ankur
fuente
simple y eficiente!
loretoparisi
43

Simplemente escriba el código a continuación en AppDelegate -> didFinishLaunchingWithOptions
Objective C

#if TARGET_IPHONE_SIMULATOR 
// where are you? 
NSLog(@"Documents Directory: %@", [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]); 
#endif 


Swift 2.X

if let documentsPath = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first?.path {
    print("Documents Directory: " + documentsPath)   
}

Swift 3.X

#if arch(i386) || arch(x86_64)
    if let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.path {
        print("Documents Directory: \(documentsPath)")
    }
#endif

Rápido 4.2

#if targetEnvironment(simulator)
    if let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.path {
        print("Documents Directory: \(documentsPath)")
    }
#endif

Salida
/ Usuarios / mitul_marsonia / Library / Developer / CoreSimulator / Devices / E701C1E9-FCED-4428-A36F-17B32D32918A / data / Containers / Data / Application / 25174F64-7130-4B91-BC41-AC74257CCC6E / Documentos

Copie su ruta de "/ Users / mitul_marsonia / Library / Developer / CoreSimulator / Devices / E701C1E9-FCED-4428-A36F-17B32D32918A ..." vaya a "Finder" y luego "Ir a la carpeta" o comando + shift + gy pegue su ruta , deje que la mac lo lleve a su directorio de documentos

Mitul Marsoniya
fuente
¿Cómo sabrá en qué carpeta se encuentra su aplicación? Hay demasiados directorios, ¿tengo que buscar en cada uno de ellos?
KarenAnne
su ans es escuchar> stackoverflow.com/questions/24133022/…
Mitul Marsoniya
esta es una ruta codificada para su propio simulador. No funcionará para nadie más. En realidad, esta ruta también cambiará una vez que vuelva a ejecutar el simulador.
NSRover
#if TARGET_IPHONE_SIMULATOR // ¿Dónde estás? NSLog (@ "Directorio de documentos:% @", [[[NSFileManager defaultManager] URLsForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask] lastObject]); #endif
Mitul Marsoniya
16

Recomiendo una buena aplicación de utilidad llamada SimPholders que facilita la búsqueda de archivos y carpetas mientras desarrolla su aplicación iOS. Tiene una nueva versión para trabajar con los nuevos simuladores denominada SimPholders2. Se puede encontrar en simpholders.com

JDibble
fuente
Esa sería una aplicación genial ahora que iOS8 Simulator está enterrado en la oscuridad de la carpeta, pero esa aplicación no se ha actualizado para admitir iOS8.
wibobm
@wibobm. SimPholders2 ciertamente es compatible con iOS 8.0 e iOS 8.1
JDibble
DIOS MIO. Debo haber estado totalmente ciego. ¡Gracias!
wibobm
16

A pesar de que aquí hay muchas respuestas, ninguna proporciona una comprensión de cómo ha cambiado la estructura de carpetas de los simuladores de iOS 8.3 y no proporcionan una forma rápida de encontrar los datos de la aplicación (carpeta de documentos).

Dado que iOS 8, las carpetas de almacenamiento de datos de una aplicación están separadas de los archivos ejecutables de la aplicación, mientras que iOS 7 y versiones inferiores tienen la misma estructura de carpetas, la única diferencia es el hecho de que todos los simuladores (diferentes tipos y versiones) son ahora en una carpeta grande.

Entonces, la ruta a un simulador de iOS 8,7,6 es la siguiente:

~/Library/Developer/CoreSimulator/Devices

Cada simulador ahora está contenido en una carpeta nombrada con un identificador único que cambia en cada reinicio de un simulador.

Puede encontrar el Identifierpara cada uno de sus dispositivos y simuladores yendo a Xcode > Window > Devices(los primeros 3 o 4 caracteres del identificador son más que suficientes para recordar).

Para encontrar aquel en el que ha instalado su (s) aplicación (es), eche un vistazo a su Run scheme > devices(pantalla 2).

pantalla 1

pantalla 2

Ahora, después de identificar su simulador, dependiendo de su versión, la estructura de carpetas es muy diferente:

En iOS 8, el ejecutable y la carpeta de datos de una aplicación se encuentran en carpetas diferentes:

Ejecutable : ~/Library/Developer/CoreSimulator/Devices/[simID]/data/Containers/Bundle/Application/[appID]

Carpeta de datos : ~/Library/Developer/CoreSimulator/Devices/[simID]/data/Containers/Data/Application/[appID]/

Carpeta de documentos : ~/Library/Developer/CoreSimulator/Devices/[simID]/data/Containers/Data/Application/[appID]/Documents

En iOS 7 y debajo, la estructura de carpetas es la misma que antes, solo recuerde que ahora todos los simuladores están en la misma carpeta (ver arriba).

Razvan
fuente
13

Si su aplicación usa CoreData, un truco ingenioso es buscar el nombre del archivo sqlite usando terminal.

find ~ -name my_app_db_name.sqlite

Los resultados mostrarán las rutas de archivo completas a cualquier simulador que haya ejecutado su aplicación.

Realmente desearía que Apple simplemente agregara un botón al menú de archivo del Simulador de iOS como "Revelar la carpeta Documentos en el Finder".

DiscDev
fuente
1
Me encanta la terminal.
kakubei
2
Esta parece una forma bastante remota de encontrar esto. ¿Busca todo su directorio de inicio?
shortstuffsushi
11

Es correcto que debemos buscar en la ruta ~ / Library / Developer / CoreSimulator / Devices /.

Pero el problema que veo es que la ruta cambia cada vez que ejecuto la aplicación. La ruta contiene otro conjunto de ID largos después de la cadena de la aplicación y eso sigue cambiando cada vez que ejecuto la aplicación. Básicamente, esto significa que mi aplicación no tendrá datos en caché cuando se ejecute la próxima vez.

Deepak GM
fuente
Yo también estoy viendo esto.
Nathan Jones
5
Las rutas no cambian cada vez que ejecuta la aplicación. Hay una ruta por dispositivo que tienes en tu biblioteca. Ejecute 'xcrun simctl list' para ver la lista de dispositivos y sus UDID para ver qué subdirectorio debe considerar.
Jeremy Huddleston Sequoia
9

Con iOS 9.2 y Xcode 7.2, el siguiente script abrirá la carpeta Documentos de la última aplicación instalada en el último simulador utilizado;

cd ~/Library/Developer/CoreSimulator/Devices/
cd `ls -t | head -n 1`/data/Containers/Data/Application 
cd `ls -t | head -n 1`/Documents
open .

Para crear un script fácil de ejecutar, colóquelo en una aplicación de Automator con "Ejecutar script de shell":

Ejecute Shell Script dentro de la aplicación Automator

Bouke
fuente
7

Con la adopción de CoreSimulator en Xcode 6.0, los directorios de datos son por dispositivo en lugar de por versión. El directorio de datos es ~ / Library / Developer / CoreSimulator / Devices // datos donde se pueden determinar a partir de 'xcrun simctl list'

Tenga en cuenta que puede eliminar de forma segura ~ / Library / Application Support / iPhone Simulator y ~ / Library / Logs / iOS Simulator si no planea tener que volver a Xcode 5.xo anterior.

Jeremy Huddleston Sequoia
fuente
Gracias por dar lo que probablemente pueda verse como una respuesta autorizada. ¿Existe una manera fácil (excepto al iniciar sesión desde la aplicación) para encontrar la ubicación de una aplicación específica dentro de un simulador?
fzwo
Lo siento, no, pero he visto algunas solicitudes para esto aquí y en los foros. Presente un radar en bugreport.apple.com
Jeremy Huddleston Sequoia
7

actualización: Xcode 11.5 • Swift 5.2

if let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.path {
    print(documentsPath)   // "var/folder/.../documents\n" copy the full path
}

Vaya a su Finder presione command-shift-g (o Ir> Ir a la carpeta ... debajo de la barra de menú) y pegue esa ruta completa "var / carpeta /.../ documentos" allí y presione ir.

Leo Dabus
fuente
4

Tratar ~/Library/Developer/CoreSimulator/Devices/

Droppy
fuente
4

Enfrenté el mismo problema cuando almacené la ruta completa usando CoreData. Al recuperar la ruta completa, devuelve un valor nulo porque el UUID de la carpeta del documento es diferente cada vez que se reinicia la aplicación. La siguiente es mi resolución:

  1. Asegúrese de almacenar solo la ruta relativa del documento / archivo en CoreData. Por ejemplo, almacene "Files / image.jpg" en lugar de "/Users/yourname/.../Applications/UUID/Document/Files/image.jpg".
  2. Utilice lo siguiente para recuperar la ubicación del documento de la aplicación:

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

  3. Concatenar los dos números 2 y 1 para obtener la ruta completa del documento / archivo que desea recuperar.
Puede consultar la nota para desarrolladores de Apple: https://developer.apple.com/library/ios/technotes/tn2406/_index.html

netliner
fuente
3

¿Dónde está el directorio de documentos para el simulador de iOS 8?

Es posible que haya notado que el iPhone Simulator ha cambiado con Xcode 6, y con él, por supuesto, la ruta al directorio de documentos de sus aplicaciones simuladas. A veces es posible que debamos echarle un vistazo.

Encontrar esa ruta no es tan fácil como antes, es decir, Biblioteca / Soporte de aplicaciones / Simulador de iPhone / 7.1 / Aplicaciones / seguido de un número críptico que representa su aplicación.

A partir de Xcode 6 y iOS 8, lo encontrará aquí: Biblioteca / Desarrollador / CoreSimulator / Dispositivos / número críptico / datos / Contenedores / Datos / Aplicación / número críptico

http://pinkstone.co.uk/where-is-the-documents-directory-for-the-ios-8-simulator/

jbchitaliya
fuente
3

en Appdelegate, ponga este código para ver Document and Cache Dir:

#if TARGET_IPHONE_SIMULATOR
    NSLog(@"Documents Directory: %@", [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]);
    NSArray* cachePathArray = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString* cachePath = [cachePathArray lastObject];
    NSLog(@"Cache Directory: %@", cachePath);
#endif

en registro:

Directorio de documentos: / Users / xxx / Library / Developer / CoreSimulator / Devices / F90BBF76-C3F8-4040-9C1E-448FAE38FA5E / data / Containers / Data / Application / 3F3F6E12-EDD4-4C46-BFC3-58EB64D4BCCB / Documents /

Directorio de caché: / Users / xxx / Library / Developer / CoreSimulator / Devices / F90BBF76-C3F8-4040-9C1E-448FAE38FA5E / data / Containers / Data / Application / 3F3F6E12-EDD4-4C46-BFC3-58EB64D4BCCB / Library / Caches

ikanimo
fuente
3

Si te gusta ir a las carpetas de la aplicación para ver qué está pasando y no quieres tener que pasar por UUDID laberínticos, hice esto: https://github.com/kallewoof/plget

y usándolo, hice esto: https://gist.github.com/kallewoof/de4899aabde564f62687

Básicamente, cuando quiero ir a la carpeta de alguna aplicación, lo hago:

$ cd ~/iosapps
$ ./app.sh
$ ls -l
total 152
lrwxr-xr-x  1 me  staff    72 Nov 14 17:15 My App Beta-iOS-7-1_iPad-Retina.iapp -> iOS-7-1_iPad-Retina.dr/Applications/BD660795-9131-4A5A-9A5D-074459F6A4BF
lrwxr-xr-x  1 me  staff    72 Nov 14 17:15 Other App Beta-iOS-7-1_iPad-Retina.iapp -> iOS-7-1_iPad-Retina.dr/Applications/A74C9F8B-37E0-4D89-80F9-48A15599D404
lrwxr-xr-x  1 me  staff    72 Nov 14 17:15 My App-iOS-7-1_iPad-Retina.iapp -> iOS-7-1_iPad-Retina.dr/Applications/07BA5718-CF3B-42C7-B501-762E02F9756E
lrwxr-xr-x  1 me  staff    72 Nov 14 17:15 Other App-iOS-7-1_iPad-Retina.iapp -> iOS-7-1_iPad-Retina.dr/Applications/5A4642A4-B598-429F-ADC9-BB15D5CEE9B0
-rwxr-xr-x  1 me  staff  3282 Nov 14 17:04 app.sh
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 com.mycompany.app1-iOS-8-0_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/129FE671-F8D2-446D-9B69-DE56F1AC80B9/data/Containers/Data/Application/69F7E3EF-B450-4840-826D-3830E79C247A
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 com.mycompany.app1-iOS-8-1_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/414E8875-8875-4088-B17A-200202219A34/data/Containers/Data/Application/976D1E91-DA9E-4DA0-800D-52D1AE527AC6
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 com.mycompany.app1beta-iOS-8-0_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/129FE671-F8D2-446D-9B69-DE56F1AC80B9/data/Containers/Data/Application/473F8259-EE11-4417-B04E-6FBA7BF2ED05
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 com.mycompany.app1beta-iOS-8-1_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/414E8875-8875-4088-B17A-200202219A34/data/Containers/Data/Application/CB21C38E-B978-4B8F-99D1-EAC7F10BD894
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 com.mycompany.otherapp-iOS-8-1_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/414E8875-8875-4088-B17A-200202219A34/data/Containers/Data/Application/DE3FF8F1-303D-41FA-AD8D-43B22DDADCDE
lrwxr-xr-x  1 me  staff    51 Nov 14 17:15 iOS-7-1_iPad-Retina.dr -> simulator/4DC11775-F2B5-4447-98EB-FC5C1DB562AD/data
lrwxr-xr-x  1 me  staff    51 Nov 14 17:15 iOS-8-0_iPad-2.dr -> simulator/6FC02AE7-27B4-4DBF-92F1-CCFEBDCAC5EE/data
lrwxr-xr-x  1 me  staff    51 Nov 14 17:15 iOS-8-0_iPad-Retina.dr -> simulator/129FE671-F8D2-446D-9B69-DE56F1AC80B9/data
lrwxr-xr-x  1 me  staff    51 Nov 14 17:15 iOS-8-1_iPad-Retina.dr -> simulator/414E8875-8875-4088-B17A-200202219A34/data
lrwxr-xr-x  1 me  staff   158 Nov 14 17:15 org.cocoapods.demo.pajdeg-iOS-8-0_iPad-Retina.iapp -> /Users/me/Library/Developer/CoreSimulator/Devices/129FE671-F8D2-446D-9B69-DE56F1AC80B9/data/Containers/Data/Application/C3069623-D55D-462C-82E0-E896C942F7DE
lrwxr-xr-x  1 me  staff    51 Nov 14 17:15 simulator -> /Users/me/Library/Developer/CoreSimulator/Devices

La ./app.shparte sincroniza los enlaces. Básicamente, es necesario siempre hoy en día, ya que las aplicaciones cambian el UUID para cada ejecución en Xcode a partir de 6.0. Además, desafortunadamente, las aplicaciones están por ID de paquete para 8.xy por nombre de aplicación para <8.

Kalle
fuente
3

Basado en la respuesta de Ankur pero para nosotros los usuarios de Swift:

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

Colóquelo dentro de ViewDidLoad y se imprimirá inmediatamente después de la ejecución de la aplicación.

kakubei
fuente
3

Los simuladores se encuentran debajo:

~/Library/Developer/CoreSimulator/

Aquí, se enumeran como directorios con nombres UUID. Utilice ordenar por 'Fecha de modificación' para encontrar el último. Dentro, navegue hasta:

/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 crear alias / atajos en el escritorio.

La forma más sencilla es utilizar la aplicación aquí , que hace todo automáticamente.

NSRover
fuente
2

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
hmdeep
fuente
2

La mejor forma de encontrar la ruta es hacerlo mediante código.

Usando Swift, simplemente pegue el código a continuación dentro de la aplicación de la función en su AppDelegate.swift

let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
let documentsPath = paths.first as String
println(documentsPath)

Para el código Obj-C, busque la respuesta de @Ankur

rsc
fuente
2

Para Swift 3.x

if let documentsPath = FileManager.default.urls(for:.documentDirectory, in: .userDomainMask).first?.path {
        print("Documents Directory: " + documentsPath)
    }
Boris
fuente
1

iOS 11

if let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory,
                                                           .userDomainMask,
                                                           true).first {
    debugPrint("documentsPath = \(documentsPath)")
}
SwiftArquitecto
fuente