iOS App 启动必 crash 监控

时间:2022-05-30
本文章向大家介绍iOS App 启动必 crash 监控,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

摘要

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

用户看到的界面,是我们开源的 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 判断

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

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

启动必 crash 上报

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

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

开发者接入

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