iOS App 启动必 crash 监控

摘要

在 iOS 11 Beta 刚刚发布时,有用户在微博反馈:升级到 iOS 11 Beta 后,微信读书 App 遇到启动必 crash 的绝境,无法使用。

feed_back

用户看到的界面,是我们开源的 iOS 启动连续闪退保护方案 提示。

调试发现,是一段 iOS 11 不兼容的代码引发的问题。我们通过修改不兼容代码,解决了问题。

等到现网用户反馈,为时太晚,如何把启动必 crash 问题纳入监控?

我们设计了一个特征值以判断这个问题,并扩展了 iOS 启动连续闪退保护方案,提供了日志上报接口,帮助开发者在第一时间发现启动必 crash 问题。

特征值设计

在每次检测到 crash 后,我们需要生成一个特征值,帮助判断 App 是否遇到启动必 crash。特征值应该包括:

  • 时间维度:衡量最近几次 crash 的时间间隔是否连续。
  • crash 原因维度:衡量最近几次 crash 原因是否一致。

我们设计特征格式如下:

1
t1|d1|t2|d2|t3|d3|...
  • ti 表示最近 i 次crash,与最近 i+1 次 crash 的 App 存活时间的差值。
  • di 表示最近 i 次crash,与最近 i+1 次 crash 的堆栈 offset 组成的向量的距离。其中 crash 的堆栈 offset,即下图的蓝框内的数字。di 可以表示两次 crash 之间的原因相似度,如果等于 0 则表示 crash 原因一致。

crash_stack

启动必 crash 判断

如果特征值为:0|0|0|0…,用户遇到了启动必 crash 的问题,且 crash 堆栈一致。

如果特征值为:0|244|0|378…,用户遇到了启动必 crash 的问题,但 crash 堆栈不一致。

启动必 crash 上报

如果特征值属于上述情况,认为用户遇到启动必 crash 的问题,执行指定的上报方法。

开发者可以接入实时监控系统,当上报人次符合一定条件,执行告警通知。

开发者接入

开发者在 iOS 项目引入 GYBootingProtection 组件后, AppDelegate+GYBootingProtection.m ,插入一行上报代码,即可把启动必 crash 纳入监控。

crash_report

本文有帮助?