使用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拖到工程中。如下所示:

按照提示做完之后,就到了最后一步了,在AppDelegate的didFinishLaunchingWithOptions方法中加入如下代码:
1 2 3 4 5 6 |
|
之后,运行一下程序,Crashlytics就会检测到你设置成功。如果你感兴趣,可以自己手工触发一个崩溃记录,看Crashlytics能否帮你收集到。使用如下代码即可
1 |
|
如果你想测试一个Exception导致的崩溃,可以使用如下代码:
1 2 |
|
应用对外发布后,就可以在Crashlytics后台查看和修改相关的记录。另外,Crashlytics还支持将数据导入到其它项目管理工具(例如Redmine或Jira)如下所示,配置都非常简单。

实现原理和使用体会
实现原理
在原理上,Crashlytics的通过以下2步完成崩溃日志的上传和分析:
- 提供应用SDK,你需要在应用启动时调用其SDK来设置你的应用。SDK会集成到你的应用中,完成Crash信息的收集和上传。
- 修改工程的编译配置,加入一段代码,在你每次工程编译完成后,上传该工程对应的dSYM文件。研究过手工分析Crash日志的同学应该知道,只有通过该文件,才能将Crash日志还原成可读的Call Stack信息。
使用体会
为了更加方便开发者设置相应的工程,Crashlytics提供了mac端的应用程序,帮助你检测相关工程是否正确设置并且提供相应的帮助信息。后来我还发现,该程序还会自动帮你升级Crashlytics的SDK文件。虽然这一点很体贴,但是我个人觉得还是不太友好。因为毕竟修改SDK会影响应用编译后的内部逻辑,在没有任何通知的情况下升级,我都无法确定Crashlytics有没有干坏事。不过国外的服务,特别是象Twitter这种相对较大知名度公司提供的服务要有节操得多,所以在这一点上我还是比较放心的。
使用Crashlytics可以让你摆脱管理应用崩溃记录的烦恼。并且帮助你找出应用的一些重大隐藏性Bug。例如我之前写的一个应用就过一个缓存过期的问题,只有当缓存过期时才会触发这个Bug,这样的问题在测试人员那边很难触发,因为他们不可能了解你的应用内部实现细节。通过Crashlytics,使我清楚了解到应用Crash的数量和位置,结合自己的开发经验,就很容易找到问题所在了。
值得一提的是,Crashlytics本身的官方文档也非常健全,如果你在使用中遇到任何问题,也可以上去查看详细的文档。
愿Crashlytics能让大家的应用都更加健壮~
使用Crashlytics来保存应用崩溃信息的更多相关文章
- Android将应用程序的崩溃信息如何保存到本地文件,并上传服务器
导语:最近实在是太忙了,没有怎么更新公众号,也没有怎么认真去写一些内容,在这里先给关注我的朋友说一声抱歉,可能在接下来的一段时间,还是很忙,但是我会争取抽空多分享一下技术文章,给大家看,共同进步,也希 ...
- 获取app崩溃信息的途径 iOS
获取崩溃日志的几种方法: 1.当用户抱怨闪退时,你可以要求他让设备与iTunes同步,设备与电脑上的iTunes Store同步后,会将崩溃日志保存在电脑上(路径:Mac OS X:~/Library ...
- Android热修复之 - 收集崩溃信息上传服务器
1.概述 大致的流程就是在用户崩溃的时候,我们获取崩溃信息.应用当前的信息和手机信息,然后把它保存到手机内存卡,再找我就直接找出来看看.后来衍生到上线后某些奇葩机型会有部分问题,所以不得不上传到服务器 ...
- iOS 几种常用的 crash log 崩溃信息调试方法
前言:crash log 对 定位崩溃问题 ,并且不容易复现,尤其是及时对appstore 上正在运营的 app 的迭代改进来说 非常重要. 1 crash两种情况 1.1 测试环境下 追踪bug 1 ...
- jQuery cookie插件保存用户登陆信息
通过jquery cookie插件保存用户登录信息. 代码: <html> <head> <title>cookies.html</title> ...
- android之保存偏好设置信息到shareSharedPreferences,轻量级的保存数据的方法
android之保存偏好设置信息到shareSharedPreferences,轻量级的保存数据的方法 SharedPreferences保存数据到xml文件 有时候要保存activity的某些状 ...
- php使用session来保存用户登录信息
php使用session来保存用户登录信息 使用session保存页面登录信息 1.数据库连接配置页面:connectvars.php <?php //数据库的位置 define('DB_HOS ...
- MySQL二进制日志中保存的上下文信息
1.二进制日志中要保存上下文的原因 二进制日志是要在slave端重放的,记录上下文信息,是为了保证主丛数据库的一致.如rand一个随机数,在主上返回的可以有是100,在从上返回的可能就是1000了. ...
- IT项目中使用 json格式数据 保存项目配置信息, 在配置文件再读取json文件的内容进行赋值
json格式小巧玲珑,适合做配置文件,特别是大型项目中, 可以将配置信息分类保存到不同的json文件中, 然后再在配置文件中读取配置文件的数据进行赋值, 这里以python为例进行说明: 假设在you ...
随机推荐
- hdu 5984
PockyTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submissio ...
- Linux学习-函式库管理
动态与静态函式库 首先我们要知道的是,函式库的类型有哪些?依据函式库被使用的类型而分为两大类,分别是静态 (Static) 与动态 (Dynamic) 函式库两类. 静态函式库的特色: 扩展名:(扩展 ...
- C++基础——1.变量和基本类型(基于c++11)
C++11类型 基本类型 字面值常量(literal) 比如:一个形如42的值,即为常量 变量 初始值 初始化不是赋值,初始化是创建变量的时候给一个初始值:而赋值是擦除当前值,用新值代替. 列表初始化 ...
- CodeForces 392C Yet Another Number Sequence 矩阵快速幂
题意: \(F_n\)为斐波那契数列,\(F_1=1,F_2=2\). 给定一个\(k\),定义数列\(A_i=F_i \cdot i^k\). 求\(A_1+A_2+ \cdots + A_n\). ...
- IDEA-常用插件,使用FindBugs寻找bug,代码分析
bug无处不在,但是我们总希望少一点bug. 最近发现了一款好用的寻找bug的插件,特此记下. 一.安装 路径:File-->Settings-->Plugins-->Browse ...
- [python 函数学习篇] 关键字参数
函数可以通过 关键字参数 的形式来调用,形如 keyword = value .例如,以下的函数: def parrot(voltage, state='a stiff', action='voom' ...
- sysctl内核参数解析
sysctl内核参数解析 kernel.参数 kernel.shmall = 2097152 ## 1> 表示所有内存大小.可以分配的所有共享内存段的总和最大值.(以页为单位) ## 2& ...
- Git 应用问题(一) —— failed to push some refs to git
今天在本地创建了一个新的 repository,想关联到 Github 上的时候出现问题,如下: Gerrard@LAPTOP-79570TK2 MINGW64 /g/github-workspace ...
- OpenCV For Java环境搭建与功能演示
http://blog.csdn.net/jia20003/article/details/68944486
- MacPorts的安装和使用
1.安装 MacPorts的官方网站:http://www.macports.org/install.php 有dmg安装和源代码安装两种方式,下载dmg格式一步步安装即可 2.使用 更新ports ...