do not back up IOS被拘处理
2014-08-13 16:42
253 查看
看到发的应用被拒了,还是很郁闷的,下图为证:
![](https://img-blog.csdn.net/20140813161711843?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVpenVpc2h1YWkyMDEzMTQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
发过一些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> 不必调用其它的
添加标签,切记该文件是刚创建成功,并且处在关闭状态 ,否则标记失败。
发过一些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 Data Storage Guidelines 和 "do not back up"文件属性
- iOS Data Storage Guidelines 和 "do not back up"文件属性
- iOS Data Storage Guidelines 和 "do not back up"文件属性
- "do not back up"文件夹属性
- 磁性温柔的旋律:美国流行摇滚乐队puddle of mudd 最新主打we do not have to look back now
- SCAN VIP/Listener do not fail back after public network recovered
- Keeping, but not backng up, downloaded data in iOS5
- hot to do source safe back up
- booktabs rules donot show up
- ReadOnly Controls do not post back properly
- Why I donot give up cnblogs for Jianshu
- psi and index do not match
- svn报错cleanup failed–previous operation has not finished; run cleanup if it was interrupted的解决办法
- Oracle 11g RAC INS-06006 Passwordless SSH connectivity not set up between the following node(s)
- 0821-069 ping: sendto: The file access permissions do not allow the specified action.
- use this as the default and do not ask again
- Android问题-“signaturs do not match the previously installed version”
- 11gr2 RAC INS-06006 Passwordless SSH connectivity not set up between the following node(s) 解决方法
- 解决 maps to localhost, but this does not map back to the address