如何防止文件被备份到iCloud 和iTunes?

应用有一些文件须要永久的存储在本地使应用支持离线功能。可是这些文件并不包含用户数据,无需备份。如何防止这些文件被备份。

在iOS上,应用负责确保只有用户数据而不包含应用数据被备份到iCloud和iTunes上。具体的步骤在不一样的iOS 版本各有不一样。因此对不一样的版本进行区分描述。关于具体哪些数据不该该被备份,参见App Backup Best Practices section of the iOS App Programming Guidehtml

 

注意:应用应该避免将应用数据和用户数据和在相同的文件中。这样会增长没必要要的备份大小而且被认为是违反iOS的数据存储指南。ios

 

iOS 5.1 以及更新

 

从iOS 5.1开始,应用能够使用NSURLIsExcludedFromBackupKeykCFURLIsExcludedFromBackupKey 文件属性来防止文件被备份。这些API是经过经过旧的,弃用的方式的直接设置额外属性。全部运行在iOS5.1的都应该使用这些API包防止文件被备份。app

在iOS5 .1上防止文件被备份ide

- (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 5.0.1

若是你的应用必须支持iOS 5.0.1,你能够使用下面的方式来设置“不要备份”的拓展属性。当你建立无须备份文件或者文件夹时,将数据写入文件而后调用这个方法,传入一个文件URL。ui

 

下面的这些代码已经被弃用并只应该使用在iOS5.0.1及更早的版本上。当运行的iOS5.1上时,应用应用使用NSURL和CFURL键来进行描述。orm

在iOS 5.0.1上设置额外属性htm

#import <sys/xattr.h>
- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
    assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]);
 
    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;
}

 

iOS 5.0

没法在iOS5.0上防止数据被备份。若是你的应用必须支持iOS5.0,然你须要保持你的应用数据在Caches中来避免数据被备份。iOS将会在不须要的时候删除Caches目录中的数据。因此若是数据被删除的话应用将须要从新解压出这些数据。ip

相关文章
相关标签/搜索