我和许多开发人员一样,最近收到了Apple的一封电子邮件,声称我们应该将文档目录中的数据移动到另一个文件夹中,以便更加简化备份到iCloud。
instapaper成名的在最近的测试中,似乎[您的应用]在其“文档”文件夹中存储了大量数据。
由于每天都通过Wi-Fi为每个用户执行iCloud备份 iOS设备,确保最佳用户体验非常重要 通过最小化应用程序存储的数据量。
Marco Arment很好地解决了这个问题,即存储可下载文件的推荐位置在/ Library / Caches中。但问题是,只要操作系统确定设备的存储空间不足,就可以“清除”/ tmp和/ Caches。如果您的应用已清除,则您的应用下载并由您的用户存储的数据将会消失。当然,用户会责怪你而不是苹果。
怎么办?
答案 0 :(得分:15)
iOS 5.0.1引入了一个标志来解决这个问题:
https://developer.apple.com/library/ios/#qa/qa1719/_index.html
他们建议在/ Library / like / 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;
}
答案 1 :(得分:3)
Library/Caches
可能是一个很好的答案。特别是当应用程序正常工作时,缓存数据会丢失,清除缓存也不会破坏用户可能选择缓存的数据的所有记录以及可以从中重新获取的数据。
对于数据不属于Caches
的应用考虑Library/Application Support
。
应用支持:
使用此目录存储除与用户文档关联的文件以外的所有应用程序数据文件。例如,您可以使用此目录存储应用程序创建的数据文件,配置文件,模板或由应用程序管理的其他固定或可修改资源。应用程序可能使用此目录来存储最初包含在应用程序包中的可修改资源副本。游戏可能会使用此目录存储用户购买并从服务器下载的新级别。
此目录中的所有内容都应放在自定义子目录中,该子目录的名称是应用程序的包标识符或公司的名称。
在iOS中,此目录的内容由iTunes备份。
不幸的是,Application Support目录仍然备份,属于Apple的新data storage guidelines。根据审核者对总备份文件大小的敏感程度,这可能仍会导致拒绝。