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

时间:2014-11-21 07:53:48

标签: ios objective-c iphone icloud nsfilemanager

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

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

4 个答案:

答案 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关于将应用程序文件放在何处的文档。