iOS Crash - 收集篇

项目崩溃,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一下在通用中设置) 选择自动发送,并与开发者共享便可;因此不推荐用。app

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

在程序启动时加上一个异常捕获监听,用来处理程序崩溃时的回调动做NSSetUncaughtExceptionHandler (&UncaughtExceptionHandler)。UncaughtExceptionHandler是一个函数指针,该函数须要咱们实现,能够取本身想要的名字。当程序发生异常崩溃时,该函数会获得调用,这跟C,C++中的回调函数的概念是同样的。函数


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

3.第三方收集crash

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

最后 恶意覆盖问题

崩溃收集统计函数应该只进行一次调用,若是用第三方的话也最好只用一个第三方,这样咱们获取崩溃统计信息的途径也是惟一的。
第三方统计工具并非用的越多越好,使用 多个崩溃收集第三方会致使NSSetUncaughtExceptionHandler()函数指针的恶意覆盖,如今不少第三方崩溃收集工具为了确保本身能最大可能的收集到崩溃信息,会对NSSetUncaughtExceptionHandler()函数指针的恶意覆盖。由于这个函数是将函数地址当作参数传递,因此只要重复调用就会被覆盖,这样就不能保证崩溃收集的稳定性。指针

相关文章
相关标签/搜索