iOS 通过crash文件查找崩溃位置

背景

测试demo上传到TestFlight,经过漫长的等待,结果被拒了,原因是 Guideline 2.1 - Performance - App Completeness 项目一打开就crash掉了,然后下载crash文件,开搞。

xcode13之前

准备步骤

1. 在桌面新建一个crash文件夹用来存储要使用到的材料;

2. 下载crash文件,并将temp.crash文件放入crash文件夹;

3. 回到桌面,使用快捷键 command+shift+g,前往 /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash,并将symbolicatecrash文件拷贝到桌面crash文件夹内;

4. 打开xcode,选择Window菜单下的Organizer选项, 打开窗口,然后选择Archives这个选项卡,在列表中找到上线对应版本的xcarchive文件,右键这个文件打开菜单,选择Show in Finder打开这个文件所在的目录,然后在打开的目录中右键这个文件,选择显示包内容,打开这个文件包的内容,然后打开内容里面的dSYMs这个文件夹,在文件夹中找到自己的项目对应的dSYM文件,同样将文件拷贝到第一步创建的crash文件夹中。

5. 打开终端,在终端中打开crash文件夹所在的目录,然后在这个目录下执行命令:./symbolicatecrash ./tepm.crash ./xxx.app.dSYM > crashLog.crash

symbolicatecrash为xcode的解析工具,tepm.crash为下载的崩溃日志文件,xxx.app.dSYM 为自己的项目对应的dSYM文件,crashLog.crash就是我们解析以后生成的解析完成的log日志文件。
在执行这条命令时,可能会报错误信息:
Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69.

这个时候,我们需要先执行一条命令:
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer

执行完成以后,然后我们重新执行上一条命令:
./symbolicatecrash ./tepm.crash ./xxx.app.dSYM > crashLog.crash

等待执行完成以后,我们在crash这个文件夹中,就可以看见一个crashLog.crash的文件,这个文件就是我们解析完成的日志文件。

然鹅,划重点,我的crashLog.crash并没有解析出来,问题出在哪呢,通过询问
Mr_wick,我的大神朋友,得知xcode13之后,苹果已经更新了崩溃日志格式,使用原来的方式已经无法获得崩溃日志,使用原有方案是得不到结果滴。

xcode13 后crash文件的正确解析姿势

1. 还是将前4步的准备工作做好
2. 使用终端命令
cd /Application/Xcode.app/Contents/SharedFrameworks/CoreSymbolicationDT.framework/Resources/
3. 执行
python3 CrashSymbolicator.py -d '符号表路径' -o '输出路径' -p '苹果给的日志'
例如:
python3 CrashSymbolicator.py /Users/admin/Desktop/temp/dSYMs/wechat.app.dSYM /Users/admin/Desktop/temp /Users/admin/Desktop/temp/crash.crash
4. 此时就可以得到新鲜出炉的解析文件了

image.png

完美结束

参考链接

  1. iOS crash文件解析项目符号不显示解决方案
  2. iOS通过线上崩溃日志定位到崩溃位置

你可能感兴趣的:(iOS 通过crash文件查找崩溃位置)