iOS统计线上异常崩溃日志之Bugly和友盟统计使用笔记

好记性不如烂笔头,之前一直使用的友盟来统计APP线上崩溃日志,今天研究了腾讯下的Bugly,发现比友盟更简单(单纯的收集崩溃日志),之所以这么说,个人觉得有两点:1、继承简单;2、定位到具体代码简单(可能是因为友盟涉及到的种类多吧,然后就显得复杂了),今天就抽空做一下笔记,分析比较一下两者的差别,以便以后用到就不用去翻官方文档了。

Bugly

先来介绍Bugly的使用
1、先去官方注册账号,添加你的产品拿到App IDApp Key

1.png

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显示时间很短,可以说是即时的,这个要和友盟快很多。)


2.png
注:刚开始的时候你应该不会显示到具体的代码(红框部分)。

接下来我们就来看怎么定位到具体的代码。官方介绍两种方法配置,这里我采用的是自动配置,涂省事

1、先去下载自动配置符号表工具包,

2、然后把文件中dSYMUpload.sh中的三个参数修改一下配置,如图

3.png

3、打开你的项目,

4.png

4、将dSYMUpload.sh中的内容复制到下图中对应的位置里面

image.png

注意,如果你不想要的都设置为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的后台看到的崩溃信息就会和之前的不一样了,这次能定位到具体的行代码


image.png

友盟

同样的步骤就不重复了
官网注册账号 --> 登录 --> 添加项目 --> 我的产品 --> 点它

image.png

--> 再点它
image.png

--> 你就能看到你的项目了(说实话,我真是找了半天,不知道在哪找自己的项目,跟个迷宫一样,转晕了,在首页就不能来个搜索吗?原谅我的傻白甜)
image.png

点击管理就能看到你的App key了
image.png

接下来就是在项目中用了,同样是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那样,最多几分钟就能看到了。这个差评
看看昨天的崩溃日志

image.png

接下来就是如果定位到具体的代码了

两步:1、下载错误分析工具解压zip得到umcrashtool文件
2、下载错误列表中的.csv文件

image.png

image.png

然后去报表中心下载
image.png

最后将将umcrashtool与已下载的xxx.csv文件放入同一目录下
image.png

打开终端,1、cd到当前目录下 --> 回车
2、依次输入./umcrashtool+空格 +.csv文件路径(注意:./umcrashtool 与.csv文件路径之间要有空格,如下图) --> 回车
image.png

估计你会看到下图的警告⚠️
image.png

红框内标识你的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并没有限制。

更新:

昨天特意去网上搜了一下,针对友盟的崩溃日志分析(因为我觉得上面的方法很麻烦),无意中发现了一个大神写的dSYMTools,不得不说......我还是很喜欢站在巨人的肩膀上摘苹果这种感觉滴。这里贴上原著,也对作者的分享表示感谢 ---> dSYMTools,具体使用方法里面也写得很清楚,在这里就不赘述了。

你可能感兴趣的:(iOS统计线上异常崩溃日志之Bugly和友盟统计使用笔记)