目前我有一个看起来像这样的方法来防止文件被 iCloud 备份:
- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
const char* filePath = [[URL path] fileSystemRepresentation];
const char* attrName = "com.apple.MobileBackup";
if (&NSURLIsExcludedFromBackupKey == nil) {
// iOS 5.0.1 and lower
u_int8_t attrValue = 1;
int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);
return result == 0;
}
else {
// First try and remove the extended attribute if it is present
int result = getxattr(filePath, attrName, NULL, sizeof(u_int8_t), 0, 0);
if (result != -1) {
// The attribute exists, we need to remove it
int removeResult = removexattr(filePath, attrName, 0);
if (removeResult == 0) {
NSLog(@"Removed extended attribute on file %@", URL);
}
}
// Set the new key
return [URL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:nil];
}
}
问题是,它使用 iOS 5.1 及更高版本的 API:NSURLIsExcludedFromBackupKey
在支持 5.1 以下的设备时,这对我来说是个问题。尽管下面的代码说它支持 5.1 以下的设备,但它有时会崩溃并且不一致。
那么,有什么方法可以防止文件在不使用 NSURLIsExcludedFromBackupKey API 的情况下被 iCloud 备份?
谢谢!