pasar - Rechazo de aplicaciones de iOS debido a 2.23-Pautas de almacenamiento de datos de iOS
transferir datos de android a iphone (3)
Acabo de recibir el mismo mensaje de rechazo ayer.
Uso el siguiente código en la application:didFinishLaunchingWithOptions:
para ver qué tiene mi aplicación dentro de la carpeta de documentos y cuál es el permiso de cada elemento sobre la copia de seguridad de iCloud:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
NSArray *documents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:basePath error:nil];
NSURL *URL;
NSString *completeFilePath;
for (NSString *file in documents) {
completeFilePath = [NSString stringWithFormat:@"%@/%@", basePath, file];
URL = [NSURL fileURLWithPath:completeFilePath];
NSLog(@"File %@ is excluded from backup %@", file, [URL resourceValuesForKeys:[NSArray arrayWithObject:NSURLIsExcludedFromBackupKey] error:nil]);
}
Tenía algunos archivos dentro de esa carpeta que se estaban sincronizando con iCloud. Entonces, en lugar de guardar esos archivos en otro lugar, establezco el valor del recurso para el NSURLIsExcludedFromBackupKey
claves NSURLIsExcludedFromBackupKey
en YES
para excluir que iCloud NSURLIsExcludedFromBackupKey
una copia de respaldo de esos archivos, como esto:
NSURL *URL = [NSURL fileURLWithPath:photoPath];
[URL setResourceValue:@(YES) forKey:NSURLIsExcludedFromBackupKey error:nil];
Estoy enviando mi aplicación de nuevo hoy para ver si funciona.
Espero que esto ayude.
Aquí hay un mensaje de Apple sobre el rechazo:
2.23 - Las aplicaciones deben seguir las pautas de almacenamiento de datos de iOS o serán rechazadas 2.23 Detalles
En el lanzamiento y la descarga de contenido, su aplicación almacena 6,5 MB, lo que no cumple con las pautas de almacenamiento de datos de iOS.
Próximos pasos
Por favor, verifique que solo el contenido que crea el usuario utilizando su aplicación, por ejemplo, documentos, nuevos archivos, ediciones, etc., esté respaldado por iCloud según lo exigen las pautas de almacenamiento de datos de iOS. Además, verifique que los archivos temporales utilizados por su aplicación solo se almacenen en el directorio / tmp; Recuerde eliminar o eliminar los archivos almacenados en esta ubicación cuando se determine que ya no son necesarios.
Los datos que pueden recrearse pero que deben persistir para que su aplicación funcione correctamente, o porque los usuarios esperan que esté disponible para su uso sin conexión, deben marcarse con el atributo "no realizar copias de seguridad". Para los objetos NSURL, agregue el atributo NSURLIsExcludedFromBackupKey para evitar que se realice una copia de seguridad del archivo correspondiente. Para objetos CFURLRef, use el atributo kCRUFLIsExcludedFromBackupKey correspondiente.
Revisé los archivos de datos de mi aplicación tanto para el dispositivo como para el simulador. Descubrí que si la aplicación se ha utilizado durante un tiempo, los datos totales de la aplicación podrían almacenar de 5 a 6 MB, en el inicio. Pero desinstalé y reinstalé la aplicación, y verifiqué nuevamente, veo ~ 3MB de almacenamiento de datos al iniciar la aplicación.
No estoy almacenando ninguna base de datos Core Data ni ningún otro archivo de base de datos. Pero me he dado cuenta de que Google Analytics y Google Tag Manager almacenan algunos datos de sqlite en esta ruta: "AppData / Library". Quiero decir que NO se almacena en esta ruta: "AppData / Library / Caches". ¿Hay alguna diferencia para las pautas de almacenamiento de datos de iOS?
Por cierto, iCloud está deshabilitado para la aplicación.
También estoy usando SDWebImage para descargar imágenes y almacena casi 3 MB de imágenes en el lanzamiento y almacena datos de imágenes en esta ruta: "AppData / Library / Caches"
¿Tienes alguna idea de qué debo hacer para manejar este problema?
Encontré este mismo problema recientemente y simplemente traduje la respuesta de Glauco a Swift (aunque probablemente podría escribirse más rápidamente)
let directories = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true)
if let documentDirectory = directories.first {
do {
let documents = try NSFileManager.defaultManager().contentsOfDirectoryAtPath(documentDirectory)
for files in documents {
let urlForm = NSURL.fileURLWithPath(documentDirectory + "/" + files)
do {
try print("/(files): /(urlForm.resourceValuesForKeys([NSURLIsExcludedFromBackupKey]))")
} catch {
print("can''t find key")
}
}
} catch {
print("can''t retrieve contents")
}
}
Código para establecerResourceValue
let urlToExclude = NSURL.fileURLWithPath(quoteSavePath!)
do {
try urlToExclude.setResourceValue(NSNumber(bool: true), forKey: NSURLIsExcludedFromBackupKey)
} catch { print("failed to set resource value") }
Recientemente, fuimos rechazados por Apple Review Team con el mismo problema,
En el lanzamiento y la descarga de contenido, su aplicación almacena 9.65MB en el iCloud del usuario, que no cumple con las pautas de almacenamiento de datos de iOS.
Sugieren seguir los mismos pasos siguientes que se mencionan en la pregunta anterior.
En nuestro caso, ya estamos configurando este NSURLIsExcludedFromBackupKey
en el código al descargar contenidos. Informamos al equipo de revisión que ya estamos haciendo esto, por lo que nos redirigieron al Soporte Técnico para Desarrolladores de Apple (DTS) para abordar mejor el problema.
DTS respondió que son nuestros archivos de AppIcon los que están causando el problema.
Se está realizando una copia de seguridad de los AppIcons en iCloud, ya que Apple necesita mostrar un icono en el dispositivo mientras se descarga la aplicación. Resulta que los archivos AppIcons de nuestra aplicación son tan grandes que causaron el rechazo porque está realizando una copia de seguridad de muchos datos en iCloud. El equipo de revisión de la aplicación no nos comunicó esto claramente, ya que algunos de ellos no están al tanto de los cambios de esta nueva herramienta que rastrean a los AppIcons.
Ahora que sabemos la razón, optimizamos nuestros íconos usando ImageOptim y minimizamos el tamaño a 75KB.
Presentamos nuestra aplicación y esperamos que sea aprobada en 1 a 2 días. :)
Espero que esto ayude a alguien que tiene el mismo problema. :)