iOS崩溃治理--开篇
去年我开始负责iOS崩溃治理的工作,从原来的万分之五崩溃率,一直到现在的万分之一左右的崩溃率,期间踩了很多坑,因此想和大家分享一下,希望能对大家有所帮助,也欢迎大家私信交流。
如果你打算开始治理崩溃的话,建议你先想一下以下的问题:
如何高效地去定位修复崩溃?
修复线上收集到的崩溃,可以说这是无法避免的体力活,大部分的崩溃事实上并不复杂,都不难解决,但怎么快速定位是个问题。
大部分的崩溃堆栈很清晰,通过日志我们可以很容易定位到有问题的代码,但有些崩溃日志,很可能只有一堆系统相关的堆栈,很难对应到业务代码。对于类似情况,有没有相关的应对方案,决定了你的崩溃修复效率。
除了解决线上收集到的崩溃还要做些什么?
解决线上收集到的崩溃是必须的,但这只是个必要不充分条件。如果你只是case by case地解决线上崩溃,那很快你就会疲于奔命,被困在无休止的体力活当中。
原因主要有以下几点:
1,你所处的项目比较大,可能涉及到好几个团队的协作
2,每次发版都可能引入新的崩溃
3,后端的改动也可能引起线上崩溃
4,新系统的发布也可能引起问题
如何推动跨团队的协作?
对于一个比较大的App来说,通常都会涉及到多个团队的合作。比如说,登录SDK,IM,日志上报等功能,一般都会有专门的团队负责。也就是说,线上的某个崩溃很可能要找另外一个团队的人解决,即使你知道怎么修复,也很可能没权限。这时候仅仅靠你去协调是不现实的,这会耗费你大量的精力。
每次发版总会有新的崩溃要如何解决?
新需求总是会伴随着或多或少的崩溃,每次发版都会有着上涨的风险,毕竟研发和QA也都是普通人,不可能不毫无遗漏。要如何降低这种风险,以及在问题发生之后如何及时止损。
线上突然爆出问题该怎么办?
线上突然出现崩溃的情况其实并不少见,尤其是和服务端交互比较多的App,甚至是一些有网络请求的三方库也可能引起类似问题,这时候要怎么及时发现问题, 如何及时修复止损。
有没有一劳永逸的方法?
这是终极目标,但是很难,因为项目总在迭代,即使你不迭代(不迭代这项目也没有什么价值了),系统也会更新。但即使做不到一劳永逸,我们是不是可以找到一些方式,让我们只需要花很少的时间来维持线上稳定。
对于这些问题,从手段方面,我分为三种,基础设施,流程规范,技术防控。从时间点上,又可以分为事前,事中,事后。后续我会从这些方面来跟大家分享自己的一些经验,有些内容可能在大家的项目中已经实现了甚至是做的更好,有些内容可能是你所欠缺的,希望能和大家多多交流。
iOS崩溃治理--开篇的更多相关文章
- iOS崩溃调试的使用和技巧总结
在iOS开发调试过程中以及上线之后,程序经常会出现崩溃的问题.简单的崩溃还好说,复杂的崩溃就需要我们通过解析Crash文件来分析了,解析Crash文件在iOS开发中是比较常见的. 现在网上有很多关于解 ...
- Android&iOS崩溃堆栈上报
Android&iOS崩溃堆栈上报 原文地址:http://www.cnblogs.com/songcf/p/4885468.html 通过崩溃捕获和收集,可以收集到已发布应用(游戏)的异常, ...
- iOS崩溃日志ips文件解析
iOS崩溃日志ips文件解析 一 简介 测试组的同事在进行稳定性测试时,通常会遇到一些崩溃,然后他们会将这些崩溃日志(一般是ips格式的文件)反馈给开发进行分析,但是这些ips文件中的内容通常是如下 ...
- 详解没有dSYM文件 如何解析iOS崩溃日志
Xcode支持崩溃日志自动符号化,前提是本地有当时Build/Archive生成的dSYM文件,iOS崩溃日志符号化后,可以帮助开发者更好的定位问题,但如果dSYM文件丢失或拿到的崩溃日志不是标准的c ...
- 转: iOS崩溃堆栈符号表使用与用途
转:http://bugly.qq.com/blog/?p=119 iOS崩溃堆栈符号化,定位问题分分钟搞定! 2015.3.16 腾讯Bugly 微信分享 最近一段时间,在跟开发者沟通过程中,萝 ...
- iOS 崩溃日志分析(个人总结,最实用)
iOS 崩溃日志分析(个人总结,最实用) 要分析奔溃日志需要三个文件:crash日志,symbolicatecrash分析工具,.dSYM符号集 0. 在桌面创建一个crash文件夹 1. 需要Xco ...
- iOS崩溃日志
今天看crash report ,有这样两个crash: 调用 stopUpdatingLocation 函数的是一个CLLocationManager 类型的对象,为什么报错的时候会把这个对象转成N ...
- 常用获取Android崩溃日志和IOS崩溃日志的几种方法
一:前言 在日常测试app时,经常会遇到崩溃问题,测试快速抓取到崩溃日志可以有效方便开发进行定位,快速解决问题所在测试做到测试分析,定位是非常重要的,这也是判断一个测试能力指标的一大维度. 二:And ...
- iOS 崩溃日志 Backtrace的符号化
iOS的崩溃日志配合dsym文件可以找到崩溃时的backtrace,这是解决崩溃的最重要的信息. 如果是在同一台mac上打包, 导入crash log时候会自动将backtrace符号化,可以看到方法 ...
随机推荐
- Java基础教程——JUnit和TDD
JUnit JUnit是一个Java的单元测试工具. package ah; public class MyCode { public int m1() { System.out.println(&q ...
- Mybatis【2】-- 多个mapper文件以及namespace作用
多个mapper文件以及namespace作用 要是多个mapper文件的时候怎么处理,namespace又是干什么用的呢 首先我们来看创建数据库语句: #创建数据库 CREATE DATABASE ...
- js实现视频截图,视频批量截图,canvas实现
截取视频的某一时间的图像并保存 利用canvas的绘画能力画出视频某一帧的视频画面, 获得到图像之后转换成base64图像, 再利用a标签的实现自动保存到本地 html代码 <!DOCTYPE ...
- PyQt(Python+Qt)学习随笔:QTableWidgetItem的位置相关方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTableWidgetItem项在QTableWidget中的位置包括三个属性来决定,就是表格部件 ...
- java springboot@GeneratedValue 注解
springboot中@GeneratedValue作用: (1)@GeneratedValue注解存在的意义主要就是为一个实体生成一个唯一标识的主键.@GeneratedValue提供了主键的生成策 ...
- 【题单】最近遇见的 SHIT DP题 三连
Hint: 本题单适合用于自虐和消磨时间. CF-Gym101620E https://codeforces.com/gym/101620 ARC109F https://atcoder.jp/con ...
- 二、spring cloud 注册与发现eureka注册中心
基于2.0 Greenwich高可用eureka注册中心搭建 一.单机版 新建MAVEN父工程demo-parent 删掉src pom.xml <packaging>pom</pa ...
- 三、LoadRunner卸载
由于安装的时候没看提前了解清楚,LoadRunner社区版只能模拟50个用户,满足不了工作需求,删了重装吧. 1-打开"控制面板"-点击"卸载程序" 2-找到H ...
- mysql单机多实例配置
Windows上配置多个mysql实例,主要改下配置文件即可,mysql目录如下: my2中主要改两个配置内容 datadir = D:/Program Files/Mysql/mysql-5.7.2 ...
- JAVA基础学习1
一.JAVA是一种具有多种功能的高级语言:1,可以用于开发web页面上的小程序,桌面上运行的应用程序: 2,用于客户端服务器资源通讯的服务器端中间件: 3,还可以用于web服务器. 二.程序设计的5个 ...