文档章节

iOS Crash - 收集篇

H
 HeroHY
发布于 2017/07/11 15:27
字数 765
阅读 21
收藏 0

项目崩溃,crashLog可是你的救命稻草,能让你快速分析出bug的问题所在,不会收集可不行。
当然项目在开发时,可以通过控制台log看到调用堆栈,发布版的crash 收集一般有三种方式可选:

1.苹果Crash收集服务

通过iTunes Connect(Manage Your Applications - View Details - Crash Reports)获取用户的crash日志。在XCode 中Window->Organizer->Crashes也可以看到同样的crash日志,请看这篇文章:如何查看iOS已上架app崩溃分布、定位crash发生的行
但是 收集crash功能需要用户设置->隐私->诊断与用量->诊断与用量数据(iOS8一下在通用中设置) 选择自动发送,并与开发者共享即可;所以不推荐用。

2.自己实现应用内崩溃收集,并上传服务器

在程序启动时加上一个异常捕获监听,用来处理程序崩溃时的回调动作NSSetUncaughtExceptionHandler (&UncaughtExceptionHandler)。UncaughtExceptionHandler是一个函数指针,该函数需要我们实现,可以取自己想要的名字。当程序发生异常崩溃时,该函数会得到调用,这跟C,C++中的回调函数的概念是一样的。


获取到了崩溃日志,如何发送给开发者呢,目前一般有以下两种方式:
将崩溃信息持久化在本地,下次程序启动时,将崩溃信息作为日志发送给开发者。通过邮件发送给开发者。 不过此种方式需要得到用户的许可,因为iOS不能后台发送短信或者邮件,会弹出发送邮件的界面,只有用户点击了发送才可发送。

3.第三方收集crash

使用友盟、bugHD、Flurry 等第三方崩溃统计工具,原理都是根据系统产生的crash日志进行了一次提取或封装,然后将封装后的crash文件上传到对应的服务端进行解析处理。
优点是快速集成crash收集功能,有完善的后台管理界面和解析处理(crash文件是要解析后才能看懂的),好用还不要钱。
友盟崩溃统计官方文档 bugHD统计 Flurry

最后 恶意覆盖问题

崩溃收集统计函数应该只进行一次调用,如果用第三方的话也最好只用一个第三方,这样我们获取崩溃统计信息的途径也是唯一的。
第三方统计工具并不是用的越多越好,使用 多个崩溃收集第三方会导致NSSetUncaughtExceptionHandler()函数指针的恶意覆盖,现在很多第三方崩溃收集工具为了确保自己能最大可能的收集到崩溃信息,会对NSSetUncaughtExceptionHandler()函数指针的恶意覆盖。因为这个函数是将函数地址当做参数传递,所以只要重复调用就会被覆盖,这样就不能保证崩溃收集的稳定性。

© 著作权归作者所有

共有 人打赏支持
H
粉丝 2
博文 138
码字总数 70307
作品 0
海淀
获取iOS设备上崩溃日志(Crash Log)的方法

获取iOS设备上崩溃日志(Crash Log)的方法:http://www.weste.net/2013/5-20/91509.html iOS怎么分析AppStore上面的Crash Log:http://m.blog.csdn.net/blog/tianjf0514/45201549 iOS Cra......

智能小松鼠
2015/08/25
0
0
捕获系统异常崩溃的方法

1、使用PLCrashReporter框架 参考文章: http://www.cocoachina.com/ios/20150701/12301.html http://www.jianshu.com/p/930d7f77df6c...

xiaobai1315
2017/10/27
0
0
fir.im Weekly - 每个程序员都应当拥有的技能树

本周收集了一些优秀的 iOS & Android 开发资源和程序员 IT 技能拓展的 Tips. 知道创宇研发技能表 v3.0 作为程序员可能都听说过【知道创宇】,他们是一家黑客文化浓厚的安全公司。这张技能表为...

风起云飞fir_im
2015/09/06
0
0
iOS仿抖音节拍界面、Swift,MVVM架构完整项目、日历demo、滚动切换分类等源码

iOS精选源码 在Object-C中学习数据结构与算法之排序算法(http://www.code4app.com/thread-14762-1-1.html) 日历-基本功能都有的日历 选择日期 上下月 动画(http://www.code4app.com/thread-3...

sunnyaigd
09/06
0
0
那些在学习iOS开发前就应该知道的事(part 1)

英文原文:Things I wish I had known before starting iOS development—Part 1 设计师设计出来了一个不错的引导界面,然而当我看到设计稿的时候,我们的app也没几天就要上线了。这个界面模...

TomatosX
2015/06/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

sed命令扩展使用操作

打印某行到某行之间的内容 假若文件test.txt的内容是: ertfff**[abcfd]123324444[rty]**fgfgf 怎么能截取 [abcfd]123324444[rty] 这一部分出来呢? 操作命令: 知道开始行和结...

野雪球
12分钟前
0
0
JVM内存笔记

Hotspot JVM 中的 Java 线程与原生操作系统线程有直接的映射关系。当线程本地存储、缓 冲区分配、同步对象、栈、程序计数器等准备好以后,就会创建一个操作系统原生线程。 Java 线程结束,原...

凌渡
18分钟前
0
0
284. Peeking Iterator

Description Tag: Design Difficulties: Medium Given an Iterator class interface with methods: next() and hasNext(), design and implement a PeekingIterator that support the pee......

52iSilence7
20分钟前
0
0
防止快速重复点击的两种思维

防止重复执行的两种思维 场景 下单时,提交按钮,因为网络卡顿或者手快重复点击,导致重复提交订单; 微博,更新个人状态或发表评论时,快速多次点击[发送]按钮,导致相同的信息发送多次. 解决思路 ...

黄威
46分钟前
0
0
在windows环境下使用Virtualbox虚拟Debian系统来运行Docker

标题绕口。 我之前一直使用 Virtualbox 和 homestead 来运行我的 PHP 开发环境。最近决心开始尝试 DevOps,使得开发、部署容器化,来化解人为操作失误和环境不兼容等问题造成的各种损失。就打...

zgldh
48分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部