我的应用需要从服务器下载相当数量的内容才能正常运行。
关于数据存储的Apple指南提到,这种“需要工作但很容易反映”的数据不应该包含在iCloud / iTunes备份中:足够公平。
棘手的部分是防止目录被备份的代码在iOS 5.0,5.0.1和5.1之间是不同的(参见this technical note)。
我的应用目前支持iOS 5.0作为部署目标。
我应该在以下不同选项之间做些什么:
还有其他推荐选项吗?
答案 0 :(得分:0)
对于存储到文件系统的每个文件,您必须添加“不备份”属性。请参阅此答案:Adding the "Do Not Backup" attribute to a folder hierarchy in iOS 5.0.1。要检查系统版本,您可以拨打[[UIDevice currentDevice] systemVersion]
,或使用__IPHONE_5_0
和#if defined()
以及#ifndef
等宏。祝你好运!
答案 1 :(得分:0)
我正在将我的图片文件夹标记为不备份,因为我正在下载图片以供离线使用。 Here苹果讨论如何这样做。
#include<sys/xattr.h>
- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL {
if (&NSURLIsExcludedFromBackupKey == nil) { // iOS <= 5.0.1
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 { // iOS >= 5.1
NSError *error = nil;
[URL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&error];
return error == nil;
}
}
- (void)createSkipBackupImagesFolder {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"/images"];
NSError *error;
if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath]) {
[[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:&error];
NSURL *toURL = [NSURL fileURLWithPath:dataPath];
[self addSkipBackupAttributeToItemAtURL:toURL];
}
}
[self createSkipBackupImagesFolder];
答案 2 :(得分:-1)
如果您将数据存储到缓存目录而不是文档目录中,则icloud将不会备份您的数据...
所以我认为这是阻止icloud备份的最佳方法。
in&#34;不备份&#34;您需要为每个文件设置此标志。
使用NSCachesDirectory insted NSDocumentDirectory。