A-A+

Bugly iOS 使用文档

2015年08月10日 腾讯云 暂无评论 阅读 329 次浏览 次

一、注册应用获得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;


标签:

评论已关闭!

Copyright © 香港虚拟主机_美国虚拟主机_香港服务器_美国服务器租用托管 保留所有权利.   Theme  Ality 蜀ICP备14006632号-1

用户登录