思考:
由于升级导致的应用崩溃可能的原因:
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的客户还不庞大。。。不然后果不堪设想。最后想到一个没办法的办法,猿们不要嘲笑(委屈脸):
5C13FE91-0B5E-4B21-9806-D49FBE81FB2F.png
B5C81127-21B0-473F-881E-9C8D0ECADF6F.png
EA0A45DD-4209-43BE-A952-81D6DE7F4C81.png