好记性不如烂笔头,之前一直使用的友盟
来统计APP线上崩溃日志,今天研究了腾讯下的Bugly
,发现比友盟更简单(单纯的收集崩溃日志),之所以这么说,个人觉得有两点:1、继承简单;2、定位到具体代码简单(可能是因为友盟涉及到的种类多吧,然后就显得复杂了),今天就抽空做一下笔记,分析比较一下两者的差别,以便以后用到就不用去翻官方文档了。
Bugly
先来介绍Bugly的使用
1、先去官方注册账号,添加你的产品拿到App ID
和App Key
2、集成直接pod
pod 'Bugly'
AppDelegate.m
#import
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[Bugly startWithAppId:@"上面拿到的App ID"];
}
好了,到这里就搞定了。你可以在你的项目中写一个数组越界的bug,例如,我在ViewController中添加了一个button,点击的时候就会出现崩溃,
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
btn.backgroundColor = [UIColor redColor];
[btn addTarget:self action:@selector(btnDidClick) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];
}
-(void)btnDidClick
{
NSArray *arr = @[@"1",@"2",@"3"];
NSLog(@"---%@",arr[3]);
}
大约不到一分钟我们可以在Bugly的后台看到崩溃信息,(这里在Bugly显示时间很短,可以说是即时的,这个要和友盟快很多。)
注:刚开始的时候你应该不会显示到具体的代码(红框部分)。
接下来我们就来看怎么定位到具体的代码。官方介绍两种方法配置,这里我采用的是自动配置,涂省事
1、先去下载自动配置符号表工具包,
2、然后把文件中dSYMUpload.sh
中的三个参数修改一下配置,如图
3、打开你的项目,
4、将dSYMUpload.sh
中的内容复制到下图中对应的位置里面
注意,如果你不想要的都设置为0:
UPLOAD_DSYM_ONLY=1
#
# # 脚本默认配置的版本格式为CFBundleShortVersionString(CFBundleVersion), 如果你修改默认的版本格式, 请设置此变量, 如果不想修改, 请忽略此设置
# CUSTOMIZED_APP_VERSION=""
#
# # Debug模式编译是否上传,1=上传 0=不上传,默认不上传
UPLOAD_DEBUG_SYMBOLS=1
#
# # 模拟器编译是否上传,1=上传 0=不上传,默认不上传
UPLOAD_SIMULATOR_SYMBOLS=1
#
# #只有Archive操作时上传, 1=支持Archive上传 0=所有Release模式编译都上传
UPLOAD_ARCHIVE_ONLY=1
然后运行Xcode,再去Bugly的后台看到的崩溃信息就会和之前的不一样了,这次能定位到具体的行代码
友盟
同样的步骤就不重复了
官网注册账号 --> 登录 --> 添加项目 --> 我的产品 --> 点它
--> 再点它
--> 你就能看到你的项目了(说实话,我真是找了半天,不知道在哪找自己的项目,跟个迷宫一样,转晕了,在首页就不能来个搜索吗?原谅我的傻白甜)
点击
管理
就能看到你的App key了
接下来就是在项目中用了,同样是pod
pod 'UMCCommon'
pod 'UMCAnalytics'
然后在AppDelegate
里面,两句代码
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
/** 初始化友盟所有组件产品
@param appKey 开发者在友盟官网申请的AppKey.
@param channel 渠道标识,可设置nil表示"App Store".
*/
[UMConfigure initWithAppkey:UmAppKey channel:@""];
/** 设置 统计场景类型,默认为普通应用统计:E_UM_NORMAL
@param 游戏统计设置为:E_UM_GAME.Dplus统计设置为:E_UM_DPLUS
*/
[MobClick setScenarioType:E_UM_NORMAL];
/** 开启CrashReport收集, 默认YES(开启状态).
@param value 设置为NO,可关闭友盟CrashReport收集功能.
@return void.
*/
// [MobClick setCrashReportEnabled:NO]; // 关闭Crash收集
return YES;
}
然后同样的,写一个数组越界的方法,运行,返回友盟控制台,好了,这时候问题来了,这时候你就会发现,友盟迟迟没有返回来崩溃日志,这就是前面提到的,和Bugly不同的,友盟的反射弧超级长,,反正我是第二天才看到了头一天的崩溃日志,不像Bugly那样,最多几分钟就能看到了。这个差评
看看昨天的崩溃日志
接下来就是如果定位到具体的代码了
两步:1、下载错误分析工具解压zip得到umcrashtool
文件
2、下载错误列表中的.csv
文件
然后去报表中心下载
最后将将
umcrashtool
与已下载的xxx.csv
文件放入同一目录下
打开终端,1、cd到当前目录下 --> 回车
2、依次输入
./umcrashtool
+空格
+.csv文件路径
(注意:./umcrashtool 与.csv文件路径之间要有空格,如下图) --> 回车
估计你会看到下图的警告⚠️
红框内标识你的dsym文件并不是以
D56B3C...
命名的,那么这个dsym
是在哪里找到的,我们在打包的时候,会生成一个Archive
文件,Show in Finder,显示包内容找到UM_demo.app.dsym
文件,将名字改成上面终端里面给你的那个D56B3C55-B566-312E-A5F0-0DBF473C6175.app.dsym
,然后重新执行上面的命令,你就会看到错误信息能具体定位到哪一行了,注:友盟关于数组越界这种bug并不能准确分析出是哪一行代码出现问题
这是官方给的错误分析介绍,想要了解的童鞋敬请移步
对比两者:
1、时间:Bugly可以堪称即时性,友盟...反射弧超级长;
2、定位准确度:Bugly优于友盟;
3、操作难易度:Bugly可以进行自动配置符号表,友盟只能进行手动操作(反正我觉得没有Bugly用起来简单);
4、友盟每天只能统计1000个错误,第二天会重置次数,而Bugly并没有限制。