Aplicación iOS PhoneGap rechazada por el uso de local Storage

Apple acaba de rechazar una aplicación PhoneGap que envié. Utilizo HTML5 localStorage en la aplicación para save los datos descargados con fines de caching: 2.23 Las aplicaciones deben seguir las Pautas de almacenamiento de datos de iOS o serán rechazadas .

Estoy seriamente confundido porque, en todo caso, pensé que localStorage en 5.1 realmente guarda datos en caching y NO en un lugar que se copy de security con iCloud [fuente] . Este es el comportamiento que deseo: no necesito ni quiero que se haga una copy de security de los datos.

¿Estoy equivocado o es Apple? ¿Qué puedo hacer en una aplicación PhoneGap para save estos datos almacenados en caching sin infringirlos?

Edit: PhoneGap 1.8.1 si eso ayuda.

Resulta que estaba en lo cierto y que Apple estaba equivocada. Confirmé que estaba almacenando todo en el directory / Caches correctamente. No hicieron comentarios sobre mi pregunta: simplemente aprobé mi aplicación.

Hay dos cosas de las que soy consciente:

1) Los files generados por su aplicación (y no el resultado del usuario que usa su aplicación), como los files de text temporales para almacenar el valor de una variable, estos files deben colocarse en la biblioteca / caching en lugar del directory del documento.

2) También debe marcar un file con un atributo "skip-backup" para decirle a iCloud que no haga una copy de security del file.

Creo que te puede faltar el paso 2.

Escribí una class simple de MediaDirectory que rápidamente me da la ruta a los files en la carpeta Library / Cache y también agrega el atributo de copy de security skip.

Después de save su file en la carpeta Libary / Cache, simplemente haga algo como esto:

[MediaDirectory addSkipBackupAttributeForFile:@"myTextFile.txt"]; 

Aquí está la class en su totalidad:

 // Header File // ---------------------------------------------------------------------- // This class takes a file name (including extension) and returns // the path to that file in the Library/Cache folder // ---------------------------------------------------------------------- #import <Foundation/Foundation.h> @interface MediaDirectory : NSObject +(NSString *) mediaPathForFileName:(NSString *) fileName; +(NSString *) mediaPathForFileName:(NSString *) fileName inSubDirectory:(NSString *) subDirectory; + (BOOL)addSkipBackupAttributeToFile:(NSString *) fileName; + (BOOL)addSkipBackupAttributeToFile:(NSString *) fileName inSubDirectory:(NSString *) subDirectory; @end // Implementation File #import "MediaDirectory.h" #include <sys/xattr.h> @implementation MediaDirectory +(NSString *) mediaPathForFileName:(NSString *) fileName { NSArray *directoryPaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); NSString *cachesDirectory = [directoryPaths objectAtIndex:0]; NSString *filePath = [NSString stringWithFormat:@"%@/%@", cachesDirectory, fileName]; return filePath; } // if an image needs to be stonetworking in a sub folder called "images" +(NSString *) mediaPathForFileName:(NSString *) fileName inSubDirectory:(NSString *) subDirectory { NSArray *directoryPaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); NSString *cachesDirectory = [directoryPaths objectAtIndex:0]; NSString *filePath = [NSString stringWithFormat:@"%@/%@/%@", cachesDirectory, subDirectory, fileName]; return filePath; } //+ (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL + (BOOL)addSkipBackupAttributeToFile:(NSString *) fileName { const char* filePath = [[self mediaPathForFileName:fileName] fileSystemRepresentation]; const char* attrName = "com.apple.MobileBackup"; u_int8_t attrValue = 1; int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0); return result == 0; } + (BOOL)addSkipBackupAttributeToFile:(NSString *) fileName inSubDirectory:(NSString *) subDirectory { const char* filePath = [[self mediaPathForFileName:fileName inSubDirectory:subDirectory] fileSystemRepresentation]; const char* attrName = "com.apple.MobileBackup"; u_int8_t attrValue = 1; int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0); return result == 0; } @end 

Una aplicación de teléfono que acabo de enviar ha sido rechazada por Apple por los mismos motivos, y solo estoy usando el almacenamiento local.

He vuelto a enviar con las siguientes preferences establecidas en mi config.xml

 <preference name="BackupWebStorage" value="none" /> 

Entiendo que esto resolverá el problema.