iOS阻止文件备份到iCloud

时间:2014-05-27 06:50:42

标签: ios iphone objective-c core-data

在我的应用程序中,我必须存储核心数据数据库。我在xcode项目导航器中有一些包含默认数据(audiofiles,maptiles等)的组和文件夹。

我发现很多关于阻止文件备份的内容,例如: 我做了什么:

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
    if (_persistentStoreCoordinator != nil) {
        return _persistentStoreCoordinator;
    }

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"db.sqlite"];
    NSLog(@"%@", storeURL.path);

    NSError *error = nil;
    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];

    //NSDictionary *options = @{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES};
    /*NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                             [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                             [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];*/

    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {

        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

    [self addSkipBackupAttributeToItemAtURL:storeURL];

    return _persistentStoreCoordinator;
}

- (NSURL *)applicationDocumentsDirectory
{
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}

防止方法:

    - (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
    assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]);

    NSError *error = nil;
    BOOL success = [URL setResourceValue: [NSNumber numberWithBool: YES]
                                  forKey: NSURLIsExcludedFromBackupKey error: &error];
    if(!success){
        NSLog(@"Error excluding %@ from backup %@", [URL lastPathComponent], error);
    }
    return success;
}

(最低目标iOS版本为7.0)

这够了吗?我如何检查应用程序现在是否阻止备份核心数据库?

在我添加addSkipBackupAttributeToItemAtURL方法之前,我检查了应用程序存储空间,但未在文档和数据下找到任何内容。我只在备份下找到3.1 MB - >我的手机

- Install and launch your app
- Go to Settings > iCloud > Storage & Backup > Manage Storage 
- If necessary, tap "Show all apps" 
- Check your app's storage

1 个答案:

答案 0 :(得分:6)

你做得对。 在Apple Technical Q&A 1719: How do I prevent files from being backed up to iCloud and iTunes?之后,您应该使用“不备份”属性进行标记。

对于NSURL个对象,添加NSURLIsExcludedFromBackupKey属性以防止备份相应的文件。对于CFURLRef个对象,请使用相应的kCFURLIsExcludedFromBackupKey属性。

要知道更适合存储Core Data数据库的文件夹,您可以查看iOS Data Storage Guidelines