友盟后台有一个错误分析的统计项, 但是点进去之后并不能确认是由什么引起的崩溃。查阅各种资料后发现 利用dSYM 函数地址映射文件,可以定位出引起崩溃的错误代码。
1. 崩溃的大致类型,数组越界
2. 导致崩溃的函数内存地址
3. 唯一标识符 dSYM UUID
1. 什么是dSYM文件
Xcode编译项目后,会生成一个同名的dSYM文件,dSYM是保存16进制函数地址映射信息的中转文件。 每次编译项目的时候都会生成一个新的dSYM文件,位于/Users/<用户名>/Library/Developer/Xcode/Archives 具体查找方法,点这里
2. dSYM文件有什么用
当软件release模式打包或上线后,不会在Xcode中直观的看到崩溃错误。这个时候就需要分析crash report 文件了。
1. iOS设备中会有日志文件保存我们每个应用出错的函数内存地址
2. 可以通过出错的函数地址去查询dSYM 文件中程序对应的函数名和文件名
3. 所以要保持 App的UUID、dSYM的UUID、crash文件中的UUID 统一才能,正确的找出错误代码
3. 具体操作
a. 将dSYM文件和Products 文件 单独放在一个文件夹里面。
b. 打开终端,cd到刚才新建的文件夹(错误报告)的目录下
输入命令
xcrun atos -arch arm64 -o xxxx.app/xxxx 0x10019bc48
//xxxx对应的是你的工程名
//0x10019bc48 是崩溃的函数内存地址
c. 执行结果
4. dSYMTools 工具
GitHub上也有较好的报错分析工具, 也可以直接使用。
dSYMTools工具 下载地址及说明