去年我开始负责iOS崩溃治理的工作,从原来的万分之五崩溃率,一直到现在的万分之一左右的崩溃率,期间踩了很多坑,因此想和大家分享一下,希望能对大家有所帮助,也欢迎大家私信交流。

如果你打算开始治理崩溃的话,建议你先想一下以下的问题:

如何高效地去定位修复崩溃?

修复线上收集到的崩溃,可以说这是无法避免的体力活,大部分的崩溃事实上并不复杂,都不难解决,但怎么快速定位是个问题。

大部分的崩溃堆栈很清晰,通过日志我们可以很容易定位到有问题的代码,但有些崩溃日志,很可能只有一堆系统相关的堆栈,很难对应到业务代码。对于类似情况,有没有相关的应对方案,决定了你的崩溃修复效率。

除了解决线上收集到的崩溃还要做些什么?

解决线上收集到的崩溃是必须的,但这只是个必要不充分条件。如果你只是case by case地解决线上崩溃,那很快你就会疲于奔命,被困在无休止的体力活当中。

原因主要有以下几点:

1,你所处的项目比较大,可能涉及到好几个团队的协作

2,每次发版都可能引入新的崩溃

3,后端的改动也可能引起线上崩溃

4,新系统的发布也可能引起问题

如何推动跨团队的协作?

对于一个比较大的App来说,通常都会涉及到多个团队的合作。比如说,登录SDK,IM,日志上报等功能,一般都会有专门的团队负责。也就是说,线上的某个崩溃很可能要找另外一个团队的人解决,即使你知道怎么修复,也很可能没权限。这时候仅仅靠你去协调是不现实的,这会耗费你大量的精力。

每次发版总会有新的崩溃要如何解决?

新需求总是会伴随着或多或少的崩溃,每次发版都会有着上涨的风险,毕竟研发和QA也都是普通人,不可能不毫无遗漏。要如何降低这种风险,以及在问题发生之后如何及时止损。

线上突然爆出问题该怎么办?

线上突然出现崩溃的情况其实并不少见,尤其是和服务端交互比较多的App,甚至是一些有网络请求的三方库也可能引起类似问题,这时候要怎么及时发现问题, 如何及时修复止损。

有没有一劳永逸的方法?

这是终极目标,但是很难,因为项目总在迭代,即使你不迭代(不迭代这项目也没有什么价值了),系统也会更新。但即使做不到一劳永逸,我们是不是可以找到一些方式,让我们只需要花很少的时间来维持线上稳定。

对于这些问题,从手段方面,我分为三种,基础设施,流程规范,技术防控。从时间点上,又可以分为事前,事中,事后。后续我会从这些方面来跟大家分享自己的一些经验,有些内容可能在大家的项目中已经实现了甚至是做的更好,有些内容可能是你所欠缺的,希望能和大家多多交流。

iOS崩溃治理--开篇的更多相关文章

  1. iOS崩溃调试的使用和技巧总结

    在iOS开发调试过程中以及上线之后,程序经常会出现崩溃的问题.简单的崩溃还好说,复杂的崩溃就需要我们通过解析Crash文件来分析了,解析Crash文件在iOS开发中是比较常见的. 现在网上有很多关于解 ...

  2. Android&iOS崩溃堆栈上报

    Android&iOS崩溃堆栈上报 原文地址:http://www.cnblogs.com/songcf/p/4885468.html 通过崩溃捕获和收集,可以收集到已发布应用(游戏)的异常, ...

  3. iOS崩溃日志ips文件解析

    iOS崩溃日志ips文件解析  一 简介 测试组的同事在进行稳定性测试时,通常会遇到一些崩溃,然后他们会将这些崩溃日志(一般是ips格式的文件)反馈给开发进行分析,但是这些ips文件中的内容通常是如下 ...

  4. 详解没有dSYM文件 如何解析iOS崩溃日志

    Xcode支持崩溃日志自动符号化,前提是本地有当时Build/Archive生成的dSYM文件,iOS崩溃日志符号化后,可以帮助开发者更好的定位问题,但如果dSYM文件丢失或拿到的崩溃日志不是标准的c ...

  5. 转: iOS崩溃堆栈符号表使用与用途

    转:http://bugly.qq.com/blog/?p=119 iOS崩溃堆栈符号化,定位问题分分钟搞定! 2015.3.16 腾讯Bugly 微信分享   最近一段时间,在跟开发者沟通过程中,萝 ...

  6. iOS 崩溃日志分析(个人总结,最实用)

    iOS 崩溃日志分析(个人总结,最实用) 要分析奔溃日志需要三个文件:crash日志,symbolicatecrash分析工具,.dSYM符号集 0. 在桌面创建一个crash文件夹 1. 需要Xco ...

  7. iOS崩溃日志

    今天看crash report ,有这样两个crash: 调用 stopUpdatingLocation 函数的是一个CLLocationManager 类型的对象,为什么报错的时候会把这个对象转成N ...

  8. 常用获取Android崩溃日志和IOS崩溃日志的几种方法

    一:前言 在日常测试app时,经常会遇到崩溃问题,测试快速抓取到崩溃日志可以有效方便开发进行定位,快速解决问题所在测试做到测试分析,定位是非常重要的,这也是判断一个测试能力指标的一大维度. 二:And ...

  9. iOS 崩溃日志 Backtrace的符号化

    iOS的崩溃日志配合dsym文件可以找到崩溃时的backtrace,这是解决崩溃的最重要的信息. 如果是在同一台mac上打包, 导入crash log时候会自动将backtrace符号化,可以看到方法 ...

随机推荐

  1. C语言讲义——链表的实现

    节点(结构体描述) struct Node { int _id; char s[50]; struct Node* pre;// 指向前一个节点的地址 struct Node* next;// 指向下 ...

  2. Java基础教程——Stream

    Stream流 Java 8 API添加了一种新的机制--Stream(流).Stream和IO流不是一回事. 流式思想:像生产流水线一样,一个操作接一个操作. 使用Stream流的步骤:数据源→转换 ...

  3. wsgi_uwsgi_nginx

    1.一些重要概念 https://www.cnblogs.com/xiaonq/p/8932266.html 1.1 web容器 什么是web容器 1.web容器是帮助我们部署java.php.pyt ...

  4. PTA天梯赛校内模拟

    最长对称子串 || 区间dp || 马拉车 dp[i][j]表示区间[i, j]是否为回文串,若是则为1,不是则为0. 边界条件: 1. 区间长度为1,dp为1.(奇数个字符递推的起始情况) 2. 区 ...

  5. Alpha冲刺——代码规范,冲刺计划

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/2018SE2/ 这个作业要求在哪里 https://edu.cnblogs.com/campus/f ...

  6. Spring Boot 统一返回结果及异常处理

    在 Spring Boot 构建电商基础秒杀项目 (三) 通用的返回对象 & 异常处理 基础上优化.调整 一.通用类 1.1 通用的返回对象 public class CommonReturn ...

  7. Zookeeper(5)---分布式锁

    基于临时序号节点来实现分布式锁 为什么要用临时节点呢?如果拿到锁的服务宕机了,会话失效ZK自己也会删除掉临时的序号节点,这样也不会阻塞其他服务. 流程: 1.在一个持久节点下面创建临时的序号节点作为锁 ...

  8. 为什么Python中称__lt__、__gt__等为“富比较”方法

    Python中基类object提供了一系列可以用于实现同类对象进行"比较"的方法,可以用于同类对象的不同实例进行比较,包括__lt__.__gt__.__le__.__ge__._ ...

  9. 第14.10节 Python中使用BeautifulSoup解析http报文:html标签相关属性的访问

    一. 引言 在<第14.8节 Python中使用BeautifulSoup加载HTML报文>中介绍使用BeautifulSoup的安装.导入和创建对象的过程,本节介绍导入后利用Beauti ...

  10. 第四章 、PyQt中的信号(signal)和槽(slot)机制以及Designer中的使用

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 前面章节其实已经在使用信号和槽了,但是作为Qt中最重要的机制也是Qt区别与其他开发平台的重 ...