iOS ips文件符号化(脚本)

前言:

应用在使用的过程中如果产生崩溃,手机会生成一个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后缀的即为符号化之后为文件,如图:

符号化.png

如果应用程序中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
喜欢就支持一下吧
点赞0 分享