InfoQ Geekathon 大模型技术应用创新大赛 了解详情
写点什么

iOS 开发工具——统计 Crash 的工具 Crashlytics

  • 2013-07-23
  • 本文字数:2273 字

    阅读完需:约 7 分钟

简介

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方法中加入如下代码:

复制代码
#import <Crashlytics/Crashlytics.h>
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[Crashlytics startWithAPIKey:@"your identify code"];
}

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

[[Crashlytics sharedInstance] crash];

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

复制代码
[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 能让大家的应用都更加健壮~


感谢李永伦对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2013-07-23 13:4343488
用户头像

发布了 65 篇内容, 共 54.8 次阅读, 收获喜欢 22 次。

关注

评论

发布
暂无评论
发现更多内容

AI/ML如何在山林防火中大显身手?

澳鹏Appen

人工智能 工业4.0 工业 数据标注 防火

MobPush for ReactNative

MobTech袤博科技

Java实战案例-动态调色板

小院里的霍大侠

Java 实战案例 初学者 入门学习

华为云桌面Workspace,让你的办公更加舒适惬意

清欢科技

公司真的需要PMO吗?

PMO实践

项目管理 PMO

华为云会议助力云上办公更加容易

爱尚科技

华为云大数据轻量级解决方案,让数据“慧”说话

科技说

华为云会议让企业会议想开就开

爱尚科技

openGauss-graph 0.1.0版本正式发布

openGauss

Serverless Devs 重大更新,基于 Serverless 架构的 CI/CD 框架:Serverless-cd

阿里巴巴云原生

阿里云 Serverless 云原生

这款全能王网络监控工具绝了,不仅能监控Linux服务器,还能监控网络设备!

wljslmz

Linux 网络监控 11月月更 Observium

如何拆掉跨部门的墙?

PMO实践

项目管理 企业管理 跨部门沟通

Wallys/IPQ8072/IPQ8074/2x(4×4 or 8×8) 11AX/IPQ6010 (IPQ6018 FAMILY)/industrial wifi6 moudle

wallyspipi

IPQ6010 ipq6018 IPQ8072 IPQ8074

重磅来袭!爆肝一周整理的多线程&高并发笔记(含面试题+导图+笔记)

小小怪下士

Java 面试 多线程 高并发

React Server Component: 混合式渲染

字节跳动终端技术

react.js 原理分析 服务端渲染 混合式渲染 Server Component

同享明年,共创此时 —— GreptimeDB Roadmap 2023

Greptime

数据库 开源 分布式 云原生 物联网

Higress 实战:30 行代码写一个 Wasm Go插件

阿里巴巴云原生

阿里云 云原生 Higress

京东云正式加入openGauss社区,共筑数据库科技服务供应链

openGauss

华为云桌面Workspace云上办公,方便得很!

科技说

智慧医疗时代,如何更精准、更智能、更高品质?

澳鹏Appen

人工智能 医疗 数据标注 智慧医疗 AI医疗

面试卡在多线程?那就分享几道Java多线程高频面试题,面试不用愁

钟奕礼

Java 程序员 java面试 java 编程

openGauss的高效数据压缩算法

openGauss

助推专精特新企业数字化的低代码

力软低代码开发平台

腾讯生态大会倒计时1天!

ToB行业头条

云渲染和渲染农场的区别在哪里?

Finovy Cloud

云计算 云渲染 渲染农场

面试官:介绍一下 Redis 三种集群模式

Jeremy Lai

redis集群

金奖方案 | 一专多能、傲视寰宇,南大通用GBase8c数据库牛在哪里?

openGauss

openGauss企业级开源数据库荣获2022年度中国计算机学会(CCF)科技进步奖特等奖

openGauss

RocketMQ 客户端负载均衡机制详解及最佳实践

阿里巴巴云原生

阿里云 RocketMQ 云原生

WebGL入门之基于WebGL的Sovit3D可视化平台

2D3D前端可视化开发

数据可视化 WebGL 三维可视化 web3d 3d绘图引擎

为啥PMO困惑的起因和其他职能部门不一样?

PMO实践

项目管理 PMO

  • 扫码添加小助手
    领取最新资料包
iOS开发工具——统计Crash的工具Crashlytics_Android/iOS_唐巧_InfoQ精选文章