文章讲述如下问题:
1. 如何获取.ips文件
2.如何获取symbolicatecrash
3.解析前的准备工作
4.如何将.ips转为.crash文件
5.如何使用symbolicatecrash解析.crash文件
6.异常错误处理
1.如何获取.ips文件?
在 iOS 中,你可以通过几种方式找到应用程序的 .ips 文件,具体取决于你是在开发过程中还是从用户设备上获取崩溃日志。
在开发过程中
-
在 Xcode 中查看:如果你在 Xcode 中运行应用程序时发生崩溃,可以在 Xcode 的导航器中查看和导出崩溃日志。在 Navigator 面板中展开 "Devices and Simulators",选择连接的设备,点击“Open Recent Logs”,此时会进入 "Device Logs" ,找到项目相关的崩溃日志。
-
在设备的 Console App 中查看:在 macOS 的 Console 应用程序中,你可以连接设备并查看设备的系统日志,包括应用程序的崩溃日志。
从用户设备上获取
-
使用设备的崩溃日志:如果用户在应用程序崩溃时选择了“发送报告”或“不发送”选项,你可能会收到一个带有 .ips 扩展的崩溃日志文件。用户通常可以通过设备设置中的“隐私”->“分析与改进”->“分析数据”找到,一般app的崩溃日志名为“项目名xxx-发生时间.ips”
-
从 iTunes 或 Finder 备份中提取:如果用户同步设备或使用 iCloud 进行备份,你可能会在 iTunes 或 Finder 备份中找到崩溃日志文件。
找到日志文件后,在电脑上新建文件夹以存放.ips崩溃日志(为理解后续操作,假设此文件夹名称为“A”)
2.如何获取symbolicatecrash?
1).打开终端,输入如下指令
find /Applications/Xcode.app -name symbolicatecrash -type f
终端会输出symbolicatecrash所在路径,如图所示
2). 复制地址进入到Resources文件夹下
cd /Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources
3).打开文件夹,然后找到并找到symbolicatecrash
open .
效果和终端指令如下图所示:
4).将symbolicatecrash复制到步骤1新建的A文件夹下(注:为了方便操作,最好将symbolicatecrash放到新文件夹下,后续在此文件夹还会放入.ips文件和dsyms中的xxx.app.dSYM)
3.解析前的准备工作
步骤1和2新建的文件夹A,目前已存放了.ips崩溃日志和symbolicatecrash。需要解析日志,还需要重要的dSYM,也就是符号表。
那么如何获取“项目名xxx.app.dSYM”呢?
废话不多说,直接上干货~
打开Xcode,导航栏选择“Window” -> “Organizer”,在“Archives”中找到崩溃的app版本,鼠标右击,选择“Show in Finder”,选择"xxx.xcarchive",鼠标右击,选择“显示包内容”,打开“dSYMS”,找到"项目名xxx.app.dSYM"文件,复制此文件至步骤1新建的文件夹A。
/////////////////////////////到此所有准备工作已完成!/////////////////////////////
4.如何将.ips转为.crash文件
因为苹果在Xcode13.3已经废弃了.crash文件,而symbolicatecrash只能解析.crash,所以需要利用"AppleCrashScripts"将.ips转换为.crash。
1). 下载AppleCrashScripts; https://github.com/tomieq/AppleCrashScripts
2). 进入下载的AppleCrashScripts-master文件夹,执行如下代码
进入文件夹 cd AppleCrashScripts-master
swift convertFromJSON.swift -i xxx.ips -o xxx.crash
注:xxx.ips为步骤1获取的.ips文件,xxx.crash为你转换后的.crash文件
5.如何使用symbolicatecrash解析.crash文件
通过终端进入到新建的文件夹A目录下,执行如下代码
./symbolicatecrash /xxx/xxx.crash /xxx.app.dSYM > crash.log
代码解释:
"/xxx/xxx.crash"为步骤4转换后的.crash文件的绝对路径
"/xxx.app.dSYM" 为步骤3获取的符号表文件路径
"crash.log"为解析后的崩溃日志名(文件名和后缀可以自定义.log,.txt都行)
此时如果没有报错的话,crash.log就可以看到带崩溃的具体函数和崩溃在哪一行了
如果报错请继续往下看
6.异常错误处理
错误1:
Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69.
解决方案:
export DEVELOPER_DIR="/Applications/XCode.app/Contents/Developer"
再次执行:
./symbolicatecrash /xxx/xxx.crash /xxx.app.dSYM > crash.log
错误2:
No crash report version in /xxx.crash at ./symbolicatecrash line 1365.
这是因为直接用symbolicatecrash解析.ips文件,而非使用转换后的.crash文件解析导致。针对此问题请执行步骤4
好记性不如烂笔头,网上也有很多类似的资料可以借鉴。
本人也是借鉴了很多博主的资料,然后结合自己实际尽可能详细的解释每行代码的作用,如有不解或者疑问,请留言~
到此文章已结束,特别感谢这两位博主提供的参考文章,链接如下:
https://www.cnblogs.com/china-fanny/p/7610487.html
https://cloud.tencent.com/developer/article/2345755
另外:书写不易,如果本文解决了您的问题,还望不要吝啬star鼓励一下~
感谢您的阅读!!!
谢谢!!!
🙏🙏🙏