Bugly使用

Bugly使用

第一部分“使用Bugly”是我第一次使用Bugly时的记录,第二部分“Bugly的简单使用”是我搞明白怎么用之后的简单总结。如果已经看完了Bugly的官方文档的话直接跳过第一部分即可,因为第一部分比较乱,但是也有可读性,记录了第一次使用过程中的问题。

文章目录

  • Bugly使用
    • 一、使用Bugly
      • 1、统计奔溃信息Bugly SDK
      • 2、Bugly Extension SDK
      • 3、Bugly iOS 符号表
        • 3.1 配置符号表
          • 3.1.1 自动配置:XCode + sh脚本
          • 3.1.2 手动配置
          • 3.1.3 符号表的使用
            • 3.1.3.1 安装jdk
            • 3.1.3.2 找到dSYM文件
            • 3.1.3.3 下载Bugly的符号表工具
            • 3.1.3.4 上传生成了文件到管理后台
            • 3.1.3.5 查看crash
      • 4、Bugly和友盟错误分析的对比
    • 二、Bugly的使用(精简版)
      • 1、集成和使用
      • 2、日志分析
        • 2.1 生成符号表文件
        • 2.2 上传符号表文件
          • 2.2.1 手动上传
          • 2.2.2 手动执行脚本上传
          • 2.2.3 Xcode配置脚本上传
        • 2.3 查看奔溃日志

一、使用Bugly

Bugly是腾讯日志上报的SDK,有异常上报和运营统计上报。App集成后,即可在Web站点查看应用上报的崩溃数据和联网数据。

1、统计奔溃信息Bugly SDK

Bugly iOS SDK 使用指南

如果只是统计简单的奔溃日志的话,集成Bugly这个SDK就可以了。

pod ‘Bugly’

需要去后台创建一个应用,并生成appId

引入头文件#import

注册Bugly

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    [Bugly startWithAppId:k_Bugly_AppId];//注册
    [BuglyLog initLogger:BuglyLogLevelVerbose consolePrint:YES];//设置日志
    return YES;
}

然后做一个测试,弄一个简单的闪退试试看

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
    [dict setObject:@"bugly test" forKey:nil];
}

进入App,点击,闪退

控制台将奔溃堆栈日志打印了出来

2019-11-11 14:03:26.625 BuglyTest[523:209320] : [BLYLog]  Trapped uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSDictionaryM setObject:forKey:]: key cannot be nil' 
(
	0   CoreFoundation                      0x00000001d2649294  + 252
	1   libobjc.A.dylib                     0x00000001d18239f8 objc_exception_throw + 56
	2   CoreFoundation                      0x00000001d25c2ce8 _CFArgv + 0
	
...

然后去Bugly管理后台查看奔溃日志统计,在异常上报里已经将刚才的闪退堆栈信息统计到了,可以直接查看。

挺好用的。

2、Bugly Extension SDK

iOS App Extension SDK 使用指南

BuglyExtension SDK是做什么用的呢?

先按照文档来弄弄看吧。

Bugly Extension 依赖于 Bugly iOS SDK 1.2.9 及以上版本

pod ‘BuglyExtension’

引入头文件#import

注意需要在入口的 ViewController.h 中导入头文件

我是先pod Bugly,之后pod BuglyExtension的,pod完之后编译一下报下面错误:

duplicate symbol _WatchExtensionHandlerKey in: /Users/vhall/Desktop/BuglyTest/Pods/Bugly/Bugly.framework/Bugly(libBugly.a-arm64-master.o) /Users/vhall/Desktop/BuglyTest/Pods/BuglyExtension/BuglyExtension.framework/BuglyExtension(RqdCrashReporterLiteException.o) duplicate symbol _WatchExtensionExceptionDataKey in: /Users/vhall/Desktop/BuglyTest/Pods/Bugly/Bugly.framework/Bugly(libBugly.a-arm64-master.o) /Users/vhall/Desktop/BuglyTest/Pods/BuglyExtension/BuglyExtension.framework/BuglyExtension(RqdCrashReporterLiteException.o) duplicate symbol _OBJC_CLASS_$_RqdCrashReporterLiteException in: /Users/vhall/Desktop/BuglyTest/Pods/Bugly/Bugly.framework/Bugly(libBugly.a-arm64-master.o) /Users/vhall/Desktop/BuglyTest/Pods/BuglyExtension/BuglyExtension.framework/BuglyExtension(RqdCrashReporterLiteException.o) duplicate symbol _OBJC_METACLASS_$_RqdCrashReporterLiteException in: /Users/vhall/Desktop/BuglyTest/Pods/Bugly/Bugly.framework/Bugly(libBugly.a-arm64-master.o) /Users/vhall/Desktop/BuglyTest/Pods/BuglyExtension/BuglyExtension.framework/BuglyExtension(RqdCrashReporterLiteException.o) duplicate symbol _WatchExtensionHandlerMessage in: /Users/vhall/Desktop/BuglyTest/Pods/Bugly/Bugly.framework/Bugly(libBugly.a-arm64-master.o) /Users/vhall/Desktop/BuglyTest/Pods/BuglyExtension/BuglyExtension.framework/BuglyExtension(RqdCrashReporterLiteException.o) ld: 5 duplicate symbols for architecture arm64 clang: error: linker command failed with exit code 1 (use -v to see invocation)
Bugly.framework 和 BuglyExtension.framework有重复文件。

到这还是不清楚这个BuglyExtension SDK是做什么用的呢?

是不是不是这么用的啊,第一次用,文档也没说,有点蒙圈。

然后通过Bugly问题反馈问了一下 BuglyExtension SDK是做什么用的呢?我查到了一个问题:

iOS SDK和iOSExtension SDK的区别

回答是:

1.iOS SDK包:用于收集主程序的崩溃、卡顿,统计APP的运营数据等(详细功能可以进入更新历史进行了解)
2.iOS Extension SDK包:用于收集扩展中的崩溃,在集成时,需要集成在你的APP的扩展中(扩展是iOS 8中引入的一个非常重要的新特性,如果你的APP无扩展不用集成Extension SDK)

分割线

请忽略上面Bugly Extension SDK的使用尝试,原来这个是给自己App的扩展App用的,用于手机扩展App的日志的,工程和Bugly应该是一样的。

怪不得文档上说,要将头文件引入到InterfaceController.m,当时看的时候我还想哪里来个InterfaceController.m的,再想想App扩展,就怀疑好像用法不对。

 ̄□ ̄||尴尬了…

分割线

3、Bugly iOS 符号表

Bugly iOS 符号表配置

什么事符号表?符号表的作用是什么?在App中有什么用?怎么用?对我们的项目有什么帮助?带着疑问读文档。

假设上面的问题已经大体上明白了,再看配置符号表,即在项目中的使用。

3.1 配置符号表

下载工具包,里面有一个buglySymboliOS.jar和一个脚本文件。

文档上说“选择上传方式并配置Xcode的编译执行脚本“,看来这个脚本是添加到Xcode中的,编译就会执行。上传是生么鬼?

文档说有两种上传方式

3.1.1 自动配置:XCode + sh脚本

文档:

使用脚本自动配置支持两种上传方式:
	方式一:直接上传dSYM文件(默认方式 )

	方式二:提取dSYM文件的符号表文件并上传

其中,使用方式二需要额外操作以下几步:
	下载符号表提取工具依赖的Java运行环境(JRE或JDK版本需要>=1.6)

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

”提取dSYM文件的符号表文件并上传其中“,这说法有点模棱两可,上传其中是上传到哪里去呢?

“使用方式二需要额外操作以下几步”,意思是方式一不用下面几个步骤吗?那方式一是怎么传呢?

如果说方式一不需要”额外操作以下几个步骤“的话,是不需要设置脚本的,前面又说“选择上传方式并配置Xcode的编译执行脚本”。

“下载符号表提取工具依赖的Java运行环境(JRE或JDK版本需要>=1.6)”然后呢?下载了干什么用?

有一些疑问,文档里也没说。肿么整呢?

先把buglySymbolIOS.jar保存在用户主目录(Home)的bin目录下吧。

然后配置一下Xcode的脚本。

配置完修改脚本里面的App id等。

感觉有点模棱两可,可能需要补充一些其他知识才能明白吧。

3.1.2 手动配置
下载最新版Bugly iOS符号表工具,其中工具包中包括:
符号表工具JAR包(buglySymboliOS.jar)
Windows的脚本(buglySymboliOS.bat)
Shell脚本(buglySymboliOS.sh)
默认符号表配置文件(settings.txt)
符号表工具iOS版-使用指南
根据Crash的UUID定位dSYM文件

使用工具生成符号表文件(zip文件)

在页面上传符号表文件

这个符号表工具iOS版-使用指南还是需要仔细阅读的,里面有很多说明。

好吧,看完了我还是没明白怎么上传符号表,符号表到底是个什么东西。

3.1.3 符号表的使用

看了下网上开发者写的帖子,一目了然了。

3.1.3.1 安装jdk

java运行必要的环境IDE。

安装完后,打开终端验证一下,java -version显示jdk的版本

mengxiang:BuglyTest vhall$ java --version java 13.0.1 2019-10-15 Java(TM) SE Runtime Environment (build 13.0.1+9) Java HotSpot(TM) 64-Bit Server VM (build 13.0.1+9, mixed mode, sharing)

3.1.3.2 找到dSYM文件

在项目的Products->xxx.app下,show in Finder,里面找到xxx.app.dSYM。

如果Debug环境下没有dSYM文件,需要在Xcode->TARGET->Building Setting->Build Options下,将Debug Information Format改成DWARF with dSYM File。

Bugly使用_第1张图片

XCode -> Build Settings -> Code Generation -> Generate Debug Symbols -> Yes,新版本的Xcode默认就是yes,这里不用管。

Bugly使用_第2张图片

3.1.3.3 下载Bugly的符号表工具

这是Bugly提供的符号表文件分析工具。

Bugly使用_第3张图片

在桌面创建一个文件夹,将buglySymboliOS.jar放入里面,然后将dSYM文件文件也放入里面,打开终端即可生成一个压缩文件,这个压缩文件就是要上传到App管理后台的文件。

例:我本地桌面创建了一个“符号表文件”的文件夹,我将buglySymboliOS.jar和BuglyTest.app.dSYM都放了进去,然后终端依次执行如下:

$ cd /Users/vhall/Desktop/符号表文件
ls
BuglyTest.app.dSYM	buglySymboliOS.jar
$ java -jar buglySymbolIOS.jar -i /Users/vhall/Desktop/符号表文件/BuglyTest.app.dSYM

Bugly Symtab Tool for iOS: 2.4.3
[SymtabTool-I] Extracting symtab file: BuglyTest
[SymtabTool-I] Begin to parse file: /Users/vhall/Desktop/符号表文件/BuglyTest.app.dSYM/Contents/Resources/DWARF/BuglyTest
[SymtabTool-I] Architecture: arm64
[SymtabTool-I] Successfully parsed the file!
[SymtabTool-I] Begin to parse file: /Users/vhall/Desktop/符号表文件/BuglyTest.app.dSYM/Contents/Resources/DWARF/BuglyTest
[SymtabTool-I] Architecture: arm64
[SymtabTool-I] Successfully parsed the file!
[SymtabTool-I] Begin to extract symbol table....
[SymtabTool-I] Successfully to extract symbol table!
[SymtabTool-I] Begin to create symtab file: /Users/vhall/Desktop/符号表文件/BuglyTest.app.dSYM/Contents/Resources/DWARF/buglySymbol&BuglyTest&arm64&0a1bcf066fae3249bf0bc68b96b0fa31.symbol
[SymtabTool-I] Successfully created symtab file!
[SymtabTool-I] Begin to zip symtab file: /Users/vhall/Desktop/符号表文件/buglySymbol_BuglyTest_arm64-0a1bc.zip
[SymtabTool-I] Successfully zipped symtab file!

简要步骤:

$ cd /Users/vhall/Desktop/符号表文件

$ java -jar buglySymbolIOS.jar -i /Users/vhall/Desktop/符号表文件/BuglyTest.app.dSYM

这里/Users/vhall/Desktop/符号表文件/BuglyTest.app.dSYM是BuglyTest.app.dSYM文件的路径。因为我直接cd到buglySymbolIOS.jar所在的文件夹下了,所以无需指定buglySymbolIOS.jar的路径。

3.1.3.4 上传生成了文件到管理后台

上传完后在奔溃分析->异常上报->符号表查看是否上传。

在这里插入图片描述

如果自己已经上传了但是任然出现未上传的情况,需要将工具包里的脚本文件添加到Xcode里,并修改Appid和AppKey并编译。

3.1.3.5 查看crash

略…

4、Bugly和友盟错误分析的对比

以下仅代表个人观点

  • 友盟管理后台改版后感觉比较难用,经常找不到需要找的页面,Bugly就很好找,一目了然。

  • 对于错误分析,友盟的分析工具比和Bugly的用起来都差不多,但是Bugly关于符号表的文档描述不是很清楚。

  • 对于错误的统计及时性,我感觉Bugly比友盟及时。

二、Bugly的使用(精简版)

1、集成和使用

pod ‘Bugly’,如果Extension App中也需要统计,还需要在Extension App中pod ‘BuglyExtension’。

集成完后,注册,设置日志等,详情见官方文档。

2、日志分析

如果不使用符号表,直接用Bugly也是可以统计奔溃日志的,但是不能讲堆栈信息转成对应的类名等。需要将堆栈信息符号化,需要使用符号表。

2.1 生成符号表文件

下载Bugly官方文档中提供的工具,将App的dSYM文件和buglySymboliOS.jar放同一个文件夹

执行如下操作
$ cd /Users/vhall/Desktop/符号表文件

$ java -jar buglySymbolIOS.jar -i /Users/vhall/Desktop/符号表文件/BuglyTest.app.dSYM

生成一个压缩文件,这是需要上传到管理后台的文件。

2.2 上传符号表文件

2.2.1 手动上传

将生成的压缩文件直接传到管理后台即可。

2.2.2 手动执行脚本上传

下载工具包后解压

有一个脚本dSYMUpload.sh,需要填写里面的BUGLY_APP_ID,BUGLY_APP_KEY,BUNDLE_IDENTIFIER。

以下是执行脚本文件的过程已经报错

$ cd /Users/vhall/Desktop/BuglydSYMUploader //进入BuglydSYMUploader目录下
$ ls
buglySymboliOS.jar	dSYMUpload.sh
$ ./dSYMUpload.sh //执行脚本
-bash: ./dSYMUpload.sh: Permission denied //没权限执行
$ sudo ./dSYMUpload.sh //管理员身份执行
sudo: ./dSYMUpload.sh: command not found //没权限执行
$ sudo dSYMUpload.sh
sudo: dSYMUpload.sh: command not found
$ sudo
usage: sudo -h | -K | -k | -V
usage: sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user]
usage: sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command]
usage: sudo [-AbEHknPS] [-C num] [-g group] [-h host] [-p prompt] [-u user] [VAR=value] [-i|-s] []
usage: sudo -e [-AknS] [-C num] [-g group] [-h host] [-p prompt] [-u user] file ...
$
$ head -1 ./dSYMUpload.sh
#!/bin/sh
$ pwd
/Users/vhall/Desktop/BuglydSYMUploader
$ ls
buglySymboliOS.jar	dSYMUpload.sh
$ sudo /bin/sh dSYMUpload.sh //执行脚本,上面步骤可以直接跳过直接执行这里

//报错信息,appid,appkey什么的参数没填
Usage: dSYMUpload.sh       [upload_dsym_only]

--------------------------------
Error: Bugly App ID not defined. Please set 'BUGLY_APP_ID'
--------------------------------

报错信息是App ID not defined,提示我们使用

dSYMUpload.sh 来上传

对应的参数是appId,appKey,identifier,版本号,dSYM文件路径,buglySymboliOS.jar的文件路径。

这样本地执行脚本上传太麻烦了,有点本末倒置,不建议这样用,Bugly的脚本是推荐在Xcode里配置让自动上传。这里手动执行脚本上传只是我自己本地做了个测试。

2.2.3 Xcode配置脚本上传

1、将脚本添加到Xcode,修改BUGLY_APP_ID,BUGLY_APP_KEY,BUNDLE_IDENTIFIER。

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

打开终端默认就是在Home目录下,然后open .打开Home目录,创建bin文件夹,将buglySymbolIOS.jar拷贝进去

编译之后符号表就直接就上传到管理后台了。

2.3 查看奔溃日志

略…

你可能感兴趣的:(#,第三方,Bugly,符号表)