由于2.23版iOS应用拒绝 – iOS数据存储指南

这是苹果关于拒绝的消息:

2.23 – 应用程序必须遵循iOS数据存储指南,否则将被拒绝2.23详情

在启动和内容下载时,您的应用程序将存储6.5 MB,不符合iOS数据存储指南。

下一步

请确认只有用户使用您的应用程序创build的内容(如文档,新文件,编辑等)由iCloud根据iOS数据存储指南的要求进行备份。 此外,请检查您的应用程序使用的任何临时文件只存储在/ tmp目录; 请记住删除或删除存储在这个位置的文件,当它被确定不再需要时。

可以重新创build的数据必须持续保持应用程序正常运行,或者因为用户希望可以离线使用,则应该标记为“不备份”属性。 对于NSURL对象,请添加NSURLIsExcludedFromBackupKey属性以防止备份相应的文件。 对于CFURLRef对象,使用相应的kCRUFLIsExcludedFromBackupKey属性。

我检查了我的应用程序的数据文件都为设备和模拟器。 我发现,如果应用程序已经使用了一段时间,它的总应用程序数据可以存储5-6 MB,在启动时。 但我卸载并重新安装的应用程序,再次检查,我看到约3MB的数据存储启动应用程序。

我不存储任何核心数据数据库或任何其他数据库文件。 但是我意识到, Google Analytics和Google跟踪代码pipe理器会在此path上存储一些sqlite数据:“AppData / Library”。 我的意思是它不存储在这个path:“AppData / Library / Caches”。 iOS数据存储指南有什么不同?

顺便说一下,应用程序禁用iCloud

此外,我正在使用SDWebImage下载图像,它在启动时存储了几乎3 MB的图像,并在此path上存储图像数据:“AppData / Library / Caches”

你有什么想法,我该怎么做才能解决这个问题?

我昨天也收到了同样的拒绝信息。

我在application:didFinishLaunchingWithOptions:使用了以下代码application:didFinishLaunchingWithOptions:查看我的应用程序在文档文件夹中的内容以及每个项目关于iCloud备份的权限:

 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]); } 

我在那个文件夹里面有一些与iCloud同步的文件。 因此,不是将这些文件保存在其他位置,而是将NSURLIsExcludedFromBackupKey项的资源值设置为YES以排除由iCloud备份的文件,如下所示:

 NSURL *URL = [NSURL fileURLWithPath:photoPath]; [URL setResourceValue:@(YES) forKey:NSURLIsExcludedFromBackupKey error:nil]; 

我今天再次发送我的应用程序,看看是否有用。

希望这个帮助。

最近,我们被苹果审查小组拒绝了同样的问题,

在启动和内容下载时,您的应用程序在用户的iCloud上存储9.65MB,不符合iOS数据存储指南。

他们build议遵循上述问题中提到的相同的后续步骤

在我们的例子中, 我们已经在下载内容时在代码中设置了NSURLIsExcludedFromBackupKey 。 我们通知审核小组,我们已经这样做了,所以他们将我们redirect到Apple开发者技术支持(DTS),以更好地解决这个问题。

DTS回复说,这是我们的AppIcon文件引起的问题。

AppIcons正在iCloud中进行备份,因为Apple需要在应用下载时在设备上显示图标。 事实certificate,我们的应用程序的AppIcons文件是如此之大,造成的拒绝,因为它备份了大量的数据到iCloud。 App Review小组没有清楚地告知我们,因为其中有些人不知道跟踪AppIcons的新工具变化。

现在我们知道了原因,我们使用ImageOptim优化了图标,并将大小最小化为 75KB。

我们提交了我们的应用程序,希望它会在1至2天内获得批准。 🙂

我希望这可以帮助有同样问题的人。 🙂

最近也遇到了同样的问题,只是把Glauco的答案翻译成了Swift(尽pipe它可能会写得更快)

 let directories = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true) if let documentDirectory = directories.first { do { let documents = try NSFileManager.defaultManager().contentsOfDirectoryAtPath(documentDirectory) for files in documents { let urlForm = NSURL.fileURLWithPath(documentDirectory + "/" + files) do { try print("\(files): \(urlForm.resourceValuesForKeys([NSURLIsExcludedFromBackupKey]))") } catch { print("can't find key") } } } catch { print("can't retrieve contents") } } 

编码到setResourceValue

 let urlToExclude = NSURL.fileURLWithPath(quoteSavePath!) do { try urlToExclude.setResourceValue(NSNumber(bool: true), forKey: NSURLIsExcludedFromBackupKey) } catch { print("failed to set resource value") }