¿Dónde debo guardar los datos y archivos que deseo conservar a largo plazo, y cómo evito que iCloud los respalde?

Tengo un archivo (de tipo arbitrario, incluidos los repositorys de datos centrales) que necesito mantener y no tengo iOS que los elimine. Por lo general, no quiero que iCloud respalde estos archivos. ¿Dónde debería guardarlos?

Al guardar archivos localmente se cambió de iOS5.0 y anterior, 5.0.1 y 5.1 y más recientemente principalmente a la dirección de problemas de copia de seguridad de iCloud. Hay dos documentos fuente de Apple (la Guía de progtwigción del sistema de archivos y QA1719 ) que, en conjunto, proporcionan la información que respalda lo siguiente:

  • iOS 5.0

Los archivos deben guardarse en el directorio “Cachés”, ya que no hay manera de evitar copias de seguridad si están almacenados en la carpeta Documentos. Tenga en cuenta que el sistema puede eliminar estos archivos (consulte la norma QA1719), por lo que necesitará la capacidad de recrear cada uno según sea necesario. Para encontrar el directorio de cachés, use esto:

[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] 
  • iOS 5.0.1

Los archivos deben guardarse en ‘/ Library / Application Support’ ( FSP , página 15), que se puede acceder mejor a través de:

 [NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) lastObject] 

Mi experiencia es que este directorio no siempre existe y, por lo tanto, es posible que deba crearlo:

 - (NSString *)applicationAppSupportDirectory { return [NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) lastObject]; } NSFileManager *manager = [NSFileManager defaultManager]; NSString *appSupportDir = [self applicationAppSupportDirectory]; if(![manager fileExistsAtPath:appSupportDir]) { __autoreleasing NSError *error; BOOL ret = [manager createDirectoryAtPath:appSupportDir withIntermediateDirectories:NO attributes:nil error:&error]; if(!ret) { NSLog(@"ERROR app support: %@", error); exit(0); } } 

Los archivos guardados en este directorio (o subdirectorios) necesitan un atributo extendido para indicarle a iCloud que no realice una copia de seguridad (ver QA1719).

PD: No he encontrado una manera de establecer el objective de implementación en esta versión, si hay alguna manera, por favor, deje un comentario.

  • iOS 5.1

Los archivos (o carpetas de archivos) deben ubicarse en la carpeta ‘Application Support’ como se describe arriba. Para evitar la copia de seguridad de iCloud, use:

 [URL setResourceValue: [NSNumber numberWithBool: YES] forKey:NSURLIsExcludedFromBackupKey error:&error] 

como se describe en QA1719. Tenga en cuenta que puede aplicar esta clave a un directorio para evitar que se realice una copia de seguridad de su contenido. El método completo de QA1719:

 - (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL { assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]); NSError *error = nil; BOOL success = [URL setResourceValue: [NSNumber numberWithBool: YES] forKey: NSURLIsExcludedFromBackupKey error: &error]; if(!success){ NSLog(@"Error excluding %@ from backup %@", [URL lastPathComponent], error); } return success; }