我的iPhone应用程序由于这个原因被拒绝了“我们发现你的应用程序不遵循iOS数据存储指南…”

我的iPhone应用程序最近被拒绝,并提到下面的原因:

“我们发现您的应用不符合iOS数据存储指南,这不符合App Store评论指南。”

对于这个应用程序,我将数据库(sqlite文件)存储在iOS 5.0.1及以上版本的/ Documents /目录中,并且对于iOS 5.0及以下版本,我使用了Library / Cache目录。

对于从服务器上下载的其他数据,如PDF和艺术作品图像,我采用了与上面相同的方法,如: iOS 5.0.1&Later:将这些数据保存到/ Documents /目录iOS 5.0及更早版本:将数据保存到Library / Cache目录。

这种方法是否正确?

根据苹果指导原则: 重要提示 :新的“不备份”属性仅适用于iOS 5.0.1或更高版本。 在iOS 5.0及更早版本中,应用程序需要将其数据存储在/ Library / Caches中以避免备份。 由于此属性在旧系统上被忽略,因此您需要确保您的应用程序符合应用程序支持的所有iOS版本的iOS数据存储指南。

对于为iOS 5.0.1和更高版本存储的数据,“备份”属性也非常困惑。 我需要分配这个标志的文件? 我可以使用它的数据库?

需要摆脱这种拒绝,因为它发生了两次。 请提供一些存储我的应用程序的数据的指导。 提前致谢。 期待积极的回应。

检查https://developer.apple.com/icloud/documentation/data-storage/

特别:

使用此属性的数据可以重新创build,但即使在低存储情况下也需要保持正常运行您的应用程序,或者因为客户希望在脱机使用期间可以使用该数据。 该属性适用于标记的文件,而不pipe它们在哪个目录中,包括Documents目录。

将SQLite数据库存储在caching文件夹中,并设置donotbackup标志,这将停止caching清理系统所删除的文件

- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL { const char* filePath = [[URL path] fileSystemRepresentation]; const char* attrName = "com.apple.MobileBackup"; u_int8_t attrValue = 1; int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0); return result == 0; } 

我在我的应用程序中使用数据库,并将其存储在caching文件夹(具有上述标志设置),并获得批准没有问题。

此外,您可以将数据存储在文档目录的子文件夹中,我相信这些文件夹不会被备份,但会持续存在。

我的一个朋友有同样的问题。 基本问题是您可能会在应用程序文档目录中存储大量数据。

在Apple实现iCloud之后,Document目录数据与iCloud Storage有某种关系。 因此,苹果现在拒绝在文档目录中使用大量数据存储的应用程序。

您需要将数据存储在其他位置。 将PDF和其他graphics文件存储在其他位置。

这个链接可以帮助你。

http://www.techotopia.com/index.php/Working_with_Directories_on_iOS_4_%28iPhone%29

我希望它能解决你的问题。

为了解决您的应用程序被Apple拒绝的应用程序不符合iOS数据存储指南,请在您的应用程序中添加以下代码。

  - (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL { if (&NSURLIsExcludedFromBackupKey == nil) { // iOS <= 5.0.1 const char* filePath = [[URL path] fileSystemRepresentation]; const char* attrName = "com.apple.MobileBackup"; u_int8_t attrValue = 1; int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0); return result == 0; } else { // iOS >= 5.1 NSError *error = nil; // if you set YES in Resources value then iTune will not backup that file or folder. // You set FALSE in Resources value then iTune will backup that file or folder. [URL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&error]; return error == nil; } } 

使用这个方法(例子)

 NSString *defaultDBPath = [[NSBundle mainBundle] pathForResource:@"CDTDatabaseNew" ofType:@"sqlite"]; success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error]; NSURL *guidesURL = [NSURL fileURLWithPath:dbPath]; [self addSkipBackupAttributeToItemAtURL:guidesURL]; 

在文档目录中创build或复制文件时,必须使用此方法。

注意: – 苹果公司已经改变了数据存储指南,如果你正在存储任何文件目录,那么你必须正确的上述代码,不要错过这部分代码。

如果您没有放置该代码,应用程序将被拒绝。 所以现在,每当创build数据库,将caching的图像等存储在文档目录中时,每个人都必须添加这些代码。 希望下一次开始,我不会因为这个原因而拒绝应用程序。