前言
在iOS开发过程的时候,在遇到报错的时候抛出的报错异常,需要快速定位到具体报错位置,有时候通过常规的代码排查方法可以解决,但是有些时候通过常规的方式不能很好的定位到报错位置,尤其是遇到一些隐性的报错信息,不能快速的定位到报错原因信息,这样就要借助第三方的错误信息分析来解决了。
那么本文就来分享一下在iOS开发过程中借助第三方工具来分析解决报错异常的处理方法,本文案例使用的友盟U-APM来做使用案例。通过在项目中集成友盟分析工具,使用友盟U-APM来分析报错异常信息,就能在友盟给出的错误信息中,很方便的找出客户端异常的信息,比如很多像数组越界却只给出了 * -[__NSArrayM objectAtIndex:]: index 50 beyond bounds [0 .. 39]' 这类错误信息,这种很难定位具体报错位置的信息,如下图所示:
遇到这种问题的话,如果通过 objectAtIndex 去检索错误的地方,那将会是一个巨大的工作量,那么怎么办才能减轻工作量呢,那就是下面要介绍的情况了。
一、dSYM 文件
Xcode编译项目后,我们会看到一个同名的 dSYM 文件,dSYM 是保存 16 进制函数地址映射信息的中转文件,我们调试的 symbols 都会包含在这个文件中,并且每次编译项目的时候都会生成一个新的 dSYM 文件,位于 /Users/<电脑用户名>/Library/Developer/Xcode/Archives 目录下,对于每一个发布版本我们都很有必要保存对应的 Archives 文件 。
二、dSYM 文件的作用
当我们应用程序release 模式打包或上线后,不会像在Xcode中那样直观的看到用崩溃的错误,这个时候就需要分析 crash report 文件了,iOS 设备中会有日志文件保存我们每个应用出错的函数内存地址,通过 Xcode 的 Organizer 可以将 iOS 设备中的 DeviceLog 导出成 crash 文件,这样就可以通过出错的函数地址去查询 dSYM 文件中程序对应的函数名和文件名。但是前提是我们需要有软件版本对应的 dSYM 文件,这也是为什么很有必要保存每个发布版本的 Archives 文件了。
三、如何把文件一一对应
每一个 xxx.app 和 xxx.app.dSYM 文件都有对应的 UUID,crash文件也有自己的UUID,只要这三个文件的UUID一致,我们就可以通过它们解析出正确的错误函数信息了。
1.查看 xxx.app 文件的 UUID,terminal 中输入命令 :dwarfdump --uuid xxx.app/xxx (xxx是你的项目名称)
2.查看 xxx.app.dSYM 文件的 UUID ,在terminal中输入命令:dwarfdump --uuid xxx.app.dSYM
3.crash 文件内第一行 Incident Identifier 就是该crash文件的 UUID。
四、dSYM文件分析工具的使用
首先分享一下通过友盟平台的U-APM工具进行分析crash 分析 ,dSYM 文件的操作步骤,具体如下所示:
1、首先打开友盟官方网站,然后登陆友盟账号,如果没有注册过友盟平台的账号,需要注册之后登录进入;
2、登陆进入友盟之后,点击“进入工作台”,然后会看到工作台主界面的各个菜单栏,然后点击选择右上角的下拉菜单“产品”—>“应用性能监测平台(U-APM)”,单击进入U-APM应用性能监测平台的引导主界面,然后直接点击进入“进入后台”,(这里要注意的是如果你没有对应的app来体验友盟的应用性能监测平台的app,可以直接下载友盟官方提供的体验demo,本文就是直接使用友盟的体验demo来测试应用性能监测的);
3、进入U-APM应用性能监测平台的后台主界面之后,如果是首次使用友盟的应用性能监测平台,需要在后台主界面里面创建你的app;
4、在友盟工作台里面创建新建app应用之后,如果没有app里面没有集成友盟的sdk,会提示“未集成”,点击app列表对应的右侧的“集成”按钮,进入集成友盟sdk的设置引导步骤界面,此时友盟在你创建app的时候就会生成app对应的appkey,获取到集成友盟U-APM的appkey,然后根据引导提示把友盟的sdk集成在自己的iOS项目工程里面,根据友盟官方集成文档步骤来操作即可,这里不再多说;
5、在iOS项目中,需要把友盟的appkey填写在项目的AppDelegate.m文件里面对应的注册初始化友盟的地方;
6、iOS项目集成完友盟之后,运行项目,app运行之后的任何crash都会上报到友盟工作后台,可以通过友盟的U-APM应用性能监测的后台来查看app的crash日志,然后进行分析操作;
Demo示例:
7、这里着重介绍一下友盟关于dSYM 文件的处理分析的操作,需要把电脑上的iOS项目编译生产的所有dSYM 文件夹直接压缩,然后通过UUID与符号表做关联,然后上传符号表,有对应的符号表管理界面,这里不再多说;
8、根据上传之后的符号表查看崩溃的日志,最好是通过uuid的获取方式从原始日志的“Binary Image”段进行获取具体的crash原因;
9、最后根据具体的报错崩溃的信息,可以详细的发现具体的报错原因,这种方式非常适合排查查找隐性的不可预见的app的crash。
附:友盟开发者中心—>文档中心—>应用性能监控U-APM的说明文档链接 https://developer.umeng.com/docs/193624/cate/193275
最后
尤其是上架应用的时候,有些时候苹果反馈的信息里面也会给具体的错误日志,你可以通过dSYM工具直接可以找到具体报错位置,百试百灵。如果你觉得我写的内容对你有帮助请点赞,如果想和我更进一步交流探讨,也可以关注我的微信公众号,那里面同样有更多使用的方法技巧等着你!以上就是本章的全部内容,欢迎关注三掌柜的微信公众号“程序猿by三掌柜”,三掌柜的新浪微博“三掌柜666”,欢迎关注!