前言:
应用在使用的过程中如果产生崩溃,手机会生成一个ips文件,通过ips文件我们可以查看崩溃相关信息,但是ips文件里面有许多地址无法直接查看,需要符号化之后才能查看具体信息,本文主要是介绍ips文件符号化,并提供符号化脚本。
符号化ips文件
准备工作:
- 获取ips文件:设置 -> 隐私 -> 分析与改进 -> 分析数据,ips文件名格式为:工程名-时间,如:CrashTest-2021-06-18-165322.ips,找到需要分析的ips文件并进入,点击文件右上角分享按钮即可导出
- 获取dYSM文件:Xcode菜单Window -> Organizer -> 找到对应的APP -> 右击,点击Show in Finder -> 右击.xcarchive文件,点击显示包内容 -> 包里面dSYMs目录下.dSYM文件即为目标文件
- 获取symbolicatecrash工具:应用程序 -> 找到打包的Xcode,右击显示包内容 -> Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
可以把上述文件拷贝到一个文件目录下方便操作,如桌面ips_crash文件夹中,后文以ips_crash文件夹举例。
符号化:
- 修改ips文件的后缀为crash,如:CrashTest-2021-06-18-165322.ips -> CrashTest-2021-06-18-165322.crash
- 终端cd到ips_crash文件夹中
- 使用symbolicatecrash工具符号化文件,命令格式为:
./symbolicatecrash crash文件 dSYM文件 > 存储符号化结果的文件名
如下:
./symbolicatecrash /Users/user/Desktop/ips_crash/CrashTest-2021-06-18-165322.crash /Users/user/Desktop/ips_crash/CrashTest.app.dSYM > crashTest.crash
复制代码
如果出现以下错误
Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69.
使用命令:
export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"
,然后再次调用符号化命令,最终得到符号化的crash文件
使用脚本符号化ips文件
脚本:
#!/bin/bash
# 进入桌面
cd ~/desktop
# ips文件不存在,提示并退出
if [ ! -r "$1" ]
then
echo -e "\nerror:缺少ips文件路径\n"
exit
fi
# dYSM文件路径不存在,提示并退出
if [ ! -r "$2" ]
then
echo -e "\nerror:缺少dSYM文件路径\n"
exit
fi
# 检查路径下symbolicatecrash文件是否存在,不存在则提示并退出
xcode_name="Xcode"
if [ -n "$3" ]
then
xcode_name=$3
fi
symbolicatecrash_path="/Applications/${xcode_name}.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash"
if [ ! -e $symbolicatecrash_path ]
then
echo -e "\nerror:文件【${symbolicatecrash_path}】不存在,检查Xcode名称是否为:${xcode_name}\n"
exit
fi
# 创建文件夹,文件夹不存在则新建
ips_dir_name="ips_symbolicatecrash"
if [ ! -d $ips_dir_name ]
then
echo -e "\n创建${ips_dir_name}文件夹"
mkdir $ips_dir_name
fi
ips_dir_path=$(pwd)/$ips_dir_name
# 拷贝文件到文件夹中,并修改ips文件后缀为.crash,直接覆盖
echo -e "\n拷贝文件到文件夹:${ips_dir_path},并修改ips文件后缀为.crash"
cp -f $1 $ips_dir_name
ips_name=$1
ips_name=${ips_name##*/}
ips_name=${ips_name%.*}
mv -f $ips_dir_path/${ips_name}.ips $ips_dir_path/${ips_name}.crash
# 符号化文件
export DEVELOPER_DIR="/Applications/${xcode_name}.app/Contents/Developer"
$symbolicatecrash_path "${ips_dir_path}/${ips_name}.crash" $2 > "${ips_dir_path}/${ips_name}_log.crash"
if [ $? == 0 ]
then
echo -e "\n符号化完成,路径:"${ips_dir_path}/${ips_name}_log.crash"\n"
open ${ips_dir_path}/${ips_name}_log.crash
else
echo -e "\n符号化失败。。。\n"
fi
复制代码
使用:
/bin/bash 脚本全路径 ips文件全路径 dSYM文件全路径
,如下:
/bin/bash /Users/user/Desktop/ips_crash.sh /Users/user/Desktop/ips_crash/CrashTest-2021-06-18-165322.ips /Users/user/Desktop/ips_crash/CrashTest.app.dSYM
复制代码
命令执行成功会在桌面生成一个名为
ips_symbolicatecrash
的文件夹,文件夹中文件名带有_log
后缀的即为符号化之后为文件,如图:
如果应用程序中Xcode的命名不为“Xcode”,如:Xcode_13,则需要在命令之后加上Xcode的名称,/bin/bash 脚本全路径 ips文件全路径 dSYM文件全路径 Xcode名称
,如下:
/bin/bash /Users/user/Desktop/ips_crash.sh /Users/user/Desktop/ips_crash/CrashTest-2021-06-18-165322.ips /Users/user/Desktop/ips_crash/CrashTest.app.dSYM Xcode_13
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END