Ios 我如何在不备份到iCloud的情况下为我的应用程序提供演示数据?

Ios 我如何在不备份到iCloud的情况下为我的应用程序提供演示数据?,ios,cocoa-touch,icloud,data-storage,Ios,Cocoa Touch,Icloud,Data Storage,从一月份开始,我在应用商店里有一个应用程序,它在第一次启动时将数据库文件复制到“Documents”目录 该数据库用于存储用户创建的“预设”。每个预设最多可以有129张照片 在开始时,该应用程序附带一个“默认预设”,用户可以使用该预设来理解并开始使用该应用程序。这个预设就像是给用户的“礼物”,如果用户不再需要它,他可以直接删除它 在更新2.0.2时,此模式中没有任何更改,但苹果现在拒绝了我的更新 2.23-应用程序必须遵守iOS数据存储指导原则,否则将 被拒绝 我不知道该怎么解决这个问题。问题似

从一月份开始,我在应用商店里有一个应用程序,它在第一次启动时将数据库文件复制到“Documents”目录

该数据库用于存储用户创建的“预设”。每个预设最多可以有129张照片

在开始时,该应用程序附带一个“默认预设”,用户可以使用该预设来理解并开始使用该应用程序。这个预设就像是给用户的“礼物”,如果用户不再需要它,他可以直接删除它

在更新2.0.2时,此模式中没有任何更改,但苹果现在拒绝了我的更新

2.23-应用程序必须遵守iOS数据存储指导原则,否则将 被拒绝

我不知道该怎么解决这个问题。问题似乎在于,苹果认为“临时”的默认预设被备份到iCloud。此预设不是临时的。它必须持久存在,并且是数据库的一部分

我也不能用“不备份”来标记数据库,因为这样用户创建的“预设”就不会被备份,这太糟糕了


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

“不备份”是一个文件级属性。因此,也许只将您的“礼物”文件标记为该属性?

您需要将该文件标记为

如果不标记文件本身,它将有资格备份到iCloud。苹果公司最近开始实施这一措施

如果应用程序生成大量数据,在应用程序启动时,他们会拒绝它。苹果的理由是,任何可以重新生成的数据都不应该备份到iCloud

为了防止这种情况,苹果建议:

- (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中的全面省略之外,您唯一剩下的就是将用户生成的内容与可重新创建的内容分开。

不幸的是,这方面的指导原则非常明确——只有用户生成的数据可以存储在文档目录中并备份到iCloud

但是,看起来您可以防止备份特定文件:


您必须找到一种方法将预设数据与用户的数据存储区分开,并将预设数据标记为“请勿备份”

我的一个应用程序也遇到了同样的问题。我必须生成另一个版本的数据库并将其存储到Caches文件夹中,然后将其标记为不符合iCloud备份的条件。然后将所有用户生成的内容存储到documents文件夹中的另一个数据库中,该数据库实际上会备份到iCloud。

我的问题是,此初始内容与用户内容位于同一个数据库中。所有照片都存储在数据库中。这是一个更新,所以我现在不能分离它,也不能标记整个数据库。数据库中就这些吗?用户内容?不幸的是,是的。所有图片都存储在数据库中,在第一次启动时复制时,数据库已经有了“默认预设”。另一个想法,尽管有风险,但我脑海中闪过的想法是最初将DB从iCloud中排除,然后(在应用程序使用4分钟后等)删除该标志。他们的测试人员肯定不会注意到开关;-)嗯。。如果我在应用程序设置中添加一个选项,用户可以启用或禁用“备份”选项(默认为关闭)?因为这是一个更新,所有文件都存储在同一个数据库中,“礼物”和用户的内容位于同一位置。