自1月以来,我在App Store中有一个应用程序,它将数据库文件复制到" Documents"首次启动时的目录。
此数据库用于存储用户创建的预设"。每个预设最多可包含129张照片。
一开始,该应用程序附带一个"默认预设",用户可以用它来理解并开始使用该应用程序。这个预设就像一个"礼物"对用户而言,如果他不再想要它,他可以删除它。
在更新2.0.2中,此架构中没有任何更改,但Apple现在拒绝了我的更新。
2.23 - 应用必须遵循iOS数据存储指南或他们会 被拒绝
我无法弄清楚如何解决这个问题。问题似乎是默认预设,Apple认为"临时"获得备份到iCloud。此预设不是临时的。它必须持久存在,并且是数据库的一部分。
我也无法使用&#34标记数据库;不要备份",因为这样"预设"用户创建的用户不会被备份,这将是非常糟糕的。
有人知道如何解决这个问题吗?
答案 0 :(得分:1)
您需要将文件标记为not backup to iCloud。
如果没有标记文件,它将有资格备份到iCloud。 Apple最近开始强制执行此操作。
如果应用程序在应用启动时生成大量数据,他们会拒绝它。 Apple的理由是任何可以重新生成的数据都不应该备份到iCloud。
为了防止这种情况,Apple建议:
- (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;
}
除了iCloud的全面遗漏之外,您唯一留下的就是将用户生成的内容与可重新创建的内容分开。
答案 1 :(得分:0)
“不备份”是文件级属性。那么也许只标记具有该属性的“礼物”文件?
答案 2 :(得分:0)
不幸的是,指南非常明确 - 只有用户生成的数据可以存储在Documents目录中并备份到iCloud。
但是,看起来您可以阻止备份特定文件: https://developer.apple.com/library/ios/qa/qa1719/_index.html#//apple_ref/doc/uid/DTS40011342
您必须找到一种方法将预设数据与用户的数据存储区分开,并将预设数据标记为“不备份”
答案 3 :(得分:0)
我在使用其中一个应用时遇到了同样的问题。我必须生成另一个版本的数据库并将其存储到Caches文件夹中,并将其标记为不符合iCloud备份的条件。然后将所有用户生成的内容存储到documents文件夹中的另一个数据库中,该数据库实际上已备份到iCloud。