一个无厘头的bug

最近 app 更新真是 bug 不停呀。前面有 Xcode 10 打 AppStore 渠道包导致部分用户闪退,后面又出现很小概率个人中心闪退。今天就着重记录下个人中心闪退这个无厘头的 bug。

首先,介绍下闪退现象。新版个人中心有部分区域显示的是老版本的界面,而且点击个人中心的任何一个地方都会闪退。

当然,既然有闪退,肯定会有闪退日志的,查看闪退日志,显示的是数组第一个元素为 nil。

根据崩溃日志,反向查找,发现数组中存放的就是出问题那部分 UI 界面的子控件。由于 UI 出现问题,导致有的子控件为 nil, 这样在添加到数组中(字面量)时,就会造成崩溃。

为什么 UI 会出现异常呢,这就是我感觉到无厘头的地方。

因为,这部分 UI 是根据 xml 格式加载的,所以我就断定可能是某些情况下 iOS 系统安装 app 时,xml 文件不替换导致的。经过不同的包发现只要是使用 xml 布局的页面,都会出现 xml 不会替换的问题。但是,iOS 本身是支持 xml 格式数据的,没有理由不替换呀。为什么单单是布局有问题呢?

由于没有站得住脚的结论,就只好去 FlexLib(使用 xml 布局) 开发群里问了群主,得知了其在 Release 下会使用缓存。而且缓存是根据 build 号来的。这样就找到了问题,因为我的 build 会在新版本构造的时候重置,所以导致 app 出现了布局混乱。其实 xml 确实是替换了,只是布局使用的是缓存。

经过一天的折腾,终于找到了问题。也算是可以安心睡个觉了,不过,还是要总结一下,以便以后快速找准方向。

  1. 轻易不要怀疑 iOS 系统。虽然 Xcode 10 确实是 Apple 的问题,但是正常情况下,还是要从其他方向着手,怀疑 Apple 作为最后一步。
  2. 轻易不要相信 第三方。代码都是人写的,尤其 github 上星少的,有 bug 还是比较正常的,因为没有那么多人使用,问题就不会那么容易暴露出来。
  3. 有问题及时解决。因为当时有个用户手机出现了问题,还在我面前,我抓包看了一下,数据不对,字符类型的解析成了数组类型。就抛给服务端了,后来想了一下,之前也有这种问题,而且是正常的。因为 charles 解析 protobuf 遇到某些数字就会出现这种情况。
  4. 一切现象都有解释。因为 Xcode 10 导致崩溃的时候,我看到日志有不同地方的崩溃,所以以为这个也是那个原因。而且用户截图的时候,安卓说了一个疑问:界面为什么会这样子?我当时说了一句都有可能,以为还是同一个问题。等到最终找到问题,发现这种现象是可以解释的了。
  5. 初始化 array dictionary 时,尽量不使用字面量,这样子就会尽量避免崩溃问题了。

猜你喜欢

转载自blog.csdn.net/jianghui12138/article/details/83587507