do not back up IOS被拘处理

看到发的应用被拒了,还是很郁闷的,下图为证:


发过一些IOS项目,但没发过需要从服务器下载大数量文件的项目。  ios验证人员认为我的应用在icloud上存储了近20M ,在浪费用户空间,

对此我深表遗憾。


查阅资料,发现自己确实没搞懂IOS的存储规则,http://www.cocoachina.com/bbs/simple/?t86244.html  这篇博文(规范翻译)讲的非常细致,


关键数据
这些是用户创建的数据,或其它不能重新生成的数据。应该存放在<Application_Home>/Documents目录下,并且不应该标记为"do not backup"属性。关键数据在低存储空间时也会保留,而且会被iCloud或iTunes备份。

缓存数据
可以重新下载或生成的数据,而且没有这些数据也不会妨碍用户离线使用应用的功能。缓存数据应该保存在<Application_Home>/Library/Caches目录下。缓存数据在设备低存储空间时可能会被删除,iTunes或iCloud不会对其进行备份。

临时数据
应用需要写到本地存储,内部使用的临时数据,但不需要长期保留使用。临时数据应该保存在<Application_Home>/tmp目录。系统可能会清空该目录下的数据,iTunes或iCloud也不会对其进行备份。应用在不需要使用这些数据时,应该尽快地删除临时数据,以避免浪费用户的存储空间。

离线数据
可以下载,或重新创建,但用户希望在离线时也能访问这些数据。离线数据应该存放在<Application_Home>/Documents目录或<Application_Home>/Library/Private Documents目录,并标记为"do not backup"属性。这两个位置的数据在低存储空间时都会保留,而"do not backup"属性会阻止iTunes或iCloud备份。应用不再需要离线数据文件时,应该尽快删除,以避免浪费用户的存储空间


而我下载的文件就存在了关键数据中,并且没有标记属性,所以icloud如果开启备份的话,会将<Application_Home>/Documents全部备份。当然如果是IOS5.0.1,就算你标记了 ,还是会被自动备份。

所以如果你的应用要适配到5.0,甚至是4.3,就要做好适配方案。


我的处理是:

1.  5.0.1以上都保存在  <Application_Home>/Documents内,并标记为do not back up , 5.0.1以下均保存到<Application_Home>/Library/Caches目录

2.  对于重要文件,并且较小,均可保存在<Application_Home>/Documents内。


部分代码:

    if(function->isIosFiveUp()){

        CCLog("平台大于5.0");

        platformSavePath = CCFileUtils::sharedFileUtils()->getWritablePath();

    }else{

        CCLog("平台小于等于5.0");

        platformSavePath = function->getPlatformSavePath();

    }

添加do not back up标签:

    

const char* attrName = "com.apple.MobileBackup";
u_int8_t attrValue = 1;
setxattr(path.c_str(), attrName, &attrValue, sizeof(attrValue), 0, 0);   // 该方法在   #include <sys/xattr.h>   不必调用其它的

添加标签,切记该文件是刚创建成功,并且处在关闭状态 ,否则标记失败。





do not back up IOS被拘处理,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。