Ardilla Quio Ardilla Quio

22 de Abril de 2013

iCloud: excluir ficheros del backup

Muchas aplicaciones necesitan cargar inicialmente una gran base de datos. Existen numerosos tutoriales que nos enseñan cómo añadir a nuestro proyecto el fichero SQL y cargar los datos de forma persistente en nuestro dispositivo. Lo que no suelen explicar estos tutoriales es que después de hacer la carga del SQL inicial, deberíamos marcar el fichero como "No añadir a las copias de seguridad".

En este artículo explicaremos por qué y cómo hacerlo.

Si un dispositivo tiene activado iCloud, se harán copias de seguridad de los datos de nuestras aplicaciones. Para optimizar el espacio en iCloud y las copias de seguridad existen unas normas que se deben seguir y que se pueden consultar en iOS Data Storage Guidelines. Si se incumplen, nuestra aplicación será rechazada al ser revisada.

Mi primera aplicación (Creciendo) fue rechazada por el siguiente motivo: "2.23: Apps must follow the iOS Data Storage Guidelines or they will be rejected". En mi caso existe un fichero .sqlite de 2.5 Mb que se utiliza la primera vez que se entra en la aplicación para crear la base de datos. Este fichero no se vuelve a usar. Tal como se indica en iOS Data Storage Guidelines debería marcarlo como "No añadir a las copias de seguridad", ya que no contiene datos creados por el usuario ni modificables.

Marcar un fichero como "No añadir a las copias de seguridad" es muy fácil en las versiones de iOS 5.1 o posteriores (para versiones anteriores leer Technical Q&A QA1719 de la documentación de Apple Developer) bastará con cambiar la propiedad NSURLIsExcludedFromBackupKey de nuestro fichero:

NSURL *URL = [[NSURL alloc] initFileURLWithPath:defaultDBPath];
BOOL success = [URL setResourceValue: [NSNumber numberWithBool: YES]
                              forKey: NSURLIsExcludedFromBackupKey error: &error];
if(!success){
    NSLog(@"Error eliminando %@ del backup %@", [URL lastPathComponent], error);
}

donde defaultDBPath es un NSString con la ruta y nombre del fichero en cuestión.

0 comentarios

Comentario anónimo
Comentar como usuario