【发布时间】:2012-07-07 12:24:17
【问题描述】:
由于涉嫌违反 iCloud 数据存储指南,我最近拒绝对我的一个应用进行重大错误修复更新。
以下是我的应用程序存储数据的方式(自 2009 年我的应用程序的第一个版本获得批准以来,这一直不是问题):
- 在启动时,它会将“starter”SQLite3 数据库从应用程序包复制到 Documents 文件夹。
- 数据库包含基本架构和一些示例数据,因此用户可以了解如何使用该应用程序。它很小 - 不到 3MB。
- 然后,用户未来的工作将仅保存在此数据库文件中。他们可能会删除或保留样本,可能会添加大量自己的数据,但该数据库文件将始终存在。
今年早些时候的一次更新因为同样的原因被拒绝了,但是当我给他们上面的解释时,应用程序状态从“拒绝”变为“审查中”再到“正在处理 App Store”。他们没有给我任何解释,所以我认为这只是审稿人的误解。
这一次,审阅者对我的解释作出了回应,只是说非用户生成的数据不应存储在 iCloud 中,我的更新仍处于“拒绝”状态。
但我不明白我应该在这里做什么。因为所有用户的工作都保存在数据库中,所以我不能将其从 iCloud 备份中排除或将其存储在缓存文件夹中。此外,我无法真正将“用户生成”数据与“非用户生成”数据完全分开,因为该应用程序使用同一个数据库文件。初始的、非用户生成的数据将很快被用户自己的数据替换,但数据库的文件名和目录位置将保持不变。
即使数据库中没有示例数据,任何由数据库支持的应用程序在启动时仍必须生成一个空数据库 - 即使它唯一保存的是应用程序的数据库架构。
这一定是一个很常见的问题,但不幸的是,我不能只关闭备份——用户在他们存储在我的应用程序中的数据上投入了大量工作,而 iCloud 备份对他们来说非常重要。
此时我有什么选择?这是我能看到的:
再次联系 Apple 并尝试解释发生了什么。
我能否将文件的备份属性设置为 NO,然后仅在用户进行第一次更改时才将其切换为 YES?这在技术上是否可行,对 Apple 是否可行?
从数据库中删除我的示例数据。这对可用性真的很不利,并且会增加我的支持负担,但如果它能让我的更新获得批准,我愿意这样做。但是,我仍然需要在启动时创建一个存根数据库来保存空的数据库架构,所以我不确定这是否会对审批流程产生影响。
哭泣。
有人有什么建议吗?我不得不想象有很多其他应用程序使用数据库的方式与我的方式相同,但没有仅禁用备份的选项。
同样令人沮丧的是,我所做的任何更改都需要另一轮测试和应用审查,这将使我的关键更新延迟 2 到 3 周。 :/
更新:可能还有另一种选择:我可以简单地将文件保存在Library/ 而不是Documents/,因为他们的问题似乎与使用 Documents 文件夹有关吗?如果文件存储在Library/,是否会备份文件?
更新 2:我发现最令人困惑的是任何数据库支持的应用程序(即使它使用 Core Data,我假设)都必须创建一个至少包含应用程序架构的数据库文件.问题只是我的数据库太大了吗?因为我看不出任何支持数据库的应用程序如何避免在启动时创建数据库。
更新 3:我使用的是自定义 SQLite 交互层 - 而不是 Core Data。此外,示例数据包含初始图像,用户在开始使用应用程序时可能最终会删除这些图像。
【问题讨论】:
-
只是想让你知道你可以使用developer.apple.com/appstore/contact/appreviewteam/index.html 我们最近用它来修复一个严重的错误,我们的应用会在 1 天内得到审核!!
-
“审阅者回应了我的解释,只是说非用户生成的数据不应该存储在 iCloud 中”我们的应用出于同样的原因被拒绝了一次。内容不是应用程序生成的,而是可下载的,我们将其从文档移动到缓存文件夹
-
我可能会选择选项 2。
-
@MSK,不幸的是,整个应用程序设计为使用一个 SQLite 数据库 - 将示例移动到 Caches 文件夹中需要大量的特殊情况和重写才能让应用程序同时读取缓存中的示例,然后将更改保存到文档...
-
3MB 的示例数据似乎很多,您是否在数据库中存储了任何图像?