应用程序拒绝在Documents目录中存储数据库

我的应用程序最近被拒绝从应用程序商店存储在Documents目录中的数据。 我已经把它移到了那里,因为最新的变化,db现在必须是可写的 – 它不再是只读的。

在研究解决scheme时,我读过使用NSLibraryDirectory实际上最好。 这是否如此,更重要的是,这是否会解决苹果的担忧? 他们的抱怨是,该应用程序让用户下载到很多内容(它不会让用户下载任何数据,除非你数据库),并且在“不正确的位置”存储“太多的数据”。 数据是8 MB,但可能增长到大约10或12 MB最大。

其实它是因为iCloud。

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

我开始认识这个forms,他是我在加利福尼亚州苹果公司工作的朋友之一,我不确定这些材料是否在苹果的文档上。

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

我认为这个问题在我的情况是从.app包复制资产到〜/ Documents。

我第一次尝试遵守他们的新存储准则是为了实现对我正在复制到〜/ Documents中的文件do not backup切换。 没有处理,所以我不得不改变我的执行不复制数据。 这些应用程序被及时批准。

你的实现可能是不同的,但根据我的经验,苹果不再喜欢你将应用程序包中的东西复制到〜/ Documents中,因为它可能会不必要地复制数据(在他们看来)。

他们build议复制到〜/caching(或其他),但这可以在低存储情况下被清除,并且可能不适合您的情况。

希望有所帮助。

我一年前写的产品使用CoreData(带有SQLite数据存储)。 这个数据库文件存储在〜/ Library / Application Support //中。 这是苹果没有批准的问题。

〜/ Library中不存在“应用程序支持”,所以您需要创build它。

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

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

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