数据存储指南导致的iOS App拒绝

时间:2016-04-27 06:35:08

标签: ios objective-c iphone core-data icloud

  

2.23详细信息

     

在发布和内容下载时,您的应用会在用户上存储6.32MB   iCloud,不符合iOS数据存储指南。

     

后续步骤

     

请仅验证用户使用您创建的内容   应用程序,例如,文档,新文件,编辑等由iCloud支持   iOS数据存储指南要求。另外,检查一下   您的应用使用的临时文件仅存储在/ tmp中   目录;请记得删除或删除存储的文件   当确定不再需要它们时,这个位置。

     

可以重新创建但必须保持正常运行的数据   您的应用 - 或者因为用户希望它可供离线使用    - 应标有"不要备份"属性。对于NSURL对象,添加NSURLIsExcludedFromBackupKey属性以防止   备份相应的文件。对于CFURLRef对象,请使用   对应的kCRUFLIsExcludedFromBackupKey属性。

     

资源

     

要检查应用存储的数据量:

- Install and launch your app
- Go to Settings > iCloud > Storage > Manage Storage
- Select your device
- If necessary, tap "Show all apps"
- Check your app's storage
     

有关阻止备份文件的其他信息   iCloud和iTunes,请参阅Technical Q& A 1719:如何阻止文件   正在备份到iCloud和iTunes。

     

如果您无法复制报告的问题,请尝试   测试技术Q& A QA1764:如何操作中描述的工作流程   重现针对App Store提交的错误报告。

我在互联网上搜索了很多这个问题。似乎现在很多人都遇到过这个问题。

按照他们的技术Q& A 1719链接:如何阻止文件备份到iCloud和iTunes。我设置为是NSURLIsExcludedFromBackupKey以防止备份我的CoreData模型,因为我唯一存储在应用程序的/ Documents /中。

另一个额外的事情是,我没有在我的应用程序中启用CoreData,当我转到设置> iCloud>存储>管理存储我没有看到我的应用程序。我只看到TextEdit,我认为唯一使用iCloud的应用程序。我只在设置>下看到我的应用一般>存储& iCloud用法>管理存储(但存储部分,而不是iCloud)>在那里,我看到下面的文件&数据我使用800Kb而不是6.32Mb(但显然与使用该应用程序一样,下载和存储的次数越多)。

我的应用程序没有从互联网上下载任何图像,因此需要成为使用此空间的数据库。除了CoreData之外,我使用AFNetworking和其他框架来显示HUD并在特定视图中制作Excel表,但没有一个下载的东西,所以我99%确定CoreData模型正在使用该空间。

在将该键设置为true后,我又发送了一个应用程序但答案是相同的,具有相同数量的Mb(外接...)因为为了实现下载的Mb量,用户应该浏览应用程序并且我不认为不同的测试人员会输入完全相同的视图和选项。问题是,他们回答我无法发布我的应用程序。

还有什么我可以做的吗?因为我想存储应用从互联网上下载的内容,以便将其用于离线模式,并避免一直向服务器发出请求。

有什么建议吗?

提前致谢。

3 个答案:

答案 0 :(得分:1)

如果您不需要备份CoreData商店,即它只包含可以再次下载的信息,并且不包含任何用户内容或设置,那么,我建议您将CoreData存储放在应用程序的缓存目录中而不是文档目录中。缓存文件夹的内容不会备份到iCloud。

将CoreData存储放在Documents文件夹中时,根据您的设置,它可能会创建其他文件(二进制文件,日志文件等),这些文件可能会变得非常大。在主要商店中应用NSURLIsExcludedFromBackupKey标记,不会影响这些附加文件,因此您仍然会被拒绝。

如果您在CoreData中存储了一些用户数据或设置,那么您可能需要备份它。您可以查看使用CoreData配置。这将允许您拆分CoreData存储,以便可以备份用户信息,而不会下载数据。

答案 1 :(得分:0)

几周前我也遇到了这个错误。使用下面的代码,你将摆脱这个问题。并在info.plist中添加“NSURLIsExcludedFromBackupKey”并将其值设置为“YES”。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
NSArray *documents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:basePath error:nil];
NSURL *URL;
NSString *completeFilePath;
for (NSString *file in documents) {
    completeFilePath = [NSString stringWithFormat:@"%@/%@", basePath, file];
    URL = [NSURL fileURLWithPath:completeFilePath];
    NSLog(@"File %@  is excluded from backup %@", file, [URL resourceValuesForKeys:[NSArray arrayWithObject:NSURLIsExcludedFromBackupKey] error:nil]);
    [URL resourceValuesForKeys:[NSArray arrayWithObject:NSURLIsExcludedFromBackupKey] error:nil];
}


return YES;
}

我通过这样做摆脱了这个问题。我的应用程序在应用商店

上被接受

答案 2 :(得分:-1)

我在Binary Rejected once again. How to do?回答了类似的问题。我也在这里发布相同的答案。

您错误地使用了iCloud。 Apple见到这一点:https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/iCloud.html

  

尊重用户的iCloud空间。重要的是要记住,iCloud是用户付费的有限资源。您应该使用iCloud存储用户创建和理解的信息,并避免使用它来存储您可以重新生成的应用程序资源或内容。另请注意,当用户的iCloud帐户处于活动状态时,iCloud会自动备份应用程序的Documents文件夹中的内容。为了避免占用太多的用户空间,最好对你放在Documents文件夹中的内容挑剔。

使用最少量的iCloud空间,避免使用iCloud存储资源和其他可以在iCloud空间中重现的数据。