Xcode 6 sigue cambiando el nombre del directorio de mi aplicación en el simulador iOS8 después de cada ejecución.

Estoy ejecutando Xcode 6 Beta 5, pero esto ha estado sucediendo desde la primera versión beta. El directorio de mi aplicación en el simulador sigue siendo renombrado después de cada ejecución. Me tomó un tiempo resolver esto. Estoy usando esto para obtener la referencia del directorio del documento.

NSString *folder = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSLog(@"Documents Dir: %@",folder); 

Ahora, por ejemplo, en la primera ejecución será:

/ Users / Joey / Library / Developer / CoreSimulator / Devices / 5B9930EE-A9B4-4B36-BABB-AA864ACAF2DE / data / Containers / Data / Application / 4B10C2E4-A5C3-4C64-93B1-4069FCCB9C46 / Documents

Segunda ejecución ahora es:

/ Users / Joey / Library / Developer / CoreSimulator / Devices / 5B9930EE-A9B4-4B36-BABB-AA864ACAF2DE / data / Containers / Data / Application / 7E9EB62D-115A-4092-AD23-CB6BA3E5E10F / Documents

Tercera ejecución:

/ Users / Joey / Library / Developer / CoreSimulator / Devices / 5B9930EE-A9B4-4B36-BABB-AA864ACAF2DE / data / Containers / Data / Application / EC8F41E8-52ED-4B10-9808-B3ACC46FC6AA / Documentos

Esto está causando esgulps en mi aplicación porque almacena referencias de ruta para ciertos archivos dentro de la aplicación. No es que mi statement NSLog arroje resultados incorrectos, verifiqué que esto es lo que sucede en Finder. Está cambiando el nombre todo el tiempo. ¿Alguien ha visto esto suceder? ¿Es esta una “característica” que estoy malinterpretando?

Resulta que Xcode 6 de hecho cambia el UUID de la aplicación en cada ejecución, y estoy equivocado al almacenar rutas absolutas.

UTILIZA SIMULADORES

Utilicé esta aplicación en Xcode 5 abre la carpeta Documentos, para la aplicación que se está ejecutando actualmente en el simulador, en Finder.

http://simpholders.com/

todavía no está listo para Xcode 6 (hasta el 24 de septiembre de 2014) pero ahorra toda esta molestia.

En Xcode 6 / iOS8, el paquete ahora está separado de los datos./ El GUID de la aplicación se regenera entre ejecuciones en Xcode (no estoy seguro de por qué)

  DOCUMENTS DIR:/Users/gbxc/Library/Developer/CoreSimulator/Devices/AC79941F-EC56-495E-A077-773EEE882732/data/Containers/Data/Application/C220D351-0BE7-46BA-B35E-D16646C61A3F/Documents mainBundlePath_:/Users/gbxc/Library/Developer/CoreSimulator/Devices/AC79941F-EC56-495E-A077-773EEE882732/data/Containers/Bundle/Application/12200D1D-9B67-408B-BCF7-38206CBE0940/myappname.app/BLANK_BLOG_SCALED.jpg 

1. ENCUENTRE LA CARPETA DE DISPOSITIVOS en SIMULADOR

 /Users/gbxc/Library/Developer/CoreSimulator/Devices/ 

abra cada /device.plist para ver qué GUID es qué dispositivo en XCode, creo que esto es estático

3. ENCUENTRE EL DISPOSITIVO que está ejecutando en el iPad 2: creo que esto es estático

 /Devices/AC79941F-EC56-495E-A077-773EEE882732 

4. Encuentre su aplicación / carpeta de documentos

 /AC79941F-EC56-495E-A077-773EEE882732/data/Containers/Data/Application/C220D351-0BE7-46BA-B35E-D16646C61A3F/Documents 

CUIDADO, el GUID C220D351-0BE7-46BA-B35E-D16646C61A3F se regenera cada vez que se ejecuta la aplicación en XCode 6

  NSArray *paths_ = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); if(paths_){ _docsDir = [paths_ firstObject]; DebugLog(@"DOCUMENTS DIR:%@",_docsDir); }else{ ErrorLog(@"paths_ is nil - cant get Documents directory"); } 

MAIN BUNDLE path

 NSString *mainBundlePath_ = [[NSBundle mainBundle] pathForResource:@"someimageinyourbundle" ofType:@"jpg"]; /AC79941F-EC56-495E-A077-773EEE882732/data/Containers/Bundle/Application/12200D1D-9B67-408B-BCF7-38206CBE0940/clarksonsiq.app/BLANK_BLOG_SCALED.jpg 

NUNCA CACHE LA RUTA a / Documentos entre ejecuciones cambiará.

Lo estaba serializando en un plist y no pude entender por qué seguían desapareciendo

El GUID anterior / Documentos cambia constantemente entre ejecuciones, pero si tiene / Documentos abiertos en Finder, la carpeta permanece abierta.

 https://devforums.apple.com/thread/235911?tstart=0 https://devforums.apple.com/thread/238754?tstart=0 

Solución gratis

Utilice Open Source Library OpenSim . OpenSim es una alternativa de código abierto para SimPholders, escrita en Swift.

Solución Pagada

Use la aplicación SimPholder para conocer la ubicación actual de la aplicación.

enter image description here

Para xcode 6.0>

Descargar SimPholder 2.0 alpha 2


Para xcode 5.1 <

Descargar SimPholders 1.5

Puedo confirmar que esto está relacionado con Xcode 6 y no con iOS 8.

Tengo dos máquinas de desarrollo. En uno de ellos tengo Xcode 5. Estaba trabajando todo el tiempo en esa máquina y mi URL estaba bien (aplicación de fotos, las fotos son visibles).

Ayer revisé la forma de mi fuente en una máquina con Xcode 6. Noté que mis fotos ya no están visibles, solo las fotos que se crean durante esa sesión de la aplicación.

Después de una pequeña depuración, me di cuenta de que file: /// var / mobile / Applications / B6A6BAEF-C90C-4A2A-93DB-E6700B88971F / Documents / está cambiando en cada ejecución de la aplicación.

Todo ese tiempo estoy trabajando con el dispositivo iOS 7.

Voy a verificar una vez más en una máquina con Xcode 5 para confirmar cuándo tengo en mis manos.

Solo debe guardar la ruta dentro de DocumentDirectory (directorio / nombre de archivo) y agregarla al DocumentDirectory cada vez que cargue el archivo …

 -(void)saveImage:(UIImage *)image{ NSData *pngData = UIImagePNGRepresentation(image); NSString *pathInDocumentDirectory = [APP_DocumentDirectory stringByAppendingPathComponent:PROFILE_IMAGE_NAME]; NSString *filePath = [self documentsPathForFileName:pathInDocumentDirectory]; //Save pic file path - DirName/Filename.png [XYZPreferencesHelper setUserImageFilePath:pathInDocumentDirectory]; //Write the file [[NSFileManager defaultManager] createFileAtPath:filePath contents:pngData attributes:nil]; } -(void)loadSavedUserPicture{ //Load saved DirName/Filename.png NSString *pathInDocumentDirectory = [XYZPreferencesHelper getUserImageFilePath]; if (pathInDocumentDirectory != nil){ //Full path with new app Document Directory NSString *filePath = [self documentsPathForFileName:pathInDocumentDirectory]; if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]){ NSData *pngData = [NSData dataWithContentsOfFile:filePath]; UIImage *image = [UIImage imageWithData:pngData]; if (image != nil){ userPicImageView.image = image; } } } } - (NSString *)documentsPathForFileName:(NSString *)name { NSString *documentsPath = [self createRestcallDirectoryIfNotExist]; return [documentsPath stringByAppendingPathComponent:name]; } -(NSString *)createRestcallDirectoryIfNotExist{ NSString *path; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsPath = [paths objectAtIndex:0]; path = [documentsPath stringByAppendingPathComponent:APP_DocumentDirectory]; NSError *error; if (![[NSFileManager defaultManager] fileExistsAtPath:path]) //Does directory already exist? { if (![[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:NO attributes:nil error:&error]) { NSLog(@"Create directory error: %@", error); } } return documentsPath; }