tengo - mi iphone dice que no tiene espacio pero si tiene
Las aplicaciones deben seguir las Pautas de almacenamiento de datos de iOS, nada en/documentos pero aún algunos kbs enviados a iCloud (2)
Ahora, he movido todos mis archivos que estaban en / documentos a la carpeta de caché.
¿Te perdiste el último párrafo que citaste? Puede marcar los datos como "no hacer una copia de seguridad", como se describe en ese párrafo. Por lo tanto, deje sus archivos en el directorio de Documentos y márquelos apropiadamente.
¿Hay alguna forma de verificar qué se está enviando exactamente a iCloud?
Apunte su navegador a http://developer.icloud.com
Mi aplicación fue rechazada por la siguiente razón:
Su aplicación no sigue las Pautas de almacenamiento de datos de iOS, tal como lo requieren las Pautas de revisión de la tienda de aplicaciones.
Su aplicación respalda 4.0 MB de datos en el espacio iCloud de cada usuario en el lanzamiento. Asegúrese de configurar el atributo "No hacer copia de seguridad" para todos los datos que no sean generados o modificados por el usuario. Para verificar la cantidad de datos que almacena su aplicación:
- Instala y ejecuta tu aplicación
- Vaya a Configuración> iCloud> Almacenamiento y copia de seguridad> Administrar almacenamiento
- Si es necesario, selecciona "Mostrar todas las aplicaciones"
- Verifica el almacenamiento de tu aplicación
Las Pautas de almacenamiento de datos de iOS indican que solo el contenido que el usuario crea utilizando su aplicación (documentos, archivos nuevos, ediciones, etc.) puede almacenarse en el directorio / Documents y respaldarse en iCloud.
Los archivos temporales utilizados por su aplicación solo deben almacenarse en el directorio / tmp. Recuerde eliminar los archivos almacenados en esta ubicación cuando el usuario salga de la aplicación.
Los datos que pueden recrearse pero deben persistir para el correcto funcionamiento de su aplicación o porque los clientes esperan que estén disponibles para su uso sin conexión se deben agregar con el atributo "no hacer copia de seguridad". Para objetos NSURL, agregue el atributo NSURLIsExcludedFromBackupKey para evitar que se realice una copia de seguridad del archivo correspondiente. Para objetos CFURLRef, use el atributo correspondiente kCFURLIsExcludedFromBackupKey.
Por lo que entiendo, todo lo que está almacenado en la carpeta / documents se almacenará en iCloud, y esta carpeta solo debe contener datos generados por el usuario. Ahora, he movido todos mis archivos que estaban en / documentos a la carpeta de caché. Sin embargo, cuando pruebo la aplicación con un dispositivo, todavía quedan unos 28kb enviados a iCloud (y no hay nada en la carpeta / documents del entorno limitado de la aplicación de ese dispositivo, según el Organizador). Mi proyecto no es compatible con iCloud, por lo que no entiendo lo que se envía cuando no hay nada en los documentos.
¿Hay alguna forma de verificar qué se está enviando exactamente a iCloud?
Además, mi proyecto ahora se dirige a iOS 5.0. Por lo que entiendo en 5.0, no hay nada en el lugar para evitar una purga final de la carpeta de caché. ¿Debería solo soportar> = 5.0.1?
Además, mi proyecto ahora se dirige a iOS 5.0. Por lo que entiendo en 5.0, no hay nada en el lugar para evitar una purga final de la carpeta de caché. ¿Debería solo soportar> = 5.0.1?
No hay forma de hacerlo en 5.0, por lo que debe almacenar todo en un lugar que pueda ser limpiado potencialmente por el sistema operativo como NSCachesDirectory
. Creo que su mejor opción es manejar todos los casos 5.0, 5.0.1 y 5.1; use NSCachesDirectory
para 5.0 y NSApplicationSupportDirectory
para 5.0.1 y 5.1. Es un desastre, pero como notaron, Apple agregó rápidamente el nuevo atributo en 5.0.1 y mejoró nuevamente la experiencia en 5.1.
hemos rechazado las aplicaciones porque no manejamos todos los casos diferentes, YMMV.
Sin embargo, cuando pruebo la aplicación con un dispositivo, todavía quedan unos 28kb enviados a iCloud (y no hay nada en la carpeta / documents del entorno limitado de la aplicación de ese dispositivo, según el Organizador). Mi proyecto no es compatible con iCloud, por lo que no entiendo lo que se envía cuando no hay nada en los documentos.
Esto se aplica si un usuario realiza una copia de seguridad de su dispositivo en iCloud, no si está usando iCloud en su aplicación. No me preocuparían por los 28 KB adicionales, también he visto esto en nuestras aplicaciones, creo que es probable que sobrecarguen bibliotecas de terceros, como paquetes de análisis u otros elementos que almacenan pequeñas cantidades de datos en estas ubicaciones. Como se indicó, NSUserDefaults también puede almacenarse aquí. Puede descargar los datos del organizador de Xcode y ver qué se almacena, si tiene curiosidad.
Aquí hay un método para manejar el atributo do not back up en 5.0.1 y 5.1.
+ (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL {
if (&NSURLIsExcludedFromBackupKey == NULL) {
// Use iOS 5.0.1 mechanism
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 {
// Use NSURLIsExcludedFromBackupKey mechanism, iOS 5.1+
NSError *error = nil;
BOOL success = [URL setResourceValue:[NSNumber numberWithBool:YES]
forKey:NSURLIsExcludedFromBackupKey
error:&error];
//Check your error and take appropriate action
return success;
}
}