AppStore 因为崩溃被拒后,通常会附带一些崩溃日志。

查看一下这些崩溃日志,分析一下主要的崩溃原因。
一、利用 Xcode
将下载好的崩溃日志文件后缀 .txt 改为 .ips,右键选择打开方式为 Xcode 打开

Xcode 会定位到崩溃位置。

这里可以看出方法调用顺序,主要关注一下崩溃的方法,这里只是标明了崩溃前的位置,具体的原因还要再分析。
二、利用 ymbolicatecrash 和 dSYM 符号表
1、找到 symbolicatecrash
在终端里输入
find /Applications/Xcode.app -name symbolicatecrash -type f
将 symbolicatecrash 复制出来与 dSYM 符号表放在一个文件夹下
dSYM 符号表可以通过 Archives 下的文件查看包内容找到。

2、转化崩溃文件后缀 .ips 为 .crash
Apple 在 Xcode13.3 已经废弃了 symbolicatecrash,如果不转换崩溃文件格式会报下面的错误
No crash report version in /xxx.crash at ./symbolicatecrash line 1365.
转换方法
打开的 AppleCrashScripts 工具文件夹,将 AppStore 下载的崩溃文件放入该文件夹下

执行转换命令
swift convertFromJSON.swift -i xxx.ips -o log.crash
这里的得到的 log.crash 放到与 symbolicatecrash 、dSYM 符号表同一个文件夹下就能通过 symbolicatecrash 进行解析了
3、解析 .crash 崩溃日志
执行如下终端命令,通过
./symbolicatecrash 待解析的.crash文件路径 .dSYM符号表文件路径 > log.crash
执行前需要设置环境变量 DEVELOPER_DIR
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
打开解析完的 log.crash 文件

通过符号表的解析,左侧的地址解析为右侧的类名及调用的方法了([JCommonCollectLocationManager setupLocationManager])。
对于崩溃的原因参考了一下 iOS-解决定位权限卡顿问题 ,推测是多个应用场景同时调用了获取定位信息导致的系统卡顿然后崩溃,正如大家所共识的,现在的 APP 基本都是框架堆框架,跨平台嵌套跨平台(总之问题变的不再好定位及解决),最后解决方案是启动的时候去掉了一些不必要的定位操作。
三、思考与总结
记录工具的使用,没有复杂的内容,希望能帮助到大家。