iOS符号化崩溃日志
经常(偶尔)QA在测试的时候,APP发生了crash,此时相比APP的崩溃,更加崩溃的是开发。如果是必现的还好,但如果是偶现的话,此时就必须设法恢复现场,找到崩溃原因。
崩溃日志导出
恢复现场第一步是导出崩溃日志,导出日志的方式有两种。一种是通过Xcode导出,另外则是直接通过设备的Settings导出。
通过Xcode导出崩溃日志
直接用发生崩溃的设备连接Xcode,点击Xcode -> Window -> Devices,然后定位到发生崩溃的机器,找到对应的崩溃日志,并导出到Mac的文件系统。
Xcode中导出崩溃日志通过设备Settings(设置)APP查看并导出崩溃日志
通过Settings导出崩溃日志,不同版本的系统可能不同,以iOS 12为例,崩溃日志位于Settings -> Privacy -> Analytic -> AnalyticsData 下,日志名格式为AppName-XXXX-XX-XX.ips
,可以根据崩溃时间点和发生崩溃的APP名称来定位,点击对应的崩溃日志,可以进入查看,然后通过导航栏的分享按钮通过AirDrop传送到Mac。
崩溃日志符号化
第二步是找到发生崩溃的测试包对应的dSYMs文件,这个要求每次打包以后要保存对应的dSYMs文件,否则没办法了。其次,很重要的一点,Xcode中必须要有对应版本系统的iOS DeviceSupport文件,否则符号化会失败。
举个例子:比如发生崩溃的iPhone系统是iOS 8.1.1,那么路径/Users/username/Library/Developer/Xcode/iOS DeviceSupport/路径下也要有iOS 8.1.1的设备支持文件。
将崩溃日志和dSYMs文件放到同一个目录下,然后采用symbolicatecrash命令进行符号化。symbolicatecrash是Xcode自带的符号化工具,但是不在系统的PATH内,因此运行该命令需要修改PATH变量,在终端执行如下命令:
export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"
export PATH=$PATH:/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/
然后在终端中执行如下命令:
symbolicatecrash XXX.crash -o YYY.crash
其中XXX.crash是未符号化的日志,YYY.crash是符号化后的日志。
网友评论