Bugly iOS 使用文档
一、注册应用获得AppId(必选)
在Bugly的官网注册并添加应用,获得AppId。
AppId是唯一标识一个产品的ID,初始化SDK及配置符号表时需要使用。
注册完成后即可在产品信息页面查看应用的AppId:
注: 腾讯开放平台用户也需要在Bugly注册对应的iOS产品以获取AppId
二、下载SDK(必选)
下载SDK,选择合适的Framework导入到XCode工程中。
关于SDK大小说明
1. Bugly.framework中包括符号表信息、模拟器架构的静态库等,共17M
2. 集成Bugly编译后,应用安装包大小实际增长仅 350K 左右
SDK包 :通用版本;
SDK越狱扩展包 : 不通用版本,专为越狱App开发者提供的SDK;
符号表工具 :从xxx.app.dSYM文件中提取App符号表信息的工具,用于异常堆栈地址的还原。
SDK包的压缩文件中包括两个.framework文件(分别依赖libc++和libstdc++编译,二者选其一使用即可)和一个SDK接入Demo程序。目录结构如下:
开发者请根据项目的C++ Standard Library配置选择合适的.framework导入。
如果你的XCode工程的C++ Standard Library配置为libc++,请导入Bugly_libc++目录的framework
如果你的XCode工程的C++ Standard Library配置为libstdc++,请导入Bugly_libstdc++目录的framework
三、导入SDK并接入调式(必选)
1、导入.framework到XCode工程
打开XCode项目工程,选择TARGETS,切换到Build Settings,查看C++ Standard Library配置,导入合适的.framework到你的项目中。
2、 配置依赖项
导入完成后,切换到Build Phases,在Link Binary With Libraries中添加下面的依赖项:
注:如果你的项目是依赖libc++,请添加libc++.dylib,移除libstdc++.dylib
3、初始化SDK并接入调式
导入头文件并初始化SDK
在项目的XXXAppDelegate.m源文件中引入头文件,如下:
#import <Bugly/CrashReporter.h>
在application:didFinishLaunchingWithOptions:方法中初始化SDK,如下:
// 初始化SDK, 请使用在Bugly平台上注册应用的 AppId, 注意不要填写AppKey [[CrashReporter sharedInstance] installWithAppId:BUGLY_APP_ID];
注意:如果你的项目中引用了友盟等同类产品,需要把它们的错误收集功能关闭。
友盟关闭异常收集功能:
// 关闭崩溃上报功能, 必须在初始化之前关闭才有效 [MobClick setCrashReportEnabled:NO]; [MobClick startWithAppkey:UMENG_APP_KEY];
TalkingData关闭异常收集功能:
// 关闭崩溃上报功能 [TalkingData setExceptionReportEnabled:NO];
触发异常测试
a. 添加测试代码以触发异常
// 初始化之前,开启调式Log [[CrashReporter sharedInstance] enableLog:YES];
// 测试触发异常方法 - (void)testException{ NSArray * array = @[@"Bugly", @"Test", @"Crash"]; NSLog(@"Bugly Test %@", array[3]); }
b. 编译并在真机设备上运行,中止XCode的Debug模式
请保证你的XCode工程中至少存在一个.mm或.cpp文件,编译时才会执行C++编译
c. 进入XCode->Window->Devices窗口,点击底部的箭头展开控制台面板,查看设备运行时Log
如果你看到以下log,说明SDK注册成功
INFO: install sighandler success
如果你看到以下log,说明异常被捕获
INFO: catch objc ns exception
如果你看到以下log,说明异常信息正在保存
INFO: save one crash
如果你看到以下log,说明异常完成上报
INFO: finish crash uploading.
d. 登录Bugly网站, 查看对应App的issues页面,即可看到上报的数据
其他API调用
你可以通过下面方法设置渠道号信息
// 设置渠道信息,建议SDK初始化之前调用 [[CrashReporter sharedInstance] setChannel:@"bugly_test"];
如果APP有登录态,可以在用户登录后,设置用户的ID
// 设置用户ID, 如果你的APP有登录态, 可以在用户登录后再次调用此接口 [[CrashReporter sharedInstance] setUserId:@"xxxxx"];
四、符号表配置
SDK捕获上报的异常堆栈中都是地址信息,如果想要定位具体的出错位置,需要进行符号表还原。
Bugly提供上传并配置符号表的功能,可以自动的实现堆栈还原。
关于符号表文件
XCode项目编译后,会在product.app所在目录生成product.app.dSYM文件,而product.app.dSYM中就包含了符号表信息,由于.dSYM文件通常较大,我们提供一个符号表提取工具,可以从.dSYM中提取简要的符号表信息进行压缩上传。
1. 提取符号表
下载符号表工具,在Mac的终端程序中执行符号表工具提取symbol信息。
java -jar buglySymbolIOS_1.0.jar -i product.app.dSYM/Contents/Resources/DWARF/product -o product.app.symbol.zip
参数 -o 的值必须.zip结尾;如果没有设置 -o xxx.zip,那么生成的.zip在DWARF目录下
执行完毕后,会在 product.app.dSYM的同级目录生成 product.app.symbol.zip文件。
注意:如果执行过程出现OOM异常,请在执行jar时调整jvm内存大小,如下:
java -Xms512m -Xmx1024m -jar buglySymbolIOS_1.0.jar …
2. 配置符号表
在Bugly网站上,打开”我的App“列表,点击“修改”,进入“设置”->“版本管理”,选择需要配置的版本上传生成的.zip文件即可
五、高级功能(可选)
1、合并上报
Bugly支持合并上报功能,用于节省流量以及应对个别极端情况(越狱情况下进程可能不断拉起然后crash并上报)。
合并上报支持将同一天内同一个crash合并,只上报第一次,之后相同的异常只会更新数据次数,在后面的日期再进行上报并且带有上报次数。
[[CrashReporter sharedInstance] setExpMergeUpload:YES];
2、Crash回调
当发生crash的时候,Bugly会在记录crash之后会调用回调函数,应用可以通过实现一个回调函数完成一些自己的记录工作(如保存现场数据等)。回调函数定义如下:
typedef int (*exp_callback) (); extern exp_callback exp_call_back_func; 实现参考: Int my_exp_callback() { //自己做个记录 ... ... //为上报crash增加一些附加信息 [[CrashReporter sharedInstance] setAttachLog:@”addtional log”]; } exp_call_back_func = &my_exp_callback;//赋值回调函数
3、进程内还原支持
Bugly可以通过API开启进程内还原,进程内还原只能得到函数信息而不能得到代码文件行号等信息。注意,如果应用的设置里面STRIP选项是ALL Symbols,那么还原是会出现错误的,不能开启进程内还原。
[[CrashReporter sharedInstance] setEnableSymbolicateInProcess:YES];
4、Crash过滤
Bugly支持crash上报的过滤,有两个API,一个是exclude过滤凡是crash堆栈的模块名中包含相应关键字的就不予上报(比如SogouInput这个第三方的输入法,其实不是应用自身的crash),第二个是Include过滤只有包含特定关键字的才上报。
//设置crash过滤,以shortname为基准(例如SogouInput),如果包括则不进行记录和上报 -(BOOL) setExcludeShortName:(NSArray*) shortNames; //设置只上报存在关键字的crash列表 -(BOOL) setIncludeShortName:(NSArray*) shortNames;
5、越狱非沙箱进程的支持
非沙箱进程没有bundle信息,并且没有应用对应的document等目录,进程需要单独接入Bugly并在启动时额外设置这些参数。
///设置bundle的信息,用于特定进程没有bundle信息 [[CrashReporter sharedInstance] setBundleId:@””]; [[CrashReporter sharedInstance] setBundleVersion:@””]; //重新设置db路径,非沙箱应用会获取到系统document目录,必须在install之前调用 [[CrashReporter sharedInstance] resetDBPath:@””];
6、集成帮助
可以通过打开Bugly的log来帮助应用接入,log中会显示Bugly的主要流程的log数据。
[[CrashReporter sharedInstance] enableLog:(YES];
六、卡顿监控
开启/关闭 卡顿监控功能,默认开启
- (void)enableBlockMonitor:(BOOL) monitor autoReport:(BOOL) reporter;
评论已关闭!