性能优化03.1:bugly搜集Crash

张建 lol

Bugly 介绍

为了能够快速并准确的定位用户 App 发生 Crash 的代码位置,Bugly 使用 符号表文件 对发生 Crash 的程序 堆栈 进行 解析和还原

举例:

Bugly 上传方式

  • Bugly 已不再支持直接上传dSYM文件,需要 下载工具包手动上传

  • 本文主要介绍 下载工具包手动上传

安装java运行环境

  • 终端查看是否已安装
1
2
3
4
zhangjian@zhangjiandeMBP ~ % java -version
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)

上面的显示表示已安装

  • 未安装的情况如下:

Java官网 下载 jdk,如下图:

下载完成之后打开 dmg,安装、一路下一步即可安装成功。

在终端输入 java -version 可以查看 java 版本,如果输出信息和上面类似,表示安装成功

获取 dSYM 文件

  • 什么是 dSYM 文件?

    • iOS 平台中,dSYM 文件是指 具有调试信息的目标文件,文件名通常为 xxx.app.dSYM

    • 【注】:为了方便找回 Crash 对应的 dSYM文件还原堆栈,建议每次 构建或发布App版本 时,备份好 dSYM文件

  • 获取 dSYM 方式

我们可以配置 Edit Scheme -> Archives 打包 DebugRelease 两种环境,去获取 dSYM文件,本文以 Release 发布环境为例

  • 配置打包环境 Release

  • Show in Finder -> 显示包内容,找到 dSYM文件

  • 最后,在桌面或任意位置,新建一个文件夹如 appdSYM ,将 xxx.app.dSYM 拷贝进来

至此,获取 dSYM文件 完成

工具手动上传符号表

  • 下载 Bugly iOS 符号表 上传工具,如下图:

  • 下载后自动解压,得到 buglyqq-upload-symbol 文件夹

  • 获取dSYM文件UUID

使用命令:xcrun dwarfdump –uuid <dSYM文件>

1
2
mac@bogon ~ % xcrun dwarfdump --uuid /Users/mac/Desktop/UBR_ZJ/buglyqq-upload-symbol/dSYM2.5.3/北京环球.app.dSYM
UUID: 8C8C8509-9B83-35F7-BEB7-C40C1DE5480C (arm64) /Users/mac/Desktop/UBR_ZJ/buglyqq-upload-symbol/dSYM2.5.3/北京环球.app.dSYM/Contents/Resources/DWARF/北京环球
  • cd 到 buglyqq-upload-symbol 文件夹
1
mac@bogon ~ % cd /Users/mac/Desktop/UBR_ZJ/buglyqq-upload-symbol
  • 上传dSYM符号表
1
mac@bogon buglyqq-upload-symbol % java -jar buglyqq-upload-symbol.jar -appid 1964851d56 -appkey dc466ac1-7416-4822-b68b-cc111bac616e -bundleid com.universalbeijingresort.app -version 2.5.3 -platform IOS -inputSymbol /Users/mac/Desktop/UBR_ZJ/buglyqq-upload-symbol/dSYM/北京环球.app.dSYM

【参数说明】:
-addid :在 bugly 上对应的 appid
-appkey :在 bugly 上对应的 appkey
-bundleid : iOS平台的 bundle id
-version :版本号 1.6.2
-platform :平台(注意大小写)IOS Android
-inputSymbol :dSYM调试文件 /Users/mac/Desktop/UBR_ZJ/buglyqq-upload-symbol/dSYM/北京环球.app.dSYM
-inputMapping:mapping所在文件夹目录地址[Android平台特有,ios忽略!

  • 上传成功后,平台显示

自动配置:Xcode + Shell 脚本

自动配置请首先下载和解压 自动配置符号表工具包 ,然后选择上传方式并配置Xcode的编译执行脚本。(目前不支持了)

上传方式

使用脚本自动配置支持两种上传方式(建议用方式二):

  • 方式一:直接上传dSYM文件(默认方式 )
  • 方式二:提取dSYM文件的符号表文件并上传

其中,使用方式二需要额外操作以下几步:

  • 下载符号表提取工具依赖的 Java 运行环境(JRE或JDK版本需要>=1.6)

  • 把工具包 buglySymbolIOS.jar 保存在用户主目录(Home)的 bin 目录下(没有bin文件夹,请自行创建):

配置Xcode编译执行脚本:

  • Xcode 工程对应 TargetBuild Phases 中新增 Run Scrpit Phase

  • 打开工具包中的 dSYM_upload.sh,复制所有内容,在新增的 Run Scrpit Phase 中粘贴

  • 修改新增的 Run Scrpit 中的 为您的 App ID为您的App Key 为App的 Bundle Id

脚本默认在 Debug模式及模拟器 编译情况下 不会上传符号表,在需要上传的时候,请修改下列选项

  • Debug模式编译是否上传,1=上传 0=不上传,默认不上传
  • UPLOAD_DEBUG_SYMBOLS=0
  • 模拟器编译是否上传,1=上传 0=不上传,默认不上传
  • UPLOAD_SIMULATOR_SYMBOLS=0

至此,自动上传符号表脚本配置完毕,Bugly 会在每次 Xcode 工程编译后自动完成符号表配置工作。

项目中使用

  • 项目需要集成cocoapods三方依赖管理工具,用cocoapods集成 Bugly SDK
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
platform :ios, '9.0'

# 忽略所有警告
inhibit_all_warnings!

target 'SRSF' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!

# Pods for SRSF
# 官方提示:三方动态库最好最多是6个

# Bugly
pod 'Bugly'

target 'SRSFTests' do
inherit! :search_paths
# Pods for testing
end

target 'SRSFUITests' do
# Pods for testing
end

end
  • 使用
1
2
3
4
5
6
7
#pragma mark -Bugly
- (void)startBugly{
BuglyConfig * config = [[BuglyConfig alloc] init];
config.debugMode = YES; // Debug信息开关
config.reportLogLevel = BuglyLogLevelWarn; // 设置为BuglyLogLevelWarn,则在崩溃时会上报Warn、Error接口打印的日志
[Bugly startWithAppId:@"AppId" config:config];
}
  • Post title:性能优化03.1:bugly搜集Crash
  • Post author:张建
  • Create time:2023-03-09 05:32:04
  • Post link:https://redefine.ohevan.com/2023/03/09/OC性能优化/性能优化03.1:bugly搜集Crash/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.