【问题标题】:App rejected for storing database in Documents directory应用程序因在 Documents 目录中存储数据库而被拒绝
【发布时间】:2023-03-24 15:22:01
【问题描述】:

我的应用最近因在 Documents 目录中存储数据而被应用商店拒绝。我把它移到那里是因为随着最新的变化,数据库现在必须是可写的——它不再是只读的。

在研究解决方案时,我了解到实际上最好使用 NSLibraryDirectory。是这样吗,更重要的是,这会解决苹果的担忧吗?他们的抱怨是该应用程序允许用户下载大量内容(除非您计算数据库,否则它不会让用户下载任何内容),并且它在“不正确的位置”存储了“太多数据”。数据为 8 mb,但最大可能增长到大约 10 或 12 mb。

【问题讨论】:

  • “这会解决 Apple 的担忧吗?” - 我认为只有 Apple 才能回答这个问题。
  • 是的,我希望有人遇到同样的问题。

标签: ios database app-store appstore-approval


【解决方案1】:

其实是因为 iCloud。

使用 iCloud,应用程序的文档目录会同步到云和其他设备,因此 Apple 希望开发人员仅将那些数据存储在他们想要与 iCloud 同步的文档目录中。

我是从在 Apple California 工作的一位朋友认识的,我不确定这些材料是否在 Apple 的文档中。

【讨论】:

    【解决方案2】:

    我在更新前一周开发的一套应用时遇到了这个问题。有趣的是,七个应用程序中只有五个(完全相同的代码库)被拒绝。

    我认为我的问题是将 .app 捆绑包中的资产复制到 ~/Documents 中。

    我第一次尝试遵守他们的新存储指南是在我复制到 ~/Documents 的文件上实现do not backup 开关。 没有处理,所以我不得不更改我的实现以完全不复制数据。这些应用程序立即获得批准。

    您的实现可能有所不同,但根据我的经验,Apple 不再喜欢您将应用程序包中的内容复制到 ~/Documents 中,因为这可能会不必要地复制数据(在他们看来)。

    他们建议复制到 ~/Caches(或其他任何内容),但这可以在存储空间不足的情况下清除,并且可能也不适合您的情况。

    希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      我一年前写的一个产品使用了 CoreData(带有 SQLite 数据存储)。此数据库文件存储在 ~/Library/Application Support//。这得到了 Apple 的批准,没有任何问题。

      “应用程序支持”在 ~/Library 中不存在,因此您需要创建它。

      Documents 不是存储数据库文件的好地方,原因有很多。苹果有他们的理由,因为他们拒绝了你的应用程序。另一个原因是用户可以访问 Documents 目录(通过 iTunes),除非用户删除你的数据库文件对你的应用程序的操作没有什么大不了的,否则最好把它放在他们不能用它做任何事情的地方直接和/或无意地。

      【讨论】:

      • 如果您的应用在 info.plist 中将 UIFileSharingEnabled 设置为 YES,则只有用户可以通过 iTunes 访问 Documents 目录,不是吗?
      • 是的,没错,感谢您的澄清。如果您没有启用它,那么它确实是不可访问的。我是从我最近开发的一个产品的角度来思考的。
      【解决方案4】:

      你仍然可以将这些文件放在 Documents 文件夹中,你只需要给它们一个属性,让文件系统知道不要将它们备份到 iCloud

      This 是一个很好的例子,说明如何在不同的 iOS 版本上这样做

      【讨论】:

        猜你喜欢
        • 2016-09-07
        • 2013-09-29
        • 1970-01-01
        • 1970-01-01
        • 2014-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-04
        相关资源
        最近更新 更多