由于未遵循iOS数据存储指南,应用程序被拒绝

时间:2012-01-11 11:00:39

标签: iphone ios appstore-approval

我们将数据存储到应用程序的Document目录中,我们拒绝了应用程序。我们尝试使用“不备份”属性将数据存储在当前版本中,代码如下。

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

}

我们已根据iOS数据存储指南使用它。

在早期版本中,我们还尝试将数据存储在Private目录中。但是,我们无法获得申请批准。

您能否就我们无法获得申请批准的原因向您提供更多说明?或者,我们还需要有关数据存储的代码的任何其他更改?所以,我们可以获得批准,我们在iTunes上有新版本的应用程序。

2 个答案:

答案 0 :(得分:6)

我认为@ Jasarien的评论是正确的答案,但没有进一步的通讯,这个问题相对较新,所以我会扩展。

让其他人看到你的拒绝:

  

iOS数据存储指南指定:

     
      
  1. 只有用户生成的文档和其他数据,或者应用程序无法重新创建的文档和其他数据应存储在/ Documents目录中,并由iCloud自动备份。

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

  4.   
  5. 仅临时使用的数据应存储在/ tmp目录中。虽然这些文件没有备份到iCloud,但请记住在完成这些文件后删除这些文件,这样他们就不会继续占用用户设备上的空间。

  6.   
  7. 使用“不备份”属性指定应保留在设备上的文件,即使在低存储情况下也是如此。将此属性与可以重新创建的数据一起使用,但即使在低存储情况下也需要保留,以使应用程序正常运行,或者因为客户希望在脱机使用期间可以使用该数据。此属性适用于标记文件,无论它们位于何种目录中,包括Documents目录。这些文件不会被清除,也不会包含在用户的iCloud或iTunes备份中。由于这些文件确实使用设备上的存储空间,因此您的应用程序负责定期监视和清除这些文件。“

  8.         

    例如,只有用户使用您的应用创建的内容(例如文档,新文件,编辑等)可以存储在/ Documents目录中 - 并由iCloud备份。

         

    您的应用使用的临时文件只应存储在/ tmp目录中;请记得在用户退出应用程序时删除存储在此位置的文件。

         

    可以重新创建但必须保持应用程序正常运行的数据 - 或者因为客户希望它可供脱机使用 - 应标记为“不备份”属性。有关详细信息,请参阅技术问答1719:如何防止文件备份到iCloud和iTunes?

所以我明白为什么你会使用“不要备份”并期望符合规定,但我认为像@Jasarien所说的那样 - 它们意味着你要转移到更多离散的目录,如缓存或临时。

事实上,肯定会通过审核的是切换到核心数据并使用内部SQLite - 但这可能太多了。

所以结束 - 关于如何保存到缓存或tmp的帖子 - Where to save files in iOS 5 applications? (实际上,也许这完全是那个......: - /)

GL! 乌迪德

- 编辑 -

另一个好帖子: https://stackoverflow.com/questions/8164868/ios-data-storage-guidelines-available-since-when

- 编辑#2 -

另一个好帖子: iOS 5 does not allow to store downloaded data in Documents directory?

猜猜我应该只是指出重复......:)

答案 1 :(得分:0)

查看此链接http://developer.apple.com/library/ios/#qa/qa1719/_index.html#//apple_ref/doc/uid/DTS40011342 您使用的代码兼容5.0.1而不是5.1及更高版本。您必须使用Cache for< = 5.0。但更好的解决方案是部署5.1及更高版本而不是5.0,因为如果你有大量数据,很可能很快就会清除缓存。希望它有所帮助。