【问题标题】:iCloud + Storage of media in iPhone Documents folderiCloud + iPhone Documents 文件夹中的媒体存储
【发布时间】:2011-12-07 10:39:57
【问题描述】:

我和许多开发人员一样,最近收到了一封来自 Apple 的电子邮件,其中说我们应该将我们的数据从文档目录移动到另一个文件夹,以便更简化地备份到 iCloud。

在最近的测试中,[您的应用]似乎在其 Documents 文件夹中存储了大量数据。

由于 iCloud 备份每天通过 Wi-Fi 为每个用户的 iOS 设备,确保尽可能好的用户体验很重要 通过最大限度地减少您的应用存储的数据量。

Marco Arment,instapaper 的名气,对这个问题有很好的看法,即存储可下载文件的推荐位置是 /Library/Caches。然而,问题是 /tmp 和 /Caches 都可以在操作系统确定设备存储空间不足时被“清理”。如果您的应用程序被清理,那么您的应用程序下载并由您的用户存储的数据就会消失。自然,用户会责怪你而不是苹果。

怎么办?

【问题讨论】:

  • 是说你必须,还是说你应该考虑?如果您可以论证瞬态存储不是“最好的用户体验”,那么您也许可以合理地说“我们考虑过,但它不是一个好的用户体验”。
  • 我有一种感觉,应该很快就会变成必须。在接下来的几个月里,iCloud 备份将大量使用互联网带宽,也许比例很大。请记住,默认情况下,用户只能获得 5 gig 的存储空间。这就是为什么 Apple 热衷于让开发人员的应用程序只在 Documents 中包含重要数据。我只是希望他们能给我们创建一个非 iCloud 目录的选项,该目录也受到“清理”的保护。

标签: iphone ios icloud


【解决方案1】:

iOS 5.0.1 引入了一个标志来解决这个问题:

https://developer.apple.com/library/ios/#qa/qa1719/_index.html

他们的建议是在 /Library/ 中创建一个文件夹,例如 /Library/PrivateDocs ,然后将您的文件放在那里。但是,您还必须在它们上设置“不备份”标志,因为 /Library 中的每个文件,除了 /Library/Cache 或 tmp 中的文件默认情况下都会备份。使用以下命令在 PrivateDocs 文件夹上设置标志:

#include <sys/xattr.h>
- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
    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;
}

【讨论】:

  • 我很高兴在 5.0.1 中看到这一点,并选择了它作为正确答案。不要不同意以前的答案,这些答案在当时很好。只是这就是这样做的方法。
  • 该代码现已弃用。该 URL 仍然有效,您可以在其中找到 iOS 5.1 及更高版本的代码。
  • 这个方法用在什么地方?
【解决方案2】:

Library/Caches 可能是许多应用程序的好答案。尤其是当应用程序可以正常运行时,缓存数据丢失并且清除缓存也不会破坏用户可能选择缓存哪些数据以及可以从何处重新获取数据的所有记录。

对于具有不属于Caches 的数据的应用,请考虑Library/Application Support

http://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/FileSystemProgrammingGUide/FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW1

应用支持:

使用此目录存储所有应用程序数据文件,但与用户文档相关联的文件除外。例如,您可以使用此目录来存储应用程序创建的数据文件、配置文件、模板或其他由应用程序管理的固定或可修改资源。应用程序可能会使用此目录来存储最初包含在应用程序包中的资源的可修改副本。游戏可能会使用此目录来存储用户购买并从服务器下载的新关卡。

此目录中的所有内容都应放在一个自定义子目录中,该子目录的名称是您的应用程序的捆绑标识符或您的公司。

在 iOS 中,此目录的内容由 iTunes 备份。


不幸的是,Application Support 目录仍处于备份状态,属于 Apple 的新 data storage guidelines。根据审阅者选择的关于总备份文件大小的敏感程度,这可能仍会导致拒绝。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 2022-01-28
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多