我似乎无法从我的代码中获取备份属性参数。无论我似乎在做什么,该方法都会返回 false 并带有“未知错误 -1”。我已经尝试过跳过备份方法的不同迭代,但下面是我正在使用的最新版本,基于我发现的另一篇文章:
- (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];
}
}
我对该方法的调用如下所示(在运行时它总是打印“不成功”):
if ([self addSkipBackupAttributeToItemAtURL:[NSURL fileURLWithPath:filePath]]) {
NSLog(@"success!");
} else {
NSLog(@"not successful");
}
filePath 是文档文件夹图像的 NSString 路径。我记录了一个图像路径的示例,如下所示:
/var/mobile/Applications/B3583D06-38BC-45F0-A027-E79997F0EC60/Documents/myImage.png
在我的应用程序中,它循环遍历我推出的所有(大量)文件,并添加了这个属性。它对他们每个人都失败了。由于这些动态驱动的文件对离线功能的严格要求,我需要能够使其正常工作。我没有看到很多其他人遇到这个问题,所以这告诉我我可能在这里遗漏了一些明显的东西,哈哈。
我找到了这篇文章:使用此代码从 iCloud 备份中排除文件后,为什么我的应用程序仍然被拒绝?
对于我的问题可能是什么,这看起来很有希望,但实际上并没有任何关于如何具体解决的细节(它只是建议使用 /Library 而不是 docs 文件夹?)。
提前感谢任何可以提供帮助的人!-文森特