ID de aplicación de NSSearchPathForDirectoriesInDomains Cambios por simulador Ejecutar y actualizar la aplicación en un dispositivo real

Me gustaría mantener las imágenes en el dominio de usuario de iPhone, así que escribo el siguiente código.

let path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] print(path) 

Muestra como: /Users/xxx/Library/Developer/CoreSimulator/Devices/1312F880-6BDC-45D2-B3B3-4D2374313C67/data/Containers/Data/Application/A2850237-5E71-4373-81A6-B443032E1951/Documents/

En este caso, la ID de la aplicación es A2850237-5E71-4373-81A6-B443032E1951

Y el problema es cuando vuelvo a ejecutar el simulador SIN RETIRAR LA APLICACIÓN, se muestra como: /Users/xxx/Library/Developer/CoreSimulator/Devices/1312F880-6BDC-45D2-B3B3-4D2374313C67/data/Containers/Data/Application/1F9B5B0A-5A6C-4098-BF40-C978C60C93AF/Documents/

En este caso, la ID de la aplicación es 1F9B5B0A-5A6C-4098-BF40-C978C60C93AF

Por lo tanto, hay una diferencia en la ID de la aplicación entre la installation anterior y la actual, aunque acabo de actualizar la aplicación y no eliminé la aplicación. ¿Por qué se causa y cómo solucionarlo?

Provoca Xcode 7.2, 7.1, 7.0. Y provoca no solo la installation del simulador sino también la installation real del dispositivo. Por lo tanto, si los usuarios de iOS actualizan la aplicación desde la tienda de aplicaciones, la ID de la aplicación se cambiará y la zona de testing de la aplicación también se cambiará y finalmente los usuarios no podrán enviar sus imágenes.

Situaciones similares:

  • Xcode 6.3 parece cambiar la ruta al directory de Documentos por ejecución de aplicación
  • xcode 6.2 crea una nueva ruta de simulador cada vez que ejecutas la aplicación

Pautas relacionadas:

  • Conceptos básicos del sistema de files

Gracias por adelantado.

EDITAR

Parece que tengo que persistir path como relativo no absoluto.

  • El nombre de la carpeta de la aplicación cambia cada vez que corro en el simulador [duplicado]
  • Xcode 6 sigue cambiando el nombre del directory de mi aplicación en el simulador de iOS8 después de cada ejecución.

Intentaré el enfoque y si resolví mi problema, actualizaré la pregunta.

Tengo que persistir path relativo no absoluto. Y también puedo recuperar viejas imágenes ejecutadas NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] + "persisted relative path" con NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] + "persisted relative path" .

Una solución mejor es save un marcador de datos https://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/AccessingFilesandDirectories/AccessingFilesandDirectories.html

Un marcador es una estructura de datos opaca, incluida en un object NSData, que describe la location de un file. Mientras que las URL de ruta y de reference de file son potencialmente frágiles entre los lanzamientos de su aplicación, un marcador se puede usar para volver a crear una URL en un file incluso en los casos en que el file se movió o cambió el nombre

Primero debe usar NSURL en lugar de String

Convertir un NSURL a NSData

 let data: NSData? = try? url.bookmarkDataWithOptions(.SuitableForBookmarkFile, includingResourceValuesForKeys: nil, relativeToURL: nil) 

Leer un NSURL del marcador NSData

  var isStale: ObjCBool = false let url = try? NSURL( byResolvingBookmarkData: bookData, options: [], relativeToURL: nil, bookmarkDataIsStale: &isStale) guard let fullURL = url else { return nil } 

Puede llenar relativeToURL en la URL del directory de documentos.

Alternativamente, puede usar FileKit : path.bookmarkData y Path(bookmarkData: ..)

intente persistir en su file simplemente con el nombre.extensión

save documento

  let pathDocument = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] let fullPath = let fullPath = pathDocument+"/"+"fileName.ext" //...add some code to save document at `fullPath`... 

get el documento

  let pathDocument = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] let fullPath = let fullPath = pathDocument+"/"+"fileName.ext" //... add code to get data at path : `fullPath`....