iOS数据存储问题 - 即使使用了NSURLIsExcludedFromBackupKey仍被拒绝

9

我的应用在多次提交后被苹果应用商店拒绝,原因是没有遵循“iOS数据存储指南”。我已经按照苹果审核团队建议的做法,将所有文档目录标记为“不备份”属性,如下所示:

- (BOOL)addSkipBackupAttributeToItemAtPath:(NSString *) filePathString
{
    NSURL* URL= [NSURL URLWithString:filePathString];

    NSError *error = nil;
    BOOL success = [URL setResourceValue: [NSNumber numberWithBool: YES]
                                  forKey: NSURLIsExcludedFromBackupKey error: &error];

    return success;
}

我已经调用了上述的addSkipBackupAttributeToItemAtPath方法,为所有的NSDocumentDirectory设置了如下内容:

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    [self addSkipBackupAttributeToItemAtPath:[paths objectAtIndex:0]];

审查团队表示它仍在将一些数据作为iCloud备份存储,并被苹果审查团队拒绝,实际上我不想要任何备份。我是否错过了跳过备份属性?或者我的代码有问题吗?请帮忙。谢谢。


1
我们刚刚收到了与您相同的拒绝,我们对每个目录进行了全面检查,以确保它们都使用了NSURLIsExcludedFromBackupKey创建,希望一切顺利。 - Mia
@Bastet,有什么解决方案吗? - Mumthezir VP
我们的一些应用程序在这个问题上被拒绝了,尽管我们只发现了少量的KB。我们根据我们的观察回复了屏幕截图。其中一个已经被批准了。其他的被拒绝了,现在正在重新提交进行审核。 - Mia
我们通过安装我们的应用程序并检查iCloud中的空间,使用一部新设备的影片来回应拒绝。第二天它就被批准了。 - Mia
1
最终,这是我的问题:可以重新下载或再生的数据应存储在<Application_Home>/Library/Caches目录中。应将放置在Caches目录中的文件示例包括数据库缓存文件和可下载内容,例如杂志、报纸和地图应用程序使用的内容。 - Mumthezir VP
3个回答

3

将以下代码写入addSkipBackupAttributeToPath方法中。我之前也遇到了同样的问题,但通过使用以下代码解决了该问题。

- (void)addSkipBackupAttributeToPath:(NSString*)path
{
   u_int8_t b = 1;
   setxattr([path fileSystemRepresentation], "com.apple.MobileBackup", &b, 1, 0, 0);
}

2
尝试使用NSCachesDirectory替代NSDocumentDirectory,以存储子文件夹/文件。

是的,请使用NSCachesDirectory。同时在模拟器中运行并查看是否保存了除您期望保存的数据之外的任何数据。您可能已经忘记删除一些代码,这些代码可能是您之前在项目中使用过的。 - Ruchira Randana

0
尽管我使用了“不备份”属性,但我仍将可下载内容存储在\文档目录中,因此根据优先级,\文档内容将自动备份到iCloud。

Apple doc says

只有用户生成的文档和其他数据,或者无法通过应用程序重新创建的数据,才应存储在“/Documents目录”中,并将自动备份到iCloud。
可以再次下载或重新生成的数据应存储在“/Library/Caches目录”中。应将数据库缓存文件和可下载内容(例如杂志、报纸和地图应用程序使用的内容)放入Caches目录中。
仅暂时使用的数据应存储在“/tmp目录”中。尽管这些文件不会备份到iCloud,但请记得在使用完毕后删除这些文件,以便它们不会继续占用用户设备上的空间。
对于需要保持在设备上的文件,即使在低存储情况下也需要持久存在的数据,请使用“不备份”属性。将此属性与可以重新创建但需要在低存储情况下持久存在以确保您的应用程序正常运行或因为客户希望在离线使用期间可用的数据一起使用。该属性适用于标记文件,无论它们位于哪个目录中,包括Documents目录。这些文件不会被清除,也不会包含在用户的iCloud或iTunes备份中。由于这些文件确实使用了设备上的存储空间,因此您的应用程序负责定期监视和清除这些文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接