前言】

 本文全部的实践均针对不是在自己本机上打包的。(如果是在自己机子上打包的,符号化就是比较简单。T0T)

【目录】

1. 友盟日志查看

2. 解析ips日志 (方法二可用于crash文件符号化)

2.1 方法一:命令行解析ips

2.2 方法二:使用Xcode解析ips/crash(比方法一更简便,该方法也适用于crash文件)

 

 

1. 友盟日志查看

 

【前提准备】:找到打包的人,要对应的xcarchive文件。

1. 去友盟上找到崩溃日志。如图1-1,步骤如下:

1.1)友盟首页找到【U-APP】,点击进入。

1.2)点击【立即使用】。

1.3)左上角选择我们的应用。

1.4)【错误分析】-【错误列表】-选择相应的版本-选择日期。如果有bug的话,页面会显示出来。

iOS 接入友盟崩溃日志 ios 接入友盟崩溃日志在哪_iOS 接入友盟崩溃日志

图1-1

2. 获取xcarchive文件中DWARF的路径

如图1-2。步骤如下:

2.1)右键xcarchive文件,点击【显示包内容】。

2.2)点击dSYMs,找到.dSYM文件,右键点击【显示包内容】。

2.3)依次点击目录:Contents--Resources。找到DWARF文件夹。

2.4)打开终端,输入CD,选中DWARF文件夹,拖到终端上。回车。这时候,终端进入了DWARF。

iOS 接入友盟崩溃日志 ios 接入友盟崩溃日志在哪_非本地打包_02

图1-2

3. 开始符号化

如图1-3。步骤如下:

3.1)在友盟上找到日志的堆栈,复制要查看的堆栈的内存地址。

3.2)在终端输入

atos -arch arm64 -o 项目名称 友盟日志上的内存地址

       回车。即可看到该内存地址对应的调用堆栈地址。如图1-3。里面显示了哪个文件下的第几行

iOS 接入友盟崩溃日志 ios 接入友盟崩溃日志在哪_崩溃日志_03

图1-3

 

 

2. 解析ips日志 (方法二可用于crash文件符号化)

【前提准备】:找到打包的人,要对应的xcarchive文件。

 有两种方法。其中方法二比较简单,且方法二可用于crash文件的符号化,所以,推荐使用方法二。但是由于方法二其实是方法一的简便操作,所以把方法一放到前面来。

 

 

2.1 方法一:命令行解析ips

1.新建一个文件夹,名字叫Acrash。

2.拷贝.ips文件放到Acrash中,并将.ips文件后缀名该为.crash。 

3.前往文件夹路径:【/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash】,找到symbolicatecrash。拷贝symbolicatecrash工具拷贝到Acrash中。

4. 从xcarchive文件里,右键点击【显示包内容】,从Products/Applications里面拷贝.app文件(操作类似图1-2)。放到Acrash中。

5. 从xcarchive文件里,右键点击【显示包内容】,拷贝dSYMs文件下的.dSYM文件(操作类似图1-2)。放到Acrash中。

至此,Acrash文件中总共有4个文件:.crash文件、symbolicatecrash工具、app文件、.dSYM文件。如图2-1。

iOS 接入友盟崩溃日志 ios 接入友盟崩溃日志在哪_符号化_04

图2-1

6.开始解析

如图2-2。步骤如下:

6.1)打开终端,cd到Acrash文件夹下的路径。

6.2)输入命令

./symbolicatecrash .crash文件的绝对路径 .dSYM的绝对路径 > log.crash

       回车。

【注意1】:log.crash是符号化后的文件名。可以自定义文件名(后缀一定是.crash哈)。

【注意2】:在6.2)步骤之后,终端有可能会报错Error:

Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69.. 这时候在终端中再输入

export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer

然后再次运行6.2)的命令。应该就能看到Acrash文件夹下,可以发现多了一个文件:log.crash。

【注意3】:./symbolicatecrash命令的参数,一定要是先【.crash文件的绝对路径】,再【.dSYM的绝对路径】,否则,会报错,报错如下:

Use of uninitialized value $data in substitution (s///) at ./symbolicatecrash line 919.
Use of uninitialized value $data in substitution (s///) at ./symbolicatecrash line 922.
Use of uninitialized value $data in substitution (s///) at ./symbolicatecrash line 926.
Use of uninitialized value in pattern match (m//) at ./symbolicatecrash line 473.
Use of uninitialized value in scalar assignment at ./symbolicatecrash line 488.

 

6.3)我们回到Acrash文件夹下,可以发现多了一个文件:log.crash。该文件就是ips符号化后的结果,如图2-3。

 

iOS 接入友盟崩溃日志 ios 接入友盟崩溃日志在哪_非本地打包_05

图2-2

iOS 接入友盟崩溃日志 ios 接入友盟崩溃日志在哪_符号化_06

图2-3

 

 

2.2 方法二:使用Xcode解析ips/crash(比方法一更简便,该方法也适用于crash文件)

1. 新建Acrash文件夹。

2. 将.app和.dSYM文件放到Acrash文件夹中(操作类似图1-2)

3. 命令行执行

mdimport Acarsh

该命令的作用是让Xcode能通过spotlight,找到其uuid与crash log中携带的uuid一摸一样的dSYM文件与.app文件。进而进行符号化。

【注意】:注意查看当前路径不能处于Acrash中。否则会出现错误:could not find path 'Acrash',如图2-4

iOS 接入友盟崩溃日志 ios 接入友盟崩溃日志在哪_崩溃日志_07

图2-4

4. 找到一个能连接上Xcode的测试机(只要能连接上都可以),数据线连上手机和Xcode

5. Xcode中,  点击“Window”--“Devices and Simulators ”

6. 切换到“Devices”,选择“View Devices Log”,将ips/crash文件拖拽到左侧的log列表中,如图2-5。

iOS 接入友盟崩溃日志 ios 接入友盟崩溃日志在哪_友盟_08

图2-5

7. 过一小会,可以看到列表里面新添加了一个log。该log,就是ips符号化后的文件。