使用Crashlytics来保存应用崩溃信息

本文首发于InfoQ,版权归InfoQ所有,转载请保留原文链接

简介

Crashlytic 成立于2011年,是专门为移动应用开者发提供的保存和分析应用崩溃信息的工具。Crashlytics的使用者包括:支付工具Paypal, 点评应用Yelp, 照片分享应用Path, 团购应用GroupOn等移动应用。

2013年1月,Crashlytics被Twitter收购,成为又一个成功的创业产品。被收购之后,由于没有了创业公司的不稳定因素,我们更有理由使用它来分析应用崩溃信息。

使用Crashlytics的好处有:

1、Crashlytics不会漏掉任何应用崩溃信息。拿我的应用举例来说,在iTunes Connect的后台查看不到任何崩溃信息。但是用户确实会通过微博或者客服电话反馈应用崩溃的情况。而这些在Crashlytics中都可以统计到。如下截图分别显示了我的某应用在苹果iTunes Connect后台和Crashlytics中的差别:

2、Crashlytics可以象Bug管理工具那样,管理这些崩溃日志。例如:Crashlytics会根据每种类型的Crash的出现频率以及影响的用户量来自动设置优先级。对于每种类型的Crash,Crashlytics会除了象一般的工具提供Call Stack外,还会显示更多相关的有助于诊断的信息例如设备是否越狱,当时的内存量,当时的iOS版本等。对于修复掉的Crash日志,可以在Crashlytics的后台将其关掉。下图所示的是一个我的早期应用的崩溃记录,在我修复后,我将其更新为已修复状态。

3、Crashlytics可以每天和每周将崩溃信息汇总发到你的邮箱,所有信息一目了然。

下面我就给大家介绍如何使用Crashlytics。

使用介绍

申请帐号

Crashlytics的服务是免费提供的,但是并不能直接注册使用,需要先申请,打开Crashlytic的官网 ,输入自己的邮箱申请使用。如下图所示:

提交完邮箱之后,你的申请会放在Crashlytics的申请队列中,网页跳转到如下界面。在这个界面的右侧,你可以提供更多有效信息来让Crashlytics优先处理你的申请,建议大家都填上更多自己的信息。

如果顺利,通常1-2天左右,你就会收到Crashlytics发来的申请通过邮件,如下图所示,通过邮件链接跳转到注册界面,填写密码即可完成注册。

设置工程

在使用Crashlytics前需要对原有的XCode工程进行配置,在这一点上,Crashlytics做得比其它任何我见过的SDK提供商都体贴。因为Crashlytics专门做了一个Mac端的App来帮助你进行配置,所以,在配置前你先需要去这里下载该应用。

应用下载后,运行该应用并登录帐号。然后选择应用中的”New App”按钮,然后选择自己要增加Crashlytics的工程,然后Crashlytics的应用会提示你为工程增加一个Run Script,如果你不知道如何添加,这里有一个帮助的文档。添加好之后的工程截图如下所示

接着,Crashlytics的本地应用会提示你将Crashlytics相关的framework拖到工程中。如下所示:

按照提示做完之后,就到了最后一步了,在AppDelegatedidFinishLaunchingWithOptions方法中加入如下代码:

1 2 3 4 5 6
#import <Crashlytics/Crashlytics.h> - (BOOL)application:(UIApplication *)application  didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  [Crashlytics startWithAPIKey:@"your identify code"]; } 

之后,运行一下程序,Crashlytics就会检测到你设置成功。如果你感兴趣,可以自己手工触发一个崩溃记录,看Crashlytics能否帮你收集到。使用如下代码即可

1
[[Crashlytics sharedInstance] crash]; 

如果你想测试一个Exception导致的崩溃,可以使用如下代码:

1 2
[NSObject doesNotRecognizeSelector]; [arrayWithOnlyTwoElements objectAtIndex:3]; 

应用对外发布后,就可以在Crashlytics后台查看和修改相关的记录。另外,Crashlytics还支持将数据导入到其它项目管理工具(例如Redmine或Jira)如下所示,配置都非常简单。

实现原理和使用体会

实现原理

在原理上,Crashlytics的通过以下2步完成崩溃日志的上传和分析:

  1. 提供应用SDK,你需要在应用启动时调用其SDK来设置你的应用。SDK会集成到你的应用中,完成Crash信息的收集和上传。
  2. 修改工程的编译配置,加入一段代码,在你每次工程编译完成后,上传该工程对应的dSYM文件。研究过手工分析Crash日志的同学应该知道,只有通过该文件,才能将Crash日志还原成可读的Call Stack信息。

使用体会

为了更加方便开发者设置相应的工程,Crashlytics提供了mac端的应用程序,帮助你检测相关工程是否正确设置并且提供相应的帮助信息。后来我还发现,该程序还会自动帮你升级Crashlytics的SDK文件。虽然这一点很体贴,但是我个人觉得还是不太友好。因为毕竟修改SDK会影响应用编译后的内部逻辑,在没有任何通知的情况下升级,我都无法确定Crashlytics有没有干坏事。不过国外的服务,特别是象Twitter这种相对较大知名度公司提供的服务要有节操得多,所以在这一点上我还是比较放心的。

使用Crashlytics可以让你摆脱管理应用崩溃记录的烦恼。并且帮助你找出应用的一些重大隐藏性Bug。例如我之前写的一个应用就过一个缓存过期的问题,只有当缓存过期时才会触发这个Bug,这样的问题在测试人员那边很难触发,因为他们不可能了解你的应用内部实现细节。通过Crashlytics,使我清楚了解到应用Crash的数量和位置,结合自己的开发经验,就很容易找到问题所在了。

值得一提的是,Crashlytics本身的官方文档也非常健全,如果你在使用中遇到任何问题,也可以上去查看详细的文档。

愿Crashlytics能让大家的应用都更加健壮~

 

使用Crashlytics来保存应用崩溃信息的更多相关文章

  1. Android将应用程序的崩溃信息如何保存到本地文件,并上传服务器

    导语:最近实在是太忙了,没有怎么更新公众号,也没有怎么认真去写一些内容,在这里先给关注我的朋友说一声抱歉,可能在接下来的一段时间,还是很忙,但是我会争取抽空多分享一下技术文章,给大家看,共同进步,也希 ...

  2. 获取app崩溃信息的途径 iOS

    获取崩溃日志的几种方法: 1.当用户抱怨闪退时,你可以要求他让设备与iTunes同步,设备与电脑上的iTunes Store同步后,会将崩溃日志保存在电脑上(路径:Mac OS X:~/Library ...

  3. Android热修复之 - 收集崩溃信息上传服务器

    1.概述 大致的流程就是在用户崩溃的时候,我们获取崩溃信息.应用当前的信息和手机信息,然后把它保存到手机内存卡,再找我就直接找出来看看.后来衍生到上线后某些奇葩机型会有部分问题,所以不得不上传到服务器 ...

  4. iOS 几种常用的 crash log 崩溃信息调试方法

    前言:crash log 对 定位崩溃问题 ,并且不容易复现,尤其是及时对appstore 上正在运营的 app 的迭代改进来说 非常重要. 1 crash两种情况 1.1 测试环境下 追踪bug 1 ...

  5. jQuery cookie插件保存用户登陆信息

    通过jquery cookie插件保存用户登录信息. 代码: <html>  <head>  <title>cookies.html</title>  ...

  6. android之保存偏好设置信息到shareSharedPreferences,轻量级的保存数据的方法

    android之保存偏好设置信息到shareSharedPreferences,轻量级的保存数据的方法   SharedPreferences保存数据到xml文件 有时候要保存activity的某些状 ...

  7. php使用session来保存用户登录信息

    php使用session来保存用户登录信息 使用session保存页面登录信息 1.数据库连接配置页面:connectvars.php <?php //数据库的位置 define('DB_HOS ...

  8. MySQL二进制日志中保存的上下文信息

    1.二进制日志中要保存上下文的原因 二进制日志是要在slave端重放的,记录上下文信息,是为了保证主丛数据库的一致.如rand一个随机数,在主上返回的可以有是100,在从上返回的可能就是1000了. ...

  9. IT项目中使用 json格式数据 保存项目配置信息, 在配置文件再读取json文件的内容进行赋值

    json格式小巧玲珑,适合做配置文件,特别是大型项目中, 可以将配置信息分类保存到不同的json文件中, 然后再在配置文件中读取配置文件的数据进行赋值, 这里以python为例进行说明: 假设在you ...

随机推荐

  1. 解决VMware vSphere Client无法连接ESXi虚拟主机方法

    1 一般情况下重启services.sh就可以解决(或图形界面下restart management agent)services.sh restart2 若重启services.sh报错且仍然无法连 ...

  2. Java集合数据类型

    Java集合如Map.Set.List等所有集合只能存放引用类型数据,它们都是存放引用类型数据的容器,不能存放如int.long.float.double等基础类型的数据. 1. 集合存储对象 Jav ...

  3. __block 和__weak

    1,在MRC 时代,__block 修饰,可以避免循环引用:ARC时代,__block 修饰,同样会引起循环引用问题: 2,__block不管是ARC还是MRC模式下都可以使用,可以修饰对象,还可以修 ...

  4. python - 自动化测试框架 - 测试报告

    testSuitr.py: # -*- coding:utf-8 -*- '''@project: Voctest@author: Jimmy@file: testSuite.py@ide: PyCh ...

  5. day01_13.数组

    数组基本语法 <?php $a = array(键1=>值1,键2=>值2); ?> <?php $arr = array(1=>'张三的裤子',2=>'李四 ...

  6. pip安装超时,更换国内镜像源安装

    pip安装超时问题 pip install --index 源地址 安装包 常用镜像源地址: http://pypi.douban.com/ 豆瓣 http://pypi.mirrors.ustc.e ...

  7. API生命周期第三阶段:API实施模式,以及结合swagger和项目现状的最佳模式

    这篇博客,主要是宏观介绍一下开发模式,尤其是针对于目前公司前后分离的项目! 一.API实施模式概述 API实施模式,主要是三个,其中API-First又是作为一种指导思想的一种,所以,简单来说事实实施 ...

  8. Thinkphp5.1手册太简单,有的功能用起来不确定结果是否和预料的一样,顾整理记录

    //模板{if false} 1 {else/} //====>可以使用 效果同 {else /} 2 {/if} {if condition="(1 eq 1) and false& ...

  9. linux查找文件命令

    (2)find /etc -name httpd.conf #在/etc目录下文件httpd.conf

  10. poj 1637 混合图欧拉回路 学习笔记

    题目大意 求混合图是否存在欧拉回路 做法 有向边我们只有增加入度出度 对于无向边,我们给它设定一个初始方向 如果不能满足|入度-出度|为偶数,无解 然后在网络流图中, 设设定方向的反向连一条边,表示反 ...