由于升级导致的应用崩溃可能的原因:
1. 老版App沙盒中的数据文件被新版App直接取用可能会因为版本更新修改的一些业务逻辑或者实现方式不同,从而出现数组越界字典取涳值等问题导致程序崩溃。
2. 很容易忽视的一个问题是:苹果自带的 iClound 会自动备份沙盒中“Documents”文件夹
忘记应用沙盒结构的猿们请看下边文字:
* Documents:保存应?运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录。例如,游戏应用可将游戏存档保存在该目录
* tmp:保存应?运行时所需的临時数据,使?完毕后再将相应的文件从该目录删除应用没有运行时,系统也可能会清除该目录下的文件。iTunes同步设备时 不会备份该目录
* Library/Caches:保存应鼡运行时?成的需要持久化的数据,iTunes同步设备时不会备份该目录?一般存储体积大、不需要备份的非重要数据
* Library/Preference:保存应用的所有偏好设置,iOS的Settings(設置) 应?会在该目录录中查找应?的设置信息。iTunes同步设备时会备份该目录
#首先理清楚的是:App用户可能开启了 iColound 对我们的孩子(App)进行了备份而備份的只是 “Documents” 文件夹。
因此我们在开发过程中对于可能会因为升级造成数据错乱数据文件尽量不要存放在 “Documents” 文件下,可以考虑放在 “Library/Caches” 文件中
如果之前版本已经按照最坏的情况做了(将升级可能会导致程序崩溃的文件放在了 “Documents” 文件中,用户也刚好备份了我们的应用)那么。。我们在版本更新中只能将存取这个文件的代码改变比如:修改文件名称,重新存放新版本的文件抛弃了之前版本的文件;在更新应用的时候对造成崩溃的文件进行清理。方法很多猿们一定有更好的方法。
不得不提的是小猿已经提交App Store并且通过审核,客户反馈过来了上边讨论的问题小猿才意识到问题的严重性,好歹app的客户还不庞大。不然后果不堪设想。最后想到一个没办法的办法猿们不要嘲笑(委屈脸):