apple storage guidelines的方式给我造成了更多问题,因为我从Documents目录维护的大多数数据(文件,数据库和某些与应用程序相关的东西)。最近我将二进制文件上传到应用程序商店,但该文件被拒绝,苹果根据这一点向我提供了一份报告,我将如下更改代码
- (NSString *)applicationDocumentsDirectory {
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSURL *pathURL= [NSURL fileURLWithPath:documentPath];
[self addSkipBackupAttributeToItemAtURL:pathURL];
return documentPath;
}
- (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;
}
我的问题:
1.我可以直接在文档目录中使用addSkipBackupAttributeToItemAtURL:方法来为文档目录中的所有文件使用iCloud备份吗?
2.以上提到的代码足以使我的应用程序在应用商店中得到批准,以防我的最后一个二进制文件由于文档目录中未包含的“请勿备份”属性而被拒绝。
最佳答案
您应该能够将此属性设置为文件夹,以避免备份整个文件夹。
但是请注意,这样做可能是对完整的Documents文件夹执行此操作的好方法。首先,这将导致您的应用没有备份内容的情况,因此在恢复手机后,该应用将处于原始状态。我也可以想象这不是“按苹果的预期”的方式,因此可能导致拒绝该应用程序(总是一个猜测)。如果可能的话,我会在Document目录中为您的非备份内容创建一个子文件夹,并将所有内容放在此处(尽管如果您已经在商店中拥有此应用程序的版本,则可能需要一些迁移代码)。
请注意,存储准则确实允许将用户创建/不可创建的内容存储在Documents目录中,并且您只需要标记诸如下载内容之类的内容,就不能将其放置在Caches目录中(例如,如果用户希望该内容,可以离线使用)。