¿Dónde debo save los datos y los files que quiero conservar a largo ploop y cómo evito que iCloud los respalde?

Tengo un file – de tipo arbitrario que incluye los repositorys de datos principales – que necesito save y que iOS no los elimine. Por lo general, no quiero que iCloud respalde estos files. ¿Dónde debo savelos?

El almacenamiento de files cambió localmente desde iOS5.0 y versiones anteriores, 5.0.1 y 5.1 y posteriores principalmente a los problemas de copy de security de direcciones iCloud. Hay dos documentos fuente de Apple (la Guía de progtwigción del sistema de files y QA1719 ) que en set proporcionan la información que respalda lo siguiente:

  • iOS 5.0

Los files se deben save en el directory "Caches", ya que no hay forma de evitar copys de security si están almacenados en la carpeta Documentos. Tenga en count que el sistema puede eliminar estos files (consulte el documento QA1719), por lo que necesitará la posibilidad de volver a crear cada uno según sea necesario. Para search el directory de cachings, use esto:

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

Los files deben savese en '/ Biblioteca / Soporte de aplicaciones' ( FSP , página 15), a la que se puede acceder mejor a través de:

 [NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) lastObject] 

Mi experiencia es que este directory no siempre existe y, por lo tanto, es posible que debas 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 files guardados en este directory (o subdirectorys) necesitan un atributo extendido para decirle a iCloud que no los respalde (ver QA1719).

PS: No encontré una forma de establecer el objective de implementación en esta versión, si hay alguna forma, deje un comentario.

  • iOS 5.1

Los files (o carpetas de files) deberían ubicarse en la carpeta 'Soporte de aplicaciones' como se describe arriba. Para evitar que iCloud respalde el uso:

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

como se describe en el documento QA1719. Tenga en count que puede aplicar esta key a un directory para evitar que se haga una copy de security 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; }