Hay dos cosas que yo sepa:
1) Los archivos que se generan por la aplicación (y no el resultado de que el usuario usando su aplicación) tales como archivos de texto temporal para almacenar el valor de una variable, entonces estos archivos deben colocarse en la Biblioteca/Caché en lugar del directorio del Documento.
2) También debe marcar un archivo con un atributo "skip-backup" para indicar a iCloud que no haga una copia de seguridad del archivo.
creo que es posible que se echa en falta el paso 2.
escribí una clase MediaDirectory simple que me da rápidamente la ruta de acceso a los archivos de la carpeta Library/caché y también añadir el atributo de copia de seguridad de salto.
Después guardó el archivo en la carpeta Libary/caché, sólo tiene que ser algo como esto:
[MediaDirectory addSkipBackupAttributeForFile:@"myTextFile.txt"];
Aquí está la clase en su totalidad:
// Header File
// ----------------------------------------------------------------------
// This class takes a file name (including extension) and returns
// the path to that file in the Library/Cache folder
// ----------------------------------------------------------------------
#import <Foundation/Foundation.h>
@interface MediaDirectory : NSObject
+(NSString *) mediaPathForFileName:(NSString *) fileName;
+(NSString *) mediaPathForFileName:(NSString *) fileName inSubDirectory:(NSString *) subDirectory;
+ (BOOL)addSkipBackupAttributeToFile:(NSString *) fileName;
+ (BOOL)addSkipBackupAttributeToFile:(NSString *) fileName inSubDirectory:(NSString *) subDirectory;
@end
// Implementation File
#import "MediaDirectory.h"
#include <sys/xattr.h>
@implementation MediaDirectory
+(NSString *) mediaPathForFileName:(NSString *) fileName
{
NSArray *directoryPaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachesDirectory = [directoryPaths objectAtIndex:0];
NSString *filePath = [NSString stringWithFormat:@"%@/%@", cachesDirectory, fileName];
return filePath;
}
// if an image needs to be stored in a sub folder called "images"
+(NSString *) mediaPathForFileName:(NSString *) fileName inSubDirectory:(NSString *) subDirectory
{
NSArray *directoryPaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachesDirectory = [directoryPaths objectAtIndex:0];
NSString *filePath = [NSString stringWithFormat:@"%@/%@/%@", cachesDirectory, subDirectory, fileName];
return filePath;
}
//+ (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
+ (BOOL)addSkipBackupAttributeToFile:(NSString *) fileName
{
const char* filePath = [[self mediaPathForFileName:fileName] 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;
}
+ (BOOL)addSkipBackupAttributeToFile:(NSString *) fileName inSubDirectory:(NSString *) subDirectory
{
const char* filePath = [[self mediaPathForFileName:fileName inSubDirectory:subDirectory] 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;
}
@end
Yo sugeriría que utilice Xcode para descargar una instantánea de caja de arena de su aplicación para tomar un vistazo a qué archivos y directorios se están creando. Tal vez PhoneGap está haciendo algo funky. También puede simplemente buscar en el directorio del simulador de la aplicación. –
Y asegúrese de mostrar los archivos ocultos porque muchos de los directorios de detalles de caché/implementación están ocultos (por ejemplo, almacenamiento de recursos externos de Core Data). –
Si miro en el directorio del simulador, muestra un archivo__0.localstorage en el directorio "Caches" (Aplicaciones/aplicación/Biblioteca/Cachés). Entonces eso reafirma mi pensamiento de que se guarda en el lugar "correcto". –