可以将下载的图像/文件添加到我的应用包中吗?

我有一个应用程序,允许我下载字符(图像),声音等。当用户选择下载哪个字符时,我可以将其存储在我的应用程序包中的目录中? 如果没有,哪里是存储我的内容(数据)的最佳位置? 我正在考虑文档目录,但后来我看到Apple现在想要将数据存储在caches目录中。

谢谢您的帮助。

我可以将它存储在我的App Bundle中的目录中吗?

不,您无法修改应用包。

如果没有,哪里是存储我的内容(数据)的最佳位置?

  • 如果您的应用必须支持iOS 5.0或更早版本,则需要将应用数据存储在Caches目录中。 但是,请记住,在低空间情况下可以删除文件,因此如果您的应用数据被删除,您的应用将需要优雅地降级。

  • 从iOS 5.0.1开始,您可以将数据文件存储在文档目录中,并将其标记为“不备份” 。 通过标记文件,您的应用程序符合指南,即应用程序负责确保仅将用户数据而非应用程序数据备份到iCloud和iTunes,并避免Apple可能拒绝。 在这种情况下,在低空间情况下不会删除文件。

  • 从iOS 5.1开始,您可以将数据文件存储在文档目录中,并使用NSURLIsExcludedFromBackupKeykCFURLIsExcludedFromBackupKey文件属性从备份中排除文件。 这些API中的任何一个都优先于将它们标记为“不备份”。 在这种情况下,您的应用程序符合App Store指南,并且在低空间情况下不会删除这些文件。

我知道这是一个相当长的讨论,但你应该阅读它。 🙂

iOS数据存储指南声明:

为确保备份尽可能高效,请务必按照以下准则存储应用程序的数据:

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

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

  3. 临时使用的数据应存储在/ tmp目录中。 虽然这些文件没有备份到iCloud,但请记住在完成这些文件后删除它们,以免它们继续消耗用户设备上的空间。


如果您有OS X或Unix背景,那么很容易理解Apple的立场,即这些目录无法保证其中的数据将持续多长时间。

应用程序沙箱中的tmp目录与root / tmp目录不同的事实不应该对您对此目录的看法产生影响。

如果您以前从未观察过从这些目录中删除过的文件,那么这并不能保证它将来不会发生变化。 特别是当更改符合文档时。 这是一般规则。


Apple文档中的更改/差距:

截至2011年6月29日,Apple关于/ Documents的文档说:

使用此目录存储用户文档和应用程序数据文件。

这很清楚。 难怪开发人员不满意在没有任何合适的替代方案的情况下,iOS 5中的Documents目录的规则已经发生了变化。

关于/图书馆/缓存:

使用此目录编写要在应用程序启动之间或应用程序更新期间保留的任何特定于应用程序的支持文件。 您的应用程序通常负责添加和删除这些文件。 它还应该能够根据需要重新创建这些文件,因为iTunes会在完全恢复设备期间删除它们。


应用评论拒绝

开发人员报告说,App Review会拒绝在Documents目录中存储任何/部分/多数据的应用程序。

App Review团队不太可能详细了解哪些文件存储在哪个目录中,哪些文件是用户生成的,而不是可以重新下载或重新生成的数据。 一些开发人员已经报告成功回应了App Review团队,并解释了他们的应用程序如何存储数据以及这是如何符合规则的。

iTunes和iCloud正在备份什么

应用程序主目录中的所有内容都会备份,但以下情况除外:

  • 应用包本身(.app)
  • / tmp目录
  • / Library / Caches目录

其他文档明确指出应用程序支持目录也由iTunes(可能是iCloud)备份。 在讨论中,一些开发人员建议Application Application目录比Caches更安全(=更永久)。 对我而言,App Review似乎会以与文档目录相同的热情打击存储在Application Support中的大量数据,因为它完全与iCloud存储有关。

iOS 5中的行为更改

从iOS 5开始,如果设备遇到磁盘空间不足警告,则可能会在应用程序未运行时清除/ Library / Caches。

您的应用程序不再存储以下文件的目录:

  • 没有备份到iTunes / iCloud
  • 没有被清除的风险

根据Apple的指南,下载的内容不应存储在Documents目录中:

 Only documents and other data that is user-generated, or that cannot otherwise be recreated by your application, should be stored in the /Documents 

请改用/ Library / Caches目录

 Data that is used only temporarily should be stored in the /tmp directory.