第一部分“使用Bugly”是我第一次使用Bugly时的记录,第二部分“Bugly的简单使用”是我搞明白怎么用之后的简单总结。如果已经看完了Bugly的官方文档的话直接跳过第一部分即可,因为第一部分比较乱,但是也有可读性,记录了第一次使用过程中的问题。
Bugly是腾讯日志上报的SDK,有异常上报和运营统计上报。App集成后,即可在Web站点查看应用上报的崩溃数据和联网数据。
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管理后台查看奔溃日志统计,在异常上报里已经将刚才的闪退堆栈信息统计到了,可以直接查看。
挺好用的。
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扩展,就怀疑好像用法不对。
 ̄□ ̄||尴尬了…
分割线
Bugly iOS 符号表配置
什么事符号表?符号表的作用是什么?在App中有什么用?怎么用?对我们的项目有什么帮助?带着疑问读文档。
假设上面的问题已经大体上明白了,再看配置符号表,即在项目中的使用。
下载工具包,里面有一个buglySymboliOS.jar和一个脚本文件。
文档上说“选择上传方式并配置Xcode的编译执行脚本“,看来这个脚本是添加到Xcode中的,编译就会执行。上传是生么鬼?
文档说有两种上传方式
文档:
使用脚本自动配置支持两种上传方式:
方式一:直接上传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等。
感觉有点模棱两可,可能需要补充一些其他知识才能明白吧。
下载最新版Bugly iOS符号表工具,其中工具包中包括:
符号表工具JAR包(buglySymboliOS.jar)
Windows的脚本(buglySymboliOS.bat)
Shell脚本(buglySymboliOS.sh)
默认符号表配置文件(settings.txt)
符号表工具iOS版-使用指南
根据Crash的UUID定位dSYM文件
使用工具生成符号表文件(zip文件)
在页面上传符号表文件
这个符号表工具iOS版-使用指南还是需要仔细阅读的,里面有很多说明。
好吧,看完了我还是没明白怎么上传符号表,符号表到底是个什么东西。
看了下网上开发者写的帖子,一目了然了。
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)
在项目的Products->xxx.app下,show in Finder,里面找到xxx.app.dSYM。
如果Debug环境下没有dSYM文件,需要在Xcode->TARGET->Building Setting->Build Options下,将Debug Information Format改成DWARF with dSYM File。
XCode -> Build Settings -> Code Generation -> Generate Debug Symbols -> Yes,新版本的Xcode默认就是yes,这里不用管。
这是Bugly提供的符号表文件分析工具。
在桌面创建一个文件夹,将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的路径。
上传完后在奔溃分析->异常上报->符号表查看是否上传。
如果自己已经上传了但是任然出现未上传的情况,需要将工具包里的脚本文件添加到Xcode里,并修改Appid和AppKey并编译。
略…
以下仅代表个人观点
友盟管理后台改版后感觉比较难用,经常找不到需要找的页面,Bugly就很好找,一目了然。
对于错误分析,友盟的分析工具比和Bugly的用起来都差不多,但是Bugly关于符号表的文档描述不是很清楚。
对于错误的统计及时性,我感觉Bugly比友盟及时。
pod ‘Bugly’,如果Extension App中也需要统计,还需要在Extension App中pod ‘BuglyExtension’。
集成完后,注册,设置日志等,详情见官方文档。
如果不使用符号表,直接用Bugly也是可以统计奔溃日志的,但是不能讲堆栈信息转成对应的类名等。需要将堆栈信息符号化,需要使用符号表。
下载Bugly官方文档中提供的工具,将App的dSYM文件和buglySymboliOS.jar放同一个文件夹
执行如下操作
$ cd /Users/vhall/Desktop/符号表文件
$ java -jar buglySymbolIOS.jar -i /Users/vhall/Desktop/符号表文件/BuglyTest.app.dSYM
生成一个压缩文件,这是需要上传到管理后台的文件。
将生成的压缩文件直接传到管理后台即可。
下载工具包后解压
有一个脚本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里配置让自动上传。这里手动执行脚本上传只是我自己本地做了个测试。
1、将脚本添加到Xcode,修改BUGLY_APP_ID,BUGLY_APP_KEY,BUNDLE_IDENTIFIER。
2、把工具包buglySymbolIOS.jar保存在用户主目录(Home)的bin目录下(没有bin文件夹,请自行创建)
打开终端默认就是在Home目录下,然后open .打开Home目录,创建bin文件夹,将buglySymbolIOS.jar拷贝进去
编译之后符号表就直接就上传到管理后台了。
略…