我们公司最近正开始在做app的监控iOS端的由我在主导负责。
我们的监控暂时偏向性能方面网络耗时的监控也计划会在后期加上。现阶段我们想拿到app的用户操作轨迹包括按钮点击、手势操作等,也想拿到用户的页面驻留时间、崩溃日志、接口耗时情况等等信息
我希望能做到将这一套监控代码封装成SDK,然後将它导入项目即可实现监控不需要去傻乎乎地在各个操作点做埋点。
对此我已经完成了一部分功能和大家分享一下我的思路。
比如按钮点击的监控主要是利用了Objective-C的runtime特性:在Objective-C中,方法的调用代码(严格来说还不能叫调用)和方法的实现代码并不是在编译之后就立刻关聯在一起的而是直到程序要执行这个方法了,才通过runtime机制动态地去查找这个方法的实现代码于是这中间就有了可以做文章的地方了,runtime提供了"方法交换"这个功能来供我们偷龙转凤
回到按钮点击的监控,当程序要调用方法将某个按钮和它的点击事件相关联的时候监控SDK便使用方法交换将这个方法交换掉,换成一个监控SDK自定义的方法在这个方法中让按钮先关联上监控相关的代码,然后才是原本的点击倳件神不知鬼不觉。这样就实现了只要导入SDK就能获取到按钮点击事件的功能了。
对于页面驻留情况同样也是使用了方法交换,将页媔加载显示完毕和页面消失完毕等方法交换出来先执行监控代码,再执行原方法也顺利地拿到了我要的信息。
不过还有一个问题上佽发现对于xib生成的按钮,这套监控方法并不生效也还没有找到解决方法,因为过年放假了(笑)也希望有人能给我提供点思路,不胜感谢
以上是我的一些思路和经验,希望对你有帮助