Mi aplicación fue rechazada porque parece que 7 mb se almacenan en la carpeta de documentos y se envían automáticamente a icloud. Así que tengo en bucle todos los archivos que se escribirán en la carpeta de documentos throught este método:NSURLIsExcludedFromBackupKey - Las aplicaciones deben seguir las Pautas de almacenamiento de datos de iOS o serán rechazadas
- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL {
const char* filePath = [[URL path] fileSystemRepresentation];
const char* attrName = "com.apple.MobileBackup";
if (&NSURLIsExcludedFromBackupKey == nil) {
// iOS 5.0.1 and lower
u_int8_t attrValue = 1;
int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);
return result == 0;
}
else {
// First try and remove the extended attribute if it is present
int result = getxattr(filePath, attrName, NULL, sizeof(u_int8_t), 0, 0);
if (result != -1) {
// The attribute exists, we need to remove it
int removeResult = removexattr(filePath, attrName, 0);
if (removeResult == 0) {
NSLog(@"Removed extended attribute on file %@", URL);
}
}
// Set the new key
NSError *error = nil;
[URL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&error];
return error == nil;
}
La versión 1.1 de mi aplicación fue aprobada después de esta implementación del código. La semana pasada intenté enviar la versión 1.2 de la misma aplicación (nada ha cambiado en la administración de archivos, todos los archivos que están almacenados en la carpeta de documentos se enlazan mediante el método addSkipBackupAttributeToItemAtURL). Mi aplicación fue rechazada nuevamente por la misma razón. No puedo mover mi archivo a la carpeta temporal o caché porque mi aplicación no puede restaurar completamente el archivo (uno de este es un archivo db, restaurar db significa perder cualquier dato insertado por el usuario), por lo que esta no puede ser la solución . De todos modos, he encontrado un problema en el código, así es como llamo al método:
[self addSkipBackupAttributeToItemAtURL: [NSURL fileURLWithPath: fullPath]];
utilizando el dispositivo [NSURL fileURLWithPath: fullPath] con ios 5.1 devuelve un error y parece imposible crear el atributo. Si cambio la inicialización de nsurl con [NSURL URLWithString: defaultStorePath], el dispositivo con 5.1 parece agregar correctamente el atributo.
Con ios 5.0.1 todo está invertido, [NSURL URLWithString: defaultStorePath] devuelve un error mientras [NSURL fileURLWithPath: fullPath] funciona.
Tal vez pueda verificar la versión de ios y establecer una inicialización nsurl adecuada, pero sigue siendo un problema. En la explicación de rechazo leí:
En particular, encontramos que en el lanzamiento y/o descarga de contenido, su aplicación almacena 7mb. Para comprobar la cantidad de datos que su aplicación está almacenando:
- instalar y poner en marcha su aplicación
- Ir a Ajustes> iCloud> Almacenamiento & de copia de seguridad> Administrar almacenamiento
- Si es necesario, pulse "Mostrar todas las aplicaciones"
- Registro de almacenamiento de su aplicación
si trato de comprobar este valor veo 7 mb también con la inicialización NSURL correcto (cuando todos los atributos están configurados correctamente). ¿Cuál es el comportamiento correcto? ¿Alguien con este problema? ¿Tengo que hacer algo específico antes de la comprobación de almacenamiento de la aplicación sugerida por Apple para que sea significativo?