如何在不支持iCloud的情况下为我的应用程序提供演示数据?

时间:2013-10-07 20:07:44

标签: ios cocoa-touch icloud data-storage

自1月以来,我在App Store中有一个应用程序,它将数据库文件复制到" Documents"首次启动时的目录。

此数据库用于存储用户创建的预设"。每个预设最多可包含129张照片。

一开始,该应用程序附带一个"默认预设",用户可以用它来理解并开始使用该应用程序。这个预设就像一个"礼物"对用户而言,如果他不再想要它,他可以删除它。

在更新2.0.2中,此架构中没有任何更改,但Apple现在拒绝了我的更新。

  

2.23 - 应用必须遵循iOS数据存储指南或他们会   被拒绝

我无法弄清楚如何解决这个问题。问题似乎是默认预设,Apple认为"临时"获得备份到iCloud。此预设不是临时的。它必须持久存在,并且是数据库的一部分。

我也无法使用&#34标记数据库;不要备份",因为这样"预设"用户创建的用户不会被备份,这将是非常糟糕的。

有人知道如何解决这个问题吗?

4 个答案:

答案 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。