防止备份到iCloud,代码是否正确?

时间:2011-12-19 07:29:53

标签: iphone ios backup icloud home-directory

我正在下载许多音频和视频文件并将其存储在我的主目录中。 现在我想“阻止备份到iCloud” 所以我为我的每个文件的URL添加了以下代码

- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL

{

    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版本。 如果没有,请建议正确的方法来做到这一点。 谢谢

2 个答案:

答案 0 :(得分:7)

  

任何人都可以告诉我这个代码适用于所有IOS版本。

不,它没有。在其Technical Note introducing the "do not backup" flag中,Apple明确指出

  

新的“不备份”属性仅供iOS 5.0.1或更高版本使用。

他们还告诉您需要为旧iOS版本做些什么:

  

在iOS 5.0及更早版本中,应用程序需要将其数据存储在<Application_Home>/Library/Caches中以避免备份。由于旧系统会忽略此属性,因此您需要确保您的应用符合您的应用支持的所有iOS版本上的iOS数据存储指南。

答案 1 :(得分:2)

您可以将此代码用于iOS 5.1或更高版本

- (BOOL)addSkipBackupAttributeToItemAtPath:(NSString *)filePathString {
    NSURL *fileURL = [NSURL fileURLWithPath:filePathString];

    assert([[NSFileManager defaultManager] fileExistsAtPath: [fileURL path]]);

    NSError *error = nil;

    BOOL success = [fileURL setResourceValue:[NSNumber numberWithBool: YES]
                                  forKey: NSURLIsExcludedFromBackupKey
                                 error: &error];
    return success;
}