崩溃日志
*.ips文件是从手机上导出来的,在手机里找到设置->隐私->分析→分析数据;文件名格式就是APP包名+时间的ips文件;
初步排查
1.把崩溃日志文件的后缀ips改为crash,可以双击打开xcode查看异常堆栈;
2.有崩溃发生的手机时,可以直接拿手机过来连接mac,在xcode顶部菜单选择【Window】→ [Devices And Simulators],点击View Device Logs按钮查看设备日志;
找到对应app的崩溃日志,在右侧可以查看崩溃的具体堆栈(点击某一条日志,右侧加载具体堆栈有延迟);
结合dSYM文件排查
借助的工具:symbolicatecrash(xcode自带的崩溃分析工具)
symbolicatecrash工具路径
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
步骤
1.创建一个目录,用于放置需要的文件,如/Users/mymac/Documents/crash,app名称举例=appname;把symbolicatecrash拷贝到crash文件夹中;
2.拷贝相关文件到crash文件夹中,包括下面的文件
2.1重命名后的崩溃日志.crash
2.2对应打包生成的appname.xcarchive,右键显示包内容,拷贝dSYMs\*.dSYM文件,拷贝Products\Applications\appname.app;
3.核对三个UUID是否一致,确保崩溃日志、app、dSYM文件能对应上,注意UUID根据手机cpu架构不同会有多个;
崩溃日志的UUID
.crash文件内第一行slice_uuid 就是该 crash 文件的 UUID,结合Code Type: ARM-64 (Native),定位到arm64的UUID
例如
{
"app_name": "appname",
"timestamp": "2017-06-03 02:15:01.50 +0800",
"app_version": "1.2.00",
"slice_uuid": "ab0ec401-77b7-3ff6-bf99-567fa14a45fc",
"adam_id": 1128617051,
"build_version": "1.0.1",
"share_with_app_devs": false,
"is_first_party": false,
"bug_type": "109",
"os_version": "iPhone OS 10.3.2 (14F89)",
"incident_id": "1DE9E3EF-D2DF-4A54-992A-1912BF8D285A",
"name": "appname"
}
Incident Identifier: 1DE9E3EF-D2DF-4A54-992A-1912BF8D285A
CrashReporter Key: 5abb1af3a567bd61ac640b7daf57c472c59d9547
Hardware Model: xxx
Version: 1.0.1 (1.2.00)
Code Type: ARM-64 (Native)
Role: Foreground
Parent Process: launchd [1]
或者通过命令获取crash文件appname-2020-04-04-239165.crash的UUID:grep --after-context=2 "Binary Images:" appname-2020-04-04-239165.crash
app、dSYM的UUID获取
打开终端,cd /Users/username/Documents/crash
app的UUID
dwarfdump --uuid appname.app/appname
UUID: CD78BB00-BE55-3FC2-89AC-580437E54D36 (armv7) appname.app/appname
UUID: AB0EC401-77B7-3FF6-BF99-567FA14A45FC (arm64) appname.app/appname
dSYM的UUID
dwarfdump --uuid appname.app.dSYM
UUID: CD78BB00-BE55-3FC2-89AC-580437E54D36 (armv7) + 很长的路径
UUID: AB0EC401-77B7-3FF6-BF99-567FA14A45FC (arm64) + 很长的路径
4.开始解析
终端输入:
./symbolicatecrash appname-2020-04-04-239165.crash appname.app.dSYM > log.crash
生成文件log.crash,再双击打开在xcode中查看异常堆栈;
如果执行后提示错误,如
Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69.
执行以下命令:
export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"
再执行解析命令即可。
5.其他问题
解析dSYM文件UUID失败
原因:dSYM文件实际上是一个文件夹,从服务器上直接下载这个文件夹到本地,可能破坏了*.dSYM文件;
解决:通过在服务器上对appname.xcarchive目录整个压缩后,再下载到mac上,再解析UUID正常;