背景
公司的项目在使用Firebase-Crashlytics进行App的崩溃监控,近期发现在Firebase上看不到新发布的几个App版本的崩溃数据,这里记录下排查过程。
原因
经过一番排查,发现原因是我们在进行包瘦身工作时,在项目中设置EXPORTED_SYMBOLS_FILE
选项,提供了一个空文件。Crashlytic SDK的正常启动依赖__mh_execute_header
。在Firebase的Github上有这个问题的讨论。找到原因后,解决方案也很简单:在EXPORTED_SYMBOLS_FILE
的文件中,增加一行__mh_execute_header
即可。
排查过程
排查该问题的过程比较曲折,可以分为3个阶段:
- 对比代码版本变化,从代码上寻找与Firebase相关的改动。发现清理警告时改动过我们内部封装的Crash库,但是改动内容可以确定对Firebase不会产生影响。
- Firebase SDK版本过低。正常来说这种使用广泛的SDK,即使版本更新,也会保持对旧版本的兼容,所以Firebase SDK版本过低导致无法收集日志的可能性不大。
- 查看控制台日志。这个方法比较实用,这次问题的原因也是通过查看控制台日志找到的。连接手机,Mac上打开控制台,选择手机设备,启动APP,即可过滤相关的日志输出。在控制台的日志中,发现Crashlytics的日志,启动失败,提示需要
__mh_execute_header
信息。
总结
这次也是踩到了Firebase的一个坑,记录一下,如果恰巧有同行遇到类似的问题,可以作为参考。同时推荐通过控制台查App日志的方式进行问题排查,有些问题在不需要运行Xcode项目的情况下,就可以快速定位到。比如这次遇到的Crashlytics启动失败问题、以及之前遇到过的App测试包无法安装问题,在控制台都会输出有用的错误日志。