Mi aplicación para iPhone fue rechazada por este motivo "Encontramos que su aplicación no sigue las Pautas de almacenamiento de datos de iOS, …"

Mi aplicación para iPhone ha sido rechazada recientemente y con la razón mencionada a continuación:

"Descubrimos que su aplicación no cumple con las Pautas de almacenamiento de datos de iOS, que no cumple con las Pautas de revisión de App Store".

Para esta aplicación, estaba almacenando la database (file sqlite) en / Documents / directory para iOS 5.0.1 y versiones anteriores y para iOS 5.0 y versiones posteriores. Utilicé el directory Library / Cache.

Para otros datos, como PDF e imágenes de imágenes que estaba descargando del server, seguí el mismo enfoque que antes: iOS 5.0.1 y posterior: Guardó estos datos en / Documents / directory iOS 5.0 y versiones anteriores: los datos guardados en Library / Cache directory.

¿Es correcto este enfoque?

Según la directriz de Apple: Importante : el nuevo atributo "no realizar copys de security" solo será utilizado por iOS 5.0.1 o posterior. En iOS 5.0 y versiones anteriores, las aplicaciones necesitarán almacenar sus datos en / Library / Caches para evitar tener una copy de security. Dado que este atributo se ignora en sistemas más antiguos, deberá asegurar que su aplicación cumpla con las Pautas de almacenamiento de datos de iOS en todas las versiones de iOS compatibles con su aplicación.

También muy confundido sobre esa asignación de attributes "no hacer copy de security" para los datos almacenados para iOS 5.0.1 y posteriores. ¿Para qué files necesito asignar esta bandera? ¿Puedo usarlo para la database ?.

Necesita deshacerse de estos rechazos, ya que ha sucedido dos veces. Proporcione una guía para almacenar los datos de mi aplicación. Gracias por adelantado. Esperando una respuesta positiva.

Marque https://developer.apple.com/icloud/documentation/data-storage/

específicamente:

Utilice este atributo con datos que se pueden volver a crear pero que deben persistir incluso en situaciones de bajo almacenamiento para el funcionamiento correcto de su aplicación o porque los clientes esperan que esté disponible durante el uso fuera de línea. Este atributo funciona en files marcados independientemente del directory en el que se encuentren, incluido el directory de Documentos.

Almacene la database SQLite en la carpeta de cachings y configure la bandera de donotbackup, que detendrá el file que se elimina mediante el sistema de limpieza de caching

- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL { const char* filePath = [[URL path] 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; } 

Utilizo una database en mi aplicación y la almaceno en la carpeta de caching (con el set de banderas anterior) y acabo de aprobar ningún problema.

Además, puede almacenar sus datos en una subcarpeta del directory de documentos, que creo que no se respaldará, pero persistirá.

Uno de mis amigos tiene el mismo problema. El problema básico es que podría estar almacenando datos pesados ​​en su directory de documentos de aplicación.

Después de que iCloud se haya implementado en Apple, los datos del directory del documento se relacionan de algún modo con iCloud Storage. Por lo tanto, Apple ahora rechaza las aplicaciones que utilizan un gran almacenamiento de datos en el directory de documentos.

Debe almacenar los datos en otra location. Almacene el file de PDF y otras ilustraciones en otra location.

Este enlace puede ayudarlo.

http://www.techotopia.com/index.php/Working_with_Directories_on_iOS_4_%28iPhone%29

Espero que resuelva tu problema.

Para resolver la aplicación rechazada por Apple para su aplicación no sigue las pautas de almacenamiento de datos de iOS, por favor agregue el código siguiente en su aplicación.

  - (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL { if (&NSURLIsExcludedFromBackupKey == nil) { // iOS <= 5.0.1 const char* filePath = [[URL path] 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; } else { // iOS >= 5.1 NSError *error = nil; // if you set YES in Resources value then iTune will not backup that file or folder. // You set FALSE in Resources value then iTune will backup that file or folder. [URL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&error]; return error == nil; } } 

Para usar este método (Ejemplo)

 NSString *defaultDBPath = [[NSBundle mainBundle] pathForResource:@"CDTDatabaseNew" ofType:@"sqlite"]; success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error]; NSURL *guidesURL = [NSURL fileURLWithPath:dbPath]; [self addSkipBackupAttributeToItemAtURL:guidesURL]; 

Debe usar este método cuando cree o copie files en el directory de documentos.

NOTA: -Apple ha cambiado la línea de guía de almacenamiento de datos y si está almacenando algo en el directory de documentos, debe corregir el código anterior. No se pierda esta parte del código.

La aplicación será rechazada si no coloca ese código. Entonces, ahora cada uno debe agregar ese código cuando cree la database, almacene imágenes en caching, etc. en el directory de documentos. Espero que la próxima vez no me rechacen la aplicación debido a esta razón.