禁用icloud上的文件夹及其所有子文件夹的备份?

我有一个已经运行的企业应用程序,它在文档文件夹内存储了大量的文档。 我希望禁用Documents文件夹内的所有这些文档和文件夹的iCloud备份。 问题是,文件夹内的内容不断dynamic变化,为每个文件添加kCFURLIsExcludedFromBackupKey的想法听起来有点困难,因为我的代码中有多个类可以写入文档目录。

有什么办法可以禁用整个文档文件夹及其子文件夹的上传。

也许这些文件正在dynamic变化,因为它们是从服务器或类似的定期更新? 如果是这样,那么答案就是将文件存储从<Application_Home>/Documents目录移动到<Application_Home>/Library/Caches目录。 这些文件不会被备份。 这当然只有在需要时才能重新下载或重新创build数据的情况下才适用。

有关概述,请参阅此Apple文档: https : //developer.apple.com/icloud/documentation/data-storage/index.html

 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); } 

你可以在第一次安装时调用这些。 它将应用于子文件夹和文件。

在下面的方法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); } 

您可以将kCFURLIsExcludedFromBackupKey (或NSURLIsExcludedFromBackupKey )放在整个Documents目录中,就像单个文件一样。 但是,如果您不希望备份任何文件,则可能需要重新考虑应该去哪里。 Documents目录仅用于用户数据。 如果文件存储在您自己的服务器上,那么他们可能会进入Caches因为它们可以轻松地再次下载。 如果文件只需要很短的时间,他们应该进入tmp/

这是苹果有关放置应用程序文件的文档。