2016-02-26 40 views
9

我的应用多次被应用商店拒绝,因为未遵循“iOS数据存储指南”。我已经标有“不备份”属性中的所有文件目录由苹果审查小组的建议,如下所示:iOS数据存储问题 - 即使在NSURLIsExcludedFromBackupKey后被拒绝

- (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; 
} 

我呼吁所有NSDocumentDirectory上述addSkipBackupAttributeToItemAtPath方法如下所示:

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

和审查小组表示,它仍在存储一些数据作为iCloud的备份,并且正在被Apple审查小组拒绝,实际上我不想要任何备份。 有什么我错过了跳过备份属性?或者我的代码中有什么错误?请帮忙。谢谢。

+1

我们只是得到了同样的拒绝像你一样,我们也对每个目录全面检查,以确保它们全都与NSURLIsExcludedFromBackupKey,手指交叉 – Bastet

+0

@芭丝特,有什么解决办法创造出来的? –

+0

我们的一些应用程序对此问题有所拒绝,尽管我们只发现了几个KB。我们基于我们的观察回复截图。一个被批准。其他人被拒绝,现在正在审查过程中重新提交此修改。 – Bastet

回答

3

将此代码写入addSkipBackupAttributeToPath方法。我遇到了同样的问题,并通过编写代码来解决问题。

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

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

+0

是的,使用NSCachesDirectory。也可以在模拟器中运行,查看除了您希望保存的内容之外是否还保存了任何数据。您可能忘记删除您之前在项目中使用过的一些代码。 –

0

即使我用“不备份”我的属性被存储在可下载的内容\ Documents目录,所以按照优先\文件内容将自动备份到iCloud。

Apple doc says

  1. 只有文件和其他数据是用户生成的,或不能 否则将您的应用程序重新创建,应存放在 /Documents目录和意志由iCloud自动备份。

    可以再次下载或再生
  2. 数据应该存储在 的/图书馆/缓存目录。 应放在Caches目录中的文件示例包括数据库缓存文件和 可下载内容,例如杂志,报纸和 地图应用程序使用的内容。

  3. 仅临时使用的数据应存储在 /tmp目录中。虽然这些文件不支持 直到iCloud,但请记住在完成 之后删除这些文件,以便它们不会继续消耗用户的 设备上的空间。

  4. 使用“不备份”属性指定应该 留在设备,即使在低存储文件的情况下。使用此属性 以及可以重新创建的数据,但需要保留即使在低存储情况下才能使应用正常运行,或者因为 客户希望在脱机使用期间可以使用该数据。该属性 适用于标记文件,不管它们在哪个目录中,包括Documents目录在内的 。这些文件不会被清除,并且 不会包含在用户的iCloud或iTunes备份中。由于 这些文件确实使用设备上的存储空间,因此您的应用需要负责 以定期监视和清除这些文件。