iOS中闪退即使在上线也是容易出现崩溃现象的.以下是个人在工作中对崩溃或异常现象的总结和经验.上线后的bug是能很好的在devicedata下直接下载出来的,这种iOS本身支持。但是还没上线的app如何快速定位,以下是最近开发的一些经验和体会
-
设备型号有关
这上面的崩溃跟操作系统的位数有关如5s后6之后的区别,5以前的是32位操作机,6之后是64位操作机.这有什么问题呢?比如后台传入的长整型iOS端如果接收不正确的情况会截取就会不正确.产生这种情况的时候你可能需要考虑类型转换的问题.
-
iOS系统版本有关
部分机型正常部分系统版本不正常,这是需要仔细检查版本测试这种往往很容易重现.多测系统版本基本能发现并解决.常见的是部分第三方在版本上的不足,sdk不支持啊多见
-
关于高频率的偶然事件,那么这种算是必然事件,亟待修复.这种不太好定位.
这种情况基本是跟用户操作后产生的本地数据有关,因为必然是操作后就会出现这样的隐患,然后就去仔细检查本地数据是否有异常情况.如果本地数据没有问题,先别急这时还是可能跟它有关,仔细想想数据的流向中间会经过其它的哪些节点,而那些往往就是产生崩溃的根本原因.比如之前就遇到过失败任务的上传就需要经纬度,但是开机瞬间经纬度很可能还没来得及回调.产生崩溃,甚至重现不了(那是不知道这个原因)因为自己在测试时失败任务上传时只是断了网并没有关掉app,因此在做失败任务上传时一定切记不仅仅测断网的时候,还关掉app的情况.
-
编程上逻辑的顺序问题
多见于业务逻辑上的疏漏还有在多线程下的异步控制不到位.这种问题最好不要直接改,可以比对着设计流程图来校验仔细一点,没有设计文档流程那那还不赶快去画,照着清晰的思路去理才是关键
-
直接闪退
使用各种xib的方式不正确,不太明白通过xib的方式和代码的方式上的区别(模板模式的应用生命周期).
使用拖拽的方式绑定多个事件?不存在的对象?不存在的方法?
这种问题多是自己作死吧 隐晦的bug
系统方法的调用在不同项目中出现奇怪的结果?
仔细检查项目中两者的代码配置书写,如果无误.看看是不是有人用了黑魔法(可怕的全局搜索)吧.
-
界面上的异常
xcode自带图书那个可以看到层级关系.以及控件的位置是否正确
界面上正常响应不了交互,UIimageview是否开启了允许交互设置
视图的遮挡,透明度,ishidden都会失去交互
重要步骤的流程如果需要可自己配合后台做日志管理,简单点就用第三方吧,不过目前极光友盟只能收集到oc中的异常,bugly能收集到swift的但信息是不全的意味着你还是看不出来是哪里错了,最终方案打个包让人家继续用着呗,为自己的每个ipa和版本制作符号表,集成bugly进行收集信息,这样crash直接定位到出错代码.但是小心逆向哟,逆向工程师必争之地就是符号表,因此在上线之前测试阶段可以配置符号表,上架的时候还是删除符号表配置,并且删掉bugly的拦截,看到最后了的捡到了呗
2020.9.15补充
使用memory graph 可定位内存分配过大的库
profile leaks 可检测内存暴涨 根据大致思路定位问题根源,使用一些第三方库是否过于古老
- 屡试不爽的定位bug 通过删代码测试找到问题代码(有版本控制的可以这样搞)
策略上通过定位段代码 不好找的可以通过一半代码删一半检测方式定位到