我有一个已经运行的企业应用程序,它在文档文件夹中存储了大量文档。我希望禁用Documents文件夹中所有这些文档和文件夹的iCloud备份。
问题是文件夹内的内容不断动态变化和添加的想法
每个文件的kCFURLIsExcludedFromBackupKey
听起来有点困难,因为我的代码中有多个类可以写入文档目录。
有什么方法可以禁用整个文档文件夹及其子文件夹的上传。
答案 0 :(得分:4)
文件可能会动态更改,因为它们是从服务器或类似设备定期更新的?如果是这样,那么答案是将文件存储从<Application_Home>/Documents
目录移动到<Application_Home>/Library/Caches
目录。这些文件不会备份。这当然只适用于将来可以重新下载或重新创建数据的情况(如果需要)。
有关概述,请参阅此Apple文档: https://developer.apple.com/icloud/documentation/data-storage/index.html
答案 1 :(得分:4)
在您的应用程序的appDelegate中使用以下方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
添加此代码
NSArray *urlArray = [[NSFileManager defaultManager] URLsForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask];
NSURL *documentsUrl = [urlArray firstObject];
NSError *error = nil;
BOOL success = [documentsUrl setResourceValue: [NSNumber numberWithBool: YES]
forKey: NSURLIsExcludedFromBackupKey error: &error];
if(!success){
NSLog(@"Error in disabling %@ from backup %@", [documentsUrl lastPathComponent], error);
}
答案 2 :(得分:3)
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *directory = paths[0];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *url = [NSURL fileURLWithPath:directory];
NSError *error;
// exclude from iCloud backup
if ([url setResourceValue:@(YES) forKey:NSURLIsExcludedFromBackupKey error:&error] == NO) {
NSLog(@"Error: Unable to exclude directory from backup: %@", error);
}
首次安装时可以调用一次。它将适用于子文件夹和文件。
答案 3 :(得分:3)
您可以将kCFURLIsExcludedFromBackupKey
(或NSURLIsExcludedFromBackupKey
)放入整个Documents目录,就像对单个文件一样。但是,如果您不希望任何备份的文件,您可能需要重新考虑它们应该去的位置。 Documents目录仅适用于 的用户数据。如果文件存储在您自己的服务器上,它们应该放在Caches
中,因为它们可以轻松地再次下载。如果文件仅在短时间内需要,则应该进入tmp/
。
This 是Apple关于将应用程序文件放在何处的文档。