IOS 5 存储指南

Posted

技术标签:

【中文标题】IOS 5 存储指南【英文标题】:IOS 5 Storage Guidelines 【发布时间】:2011-12-04 07:48:24 【问题描述】:

我已经开发了 iPhone 应用程序,其中包含一个 80MB 音频文件和 20MB 图像在应用程序包中。我接到一个来自苹果的电话,说要更新我的应用程序以遵循 ios5 存储指南,否则我的应用程序将停止销售。 我已阅读 ,该指南根据应用要求将数据保存在三个不同的位置:-

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

    李>

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

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

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

所以由于应用程序包不是 icloud 上的备份。那么我需要将我的所有音频文件从应用程序包移动到文档目录或缓存吗?

期待您的好评。

【问题讨论】:

只是想添加一个指向App Backup Best Practices的链接 【参考方案1】:

您的应用是应用程序包。没有它,您的应用程序就不存在。将这些文件复制到其他地方是没有用的,因为它们会占用两次存储空间。

它没有备份到 iCloud,因为应用程序包可以简单地从 Appstore 服务器再次下载。所以它会占用 iCloud 备份空间而没有用处。应用程序包是“公共数据”,在所有设备上都是相同的,因为它无法更改。

我认为苹果在谈论其他事情。

【讨论】:

Apple确实谈论了其他事情:关于您的应用在运行时创建的文件(例如,通过使用[NSData writeToFile:atomically:]open 或其他方式)。跨度> @DarkDust 我已根据 IOS 5 存储指南提出申请。将所有内容放入文档文件夹并标记“没有属性”。但是我已经阅读了苹果的其他指南,您需要为您的应用程序支持的所有版本的 IOS 编译您的应用程序。那么对于 5.0.1 版本,我需要对我的代码进行哪些更改?我可以将我的所有文件放在documnet文件夹中还是缓存中? 如果您遵守 iOS 5 iCloud 指南关于存储文档的位置/方式,那么您也适用于 iOS 【参考方案2】:

您应该将文件保存在带有 DO NOT BACKUP 标志的文档目录下的 private_Document 文件夹中...如果您将此标志应用于任何文件夹,那么它将不会备份。

(BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL 
    NSLog(@"in add skipBackUpAtrribute method.......");
    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;

【讨论】:

【参考方案3】:

你必须使用NSCachesDirectory。我正在发布和更新我的一个客户应用程序,我们将报纸存储在 Documents 目录中。

从 iOS5 及更高版本开始,此文件夹严格保留给用户自行创建的文档。这是一团糟,因为您无法备份重要文件。允许下载您的应用运行所需的产品、文件或工件是您的责任...

【讨论】:

感谢巴勃罗的回复。我已经更改了我的代码并包含了条件,例如设备 OD 版本是否为 5.0.1 或更高版本我正在使用“不备份”将我的数据保存在 NSDocumnentDirectory() 上,如果版本为 正确。一旦我更改了应用程序中的文件夹,Apple 就会验证更新。如果您觉得有用,请检查答案是否有效:) 您可能还想实现一个小功能,将保存到文档中的所有内容移动到缓存中。

以上是关于IOS 5 存储指南的主要内容,如果未能解决你的问题,请参考以下文章

核心数据和 iOS 数据存储指南

添加 NSURLIsExcludedFromBackupKey 属性后的 iOS 数据存储指南

我应该遵循 iOS 数据存储指南吗?

IOS 应用被拒绝:2.23 - 应用必须遵循 iOS 数据存储指南

由于 iOS 数据存储指南问题,我的应用拒绝了 Appstore

应用程序因未遵循 iOS 数据存储指南而被拒绝