iOS App崩溃日志分析

APP新版本上线之前,一般都会经过测试团队的反复测试,确认无bug后才会发布。发布那刻作为开发人员的你,估计欣喜若狂吧,自豪吧!!。发布后线上运行好长一段时间,均安然无恙,可突然有一天你们家CEO说,自家APP崩了,出现闪退了。那一刻在CEO面前感觉弱爆了的感觉有木有啊?着急了吧,抓狂了吧,F**K it, 怎么解决呢?君不必太过忧伤,且听我给你细说。

获取iOS APP崩溃日志

你造吗,iOS系统会生成各APP闪退的崩溃日志?“哦,在哪里?长什么样?”要过去iOS系统生成的Crash日志,请将发生崩溃异常的Apple设备连接到你的Mac电脑,打开Xcode->Window->Devices菜单,出现如下界面:
iOS App崩溃日志分析_第1张图片
点击View Device Logs按钮可以查看接入手机中所有的Crash日志,选择相应APP的某条Crash日志点击右键导出该日志并命名为myCrash.crash

iOS App崩溃日志分析_第2张图片

查找该日志对应的dSYM文件和APP包

刚才导出的日志有如天书般让人云里雾里,要想将其翻译成易懂的文字,我们需要两个文件的帮助,该日志对应的dSYM文件和该App ipa文件,根据导出日志里的App 版本号可以从你的XcodeArchive记录里可以找到当时发布该版本的xcarchive文件:
iOS App崩溃日志分析_第3张图片

选择相应的xcarchive文件,右键在Finder中显示,接着右键显示包内容:
iOS App崩溃日志分析_第4张图片
将该dSYM拷贝到myCrash.crash同目录下;同理将该Products下的XXX.app拷贝到myCrash.crash同目录下:
iOS App崩溃日志分析_第5张图片
文件汇总如下图:

iOS App崩溃日志分析_第6张图片

将Crash日志Symbolicate

1)确定三个文件的UUID一致
使用dwarfdump命令可以查看XXX.app以及dSYM文件的UUID:

crash Johnkui$ dwarfdump --uuid XXX.app/XXX 
UUID: 9E4C94C4-DBA8-3E13-AE4D-75654E1FEC18 (armv7) XXX.app/XXX
UUID: 956EA55D-0CF2-335D-8DAC-7537216DDD78 (arm64) XXX.app/XXX
crash Johnkui$ dwarfdump --uuid XXX.app.dSYM/
UUID: 9E4C94C4-DBA8-3E13-AE4D-75654E1FEC18 (armv7) XXX.app.dSYM/Contents/Resources/DWARF/XXX
UUID: 956EA55D-0CF2-335D-8DAC-7537216DDD78 (arm64) XXX.app.dSYM/Contents/Resources/DWARF/XXX

崩溃日志myCrash.crash的UUID可以在日志文件里的Binary Images:中第一行尖括号内,
arm64 <956ea55d0cf2335d8dac7537216ddd78>,和上面两个文件的UUID匹配,因此三者UUID一致。

2)使用symbolicatecrash工具
Xcode有自带的symbolicatecrash工具,可以通过dSYM文件将crash文件中的16进制地址转换成可读的函数地址,在Xcode中,搜索该工具的位置,不同版本的Xcode该工具的位置不太一样:

crash Johnkui$  find /Applications/Xcode.app/ -name symbolicatecrash

Xcode 8位于:

/Applications/Xcode.app//Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

将该工具拷贝到/urs/bin/目录下,但是Mac OS 11后系统关闭了root权限,可以通过重新启动Mac,同事按住Command+R,然后打开Terminal, 输入csrutil disable开启root权限,然后重启设置DEVELOPER_DIR系统变量:

crash Johnkui$ cd ~/
~ Johnkui$ vi .bash_profile
输入:
export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"
保存后:
~ Johnkui$ source .bash_profile 
...
crash Johnkui$ symbolicatecrash XXX.crash XXX.app.dSYM>XXX.txt

最后打开该XXX.txt文件,即可查看bug出现在哪行代码了。

你可能感兴趣的:(iOS,Tips)