共计 2812 个字符,预计需要花费 8 分钟才能阅读完成。
应用背景
作为开发人员,日常不是在写 BUG,就是在写 BUG 的路上。尤其是中小型公司,通常人手不够,开发流程不欠缺,测试场景无奈笼罩全副。只管在每次批改旧性能和做新性能时都暗示本人要少写 BUG,上线前测试同学也会回测,但依然无奈防止一些漏网之鱼。如何在上线后疾速发现问题、定位问题、解决问题,这是咱们开发人员面临的挑战。学宝是一款专门面向中小学学生的语文、数学、英语全科同步学习工具 APP。从 2014 年第一版上线开始,Android 和 iOS 端同时接入友盟统计 SDK,用于日常的数据统计和留存剖析,借助这些服务,为公司节俭了很多老本。友盟统计 SDK 同时也能收集 APP 的解体信息,在产品上线后帮忙咱们第一工夫发现问题,疾速定位问题,而咱们开发人员要做的就是疾速的解决问题,晋升用户体验。
SDK 集成
以下以学宝 APP iOS 端为例,示例在日常应用 U-APM 发现与解决 BUG 的流程。首先没有账号的要注册一个友盟账号,创立你的利用拿到 appkey。
如果你是第一次集成,举荐应用 Cocoapods 来集成,而后在你工程的 Podfile 文件增加以下内容,最初在终端进入工程的根目录,执行 pod install 命令。因为 UMAPM 依赖 UMCommon 和 UMDevice 组件,所以要放进去。第一次集成倡议加上 UMCCommonLog,通过查看控制台的日志确认是否集成胜利,胜利后就能够移除出了。
pod ‘UMAPM’, ‘~> 1.4.2’
pod ‘UMCommon’, ‘~> 7.3.5’
pod ‘UMDevice’, ‘~> 2.0.4’
pod ‘UMCCommonLog’, ‘~> 2.0.2’
在 AppDelegate.m 文件中引入头文件 #import <UMCommon/UMCommon.h>,只须要一行代码,就能够把 U -APM 胜利的集成到工程中。如果集成了 UMCCommonLog 组件,加上 [UMConfigure setLogEnabled:YES] 在控制台查看 log,这样就很简略的实现了 U -APM 的集成.
[UMConfigure initWithAppkey:@”xxxxxxxx” channel:@”App Store”];
[UMConfigure setLogEnabled:YES];
U-APM 默认开启 Crash 监控、卡顿监控、启动监控、内存监控和 OOM 监控,也可通过管制属性值敞开一些性能,依据本人需要来。
[UMAPMConfig defaultConfig].crashAndBlockMonitorEnable = YES; // crash& 卡顿监控
[UMAPMConfig defaultConfig].launchMonitorEnable = YES; // 启动监控
[UMAPMConfig defaultConfig].memMonitorEnable = YES; // 内存监
[UMAPMConfig defaultConfig].oomMonitorEnable = YES; // OOM 监控
整个接入流程非常简略 更多形式以及问题课跳转到官网文档 https://developer.umeng.com/docs/193624/detail/194595 ?&utm_source=w_MKT_dswz_dxf_wz
解决问题
可依据版本、工夫、设施等多维度过滤出如下谬误列表。
以一个常见数组越界的 Crash 举例,这是一个非必现的 BUG,在自测和测试同学测试期间都没发现这个问题,上线后再 U-APM 后盾收到多条记录。
Application threw exception NSRangeException: * -[__NSArrayM objectAtIndexedSubscript:]: index 2 beyond bounds [0 .. 1]
开谬误详情页,能够看到发送同样的问题都统计在这里了,依据行为日志,看到解体前浏览的最近 10 个页面,就晓得用户走过的门路,晓得大略在哪个页面产生的。
尽管晓得在哪个页面闪退,然而这些还不够,一个页面可能会有多个子页面,如何晓得具体哪个类和哪一行,就须要咱们再上传符号表。在咱们打包的 Archive 文件中找到 dSYM 文件拷贝到桌面,而后点击谬误明细左边的符号表治理,上传拷贝进去的 dSYM 文件。
上传胜利后,无奈立马看到解析后果,须要几分钟的解析,通常五分钟左右就好。
解析好之后就很明确定位到具体的哪个类哪一行。在 touchesBegan:withEvent: 有一个数组取值操作未做平安校验,加上就好。
总结
年初在降级友盟统计 SDK 的时候,发现收集 Crash 的性能,已从友盟统计组件中抽出来,并做了重构独立成一个组件,并多维度进行收集闪退日志,在谬误明细里列出最近 10 个页面门路性能太棒了,十分有利于去复现这些问题。作为开发人员,在写逻辑要仔细谨严的同时,也要借助一些辅助工具,收集没有思考到的 Crash,晋升 APP 稳定性。针对挪动端,友盟 SDK 以及一些列工具是一个不错的抉择,在节俭人力的同时也能节省成本,在应用中遇到一些问题客服的响应速度也是真快,可能是国内目前惟一一家 SDK 常常保护更新,还有客服的商家了,而且还收费。
小的倡议
U-APM 正在迭代,作为深度用户,在应用中也会遇到一些不棘手的中央,虽也不影响应用,然而置信大家都一样的感触,还是期待能优化一下上面问题。
1、进入 U-APM 面板能默认展现最近 24 小时的解体数据,而不是最近一小时的数据
拿咱们本人举例:咱们用户沉闷工夫集中在夜晚七点到九点之间,如果某天早上到工位后我来查看 APP 解体状况,点进来后据可能是 0,须要再去筛选一些,如何不是联调或者灰度的时候,失常来说这个默认一小时意义不大。
2、解体信息详情面板机型和和应用时长可能直观一些
如下图,在谬误明细里 iPhone10,3 对应日常相熟的型号是 iPhone X,如果不去查一下材料是不晓得 iPhone10,3 是具体哪一款型号,这里更心愿看到的是常见型号类型。有时候想去理解用户应用工夫的时候,在看到 6345s 的时候还是要关上手机的计算器去换算一下。冀望工夫超过一分钟小于一小时的转换成分钟(比方:3 分钟、20 分钟),超过一小时小于一天的工夫转换成小时(比方:23 小时 48 分钟),超过 1 天的就显示天数(比方:3 天 10 小时)。
3、可能反对自定义的谬误
有一些问题不会导致解体,然而用户看到的就是有问题的,可能是后盾返回的个别数据有问题,这个时候就有来自定义谬误这个需要。就像示例中解决数组越界的问题,先天返回的字段中本应该有两个长度一样的数组,然而是因为个别数据录入导致问题,导致返回的数组大小不一样。
4、解决 iOS 新我的项目中集成 SDK 时闪退问题
用 Xcode 11 以上版本新建一个工程,集成 SDK 运行间接闪退了。当然有教训的搜一搜也能很快解决,然而对一个刚接触的老手来说这个闪退还是挺忽然的,冀望能在文档中阐明,更好的计划是能在 SDK 外部做兼容修复。
作者:杜鑫峰