去年我开始负责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. Java蓝桥杯练习题——求小数n位后3个数

    求整数除法小数点后第n位开始的3位数 位数不足的补0,如0.125小数第3位后三位:0.12500→500 输入格式:a b n,空格分开,a是被除数,b是除数,n是小数后的位置 输出格式:3位数字, ...

  2. activiti数据表介绍

    activiti6.0数据库介绍 Acitiviti6.0数据库中一共有28张表,表的命名都是以ACT_开头的.第二部分是一个两个字符用例表的标识. 用于自我学习记录,后期不定期更新~~~ 数据库描述 ...

  3. 【服务总线 Azure Service Bus】Service Bus在使用预提取(prefetching)后出现Microsoft.Azure.ServiceBus.MessageLockLostException异常问题

    问题描述 Service Bus接收端的日志中出现大量的MessageLockLostException异常.完整的错误消息为: Microsoft.Azure.ServiceBus.MessageL ...

  4. android studio报butterknife错误

    Error:Execution failed for task ':shipper:javaPreCompileDebug'.> Annotation processors must be ex ...

  5. 利用Python特殊变量__dict__快速实现__repr__的一种方法

    在<第8.15节 Python重写自定义类的__repr__方法>.<Python中repr(变量)和str(变量)的返回值有什么区别和联系>.<第8.13节 Pytho ...

  6. 扩展Linux网络栈

    扩展Linux网络栈 来自Linux内核文档.之前看过这篇文章,一直好奇,问什么一条网络流会固定在一个CPU上进行处理,本文档可以解决这个疑问.为了更好地理解本文章中的功能,将这篇文章穿插入内. 简介 ...

  7. Scrum 冲刺 第一篇

    Scrum 冲刺 第一篇 每个成员认领的任务 人员 任务 周立 后台登录注册模块 邓富荣 后台首页模块 钟俊豪 博客圈模块 黄清山 个人界面模块 郑焕 首页以及博客圈界面 黄梓浩 个人界面以及登录注册 ...

  8. 剑指offer二刷——数组专题——数组中重复的数字

    题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为 ...

  9. react+redux项目搭建及示例

    React + Redux示例,实现商品增删改 目录结构 1.项目搭建 1.1 使用create-react-app react_redux创建项目 1.2 安装使用redux需要的依赖 npm in ...

  10. C# 继承类的值赋

    C# 继承类的值赋 /// <summary> /// 将父类的值赋值到子类中 /// </summary> /// <typeparam name="TPar ...