2.23:应用必须遵循iOS数据存储指南,否则将被拒绝

jma*_*s89 11 storage objective-c ios route-me

通过将应用程序上传到应用程序商店给了我这个错误.

2.23:应用必须遵循iOS数据存储指南,否则将被拒绝

我一直在看错是我正在使用的其中一个文件不符合存储要求.

更具体地说,它是一个用于使用route-me库加载地图离线模式的sqlite.

我正在使用sqlite在离线模式下加载地图,似乎这张地图在iCloud中存储为备份,所以我正在跳过存储限制.

不知道如何说这个副本不是在iCloud中创建的.

代码如下:

[[RMDBMapSource alloc] initWithPath: @ "map.sqlite"]; 
Run Code Online (Sandbox Code Playgroud)

文件大小为23MB

有任何想法吗?

mrh*_*mrh 23

很可能您将"map.sqlite"存储在应用程序的Documents目录中.Sqlite文件通常被复制到Documents目录,以便它们是可写的.但是,默认情况下,iOS会尝试将Documents目录中的所有文件复制或备份到iCloud(如果启用了iCloud备份).因此,根据Apple的指导原则,您可以执行以下操作,以便iCloud不会从您的Documents目录备份您的数据库文件.

您可以调用以下函数将"map.sqlite"的路径作为NSURL传递:

NSURL *url = [NSURL fileURLWithPath:yourSQLitePath];
[self addSkipBackupAttributeToItemAtURL:url];
Run Code Online (Sandbox Code Playgroud)

该功能在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;
}
Run Code Online (Sandbox Code Playgroud)

此功能可确保iCloud不备份文件(以URL提供).

您还可以将数据库文件放在Documents目录中的单独目录中,并通过调用此函数将整个子目录标记为"不备份".希望能帮助到你.