![f469656361f023ee6354a2a4b1799a1c.png](https://i-blog.csdnimg.cn/blog_migrate/209e3fea7a336ea53bb623a848c82651.jpeg)
阿里妹导读:
本文分享
优酷开源的 iOS 开发提效工具啄幕鸟,
抓包、验埋点、视觉走查都很方便,离案也可随时定位问题,可帮助大家提高发现问题的效率。
产品、测试、运营、UED 及开发人员皆宜
。
文末福利:《15 分钟打造你自己的小程序》电子书下载
。
一 背景
客户端日常开发中经常遇到各种低效痛点,比如开发 UI 界面时,开发、设计同学走查 UI 基本靠眼,不易于发现问题;设计同学想修改一个 UI 元素,除非是原开发者,其他同学不知道相关的 UI 类和 UI 布局,定位代码费时费力;再如出现 bug 时无法在 bug 现场获取数据定位问题,debug 依赖电脑联调,缺少独立便捷的 debug 工具。
对此优酷开发了啄幕鸟 iOS 提效工具平台,在端上整合各种高效 debug 工具,不依赖电脑联调,直接获取 App 运行时数据,快速定位问题,提高开发测试效率。
啄幕鸟项目现已开源,欢迎接入,共建共享。
二 啄幕鸟简介
啄幕鸟,即手机屏幕上的啄木鸟,森林里的啄木鸟抓虫子,优酷的啄幕鸟抓 bug。
啄幕鸟提效工具平台集合了 UI 检查、对象查看、方法监听、po 命令执行、JSON 抓包等十多个开发工具,不依赖电脑联调,直接获取运行时数据,快速定位 bug,简便易用,零侵入、零依赖、易接入、易扩展。
![22e214fe454e12bb89246fad8cbf3739.png](https://i-blog.csdnimg.cn/blog_migrate/eb21255fa4f3b61e755b3cf39cad8e18.jpeg)
啄幕鸟架构图
![f2d2e8bc6887c4dca67f3fa8163498d1.png](https://i-blog.csdnimg.cn/blog_migrate/dca1c8ea06fdedc6ac7ba248f36bd953.png)
啄幕鸟界面截图
1 啄幕鸟架构
啄幕鸟使用插件化架构,每个工具作为插件接入到啄幕鸟基础服务当中,各个插件相互独立,同时支持外部插件注册、定制等,啄幕鸟还提供了一些通用功能模块,如系统分享面板、屏幕日志等,方便各插件使用。
2 基础服务
基础服务包括生命周期管理,插件加载、注册、运行,资源管理,本地化等基础能力。
3 公共模块
啄幕鸟公共模块包括分享面板、图文预览、屏幕折线图、屏幕日志四部分,随着工具开发,越来越多的通用能力会总结到公共模块中。
1)分享面板封装了系统分享功能,方便各个工具导出信息,啄幕鸟中的文本、图片皆支持分享面板导出。
2)图文预览用以全屏查看文本、图片。
3)屏幕折线图方便插件直观的显示数据,啄幕鸟中性能插件使用了屏幕折线图显示性能数据。
4)屏幕日志模块方便各插件在 App 内显示日志、接受用户输入,屏幕日志界面大小可调,支持日志显示、用户输入、搜索、正则表达式过滤等功能,系统信息工具直接使用了屏幕日志显示信息:
![e66a51815b7804f456d1a902634f39fb.png](https://i-blog.csdnimg.cn/blog_migrate/a92155da4de538cd3a3497e5968f31fb.png)
系统信息插件中直接使用了屏幕日志显示信息
三 主要工具介绍
1 UI 检查工具
UI 检查包含控件拾取和测距条两个工具,控件拾取会根据手指在屏幕上的点击坐标,递归遍历 View 层级,获取包含触点坐标的最靠前的 UI 控件,并显示控件的类名、 frame、字体、图片 URL 等信息,方便地获取、导出运行时数据;测距条工具会在屏幕上添加大小、位置可控的 View 作为测量标尺,作为控件拾取的补充,对于某些不能通过控件拾取查看的大小间距,如行间距等,可以使用测距条测量。
![45507bde5ff623fbcf01a58573070e97.png](https://i-blog.csdnimg.cn/blog_migrate/d8badc07d6f3dd7d18762bc17f1e9e25.png)
控件拾取、测距条截图
2 In-App-Debug 工具
iOS 开发主要使用 LLDB 的断点、指令等进行 Debug,依赖电脑联调,In-App-Debug 即不依赖电脑,使用 App 内的 debug 工具获取运行时数据,帮助定位问题,啄幕鸟提供了多种查看运行时数据的方式:对象查看、方法监听、po 命令和 JSON 抓包,帮助在 bug 现场定位问题,In-App-Debug 工具都利用了 objective-C 的运行时特性,将运行时特性工具化,形成一能力多功能的开发工具,如方法监听既可以用于定位 bug,也可以监听网络方法抓取网络数据,其他工具也都有多种用途,可以极大提高 debug 效率。
1)对象查看
App 中所有的对象通过继承、代理、属性等关系,可以看作一个或多个连通图。从一个对象开始,可以利用运行时特性获取连通图里任一个对象的属性、成员变量,获取运行时数据,以定位问题。双击控件拾取的信息区即可打开对象查看,对象查看会显示拾取对象的属性、成员变量列表,点击对象即可查看它的属性,层层查找即可查看到每一个相关的对象,并可以通过命令读取对象 key-path-value、执行 po 命令等。
![8a2057bd0d9a57999c9a5c2c979e98f3.png](https://i-blog.csdnimg.cn/blog_migrate/a5543c3a1dc071b0e496644ef578e174.png)
查看某 UILabel 对象、使用 k 命令获取圆角值
![d9463747e833c41e2cdb0de755b65923.gif](https://i-blog.csdnimg.cn/blog_migrate/d2d261f341347392220951e6fb09540a.gif)
UI 检查、对象查看 Demo
2)方法监听
对象查看提供了获取 App 静态数据的方式,而方法监听提供了获取动态数据的方式,输入监听命令即可监听任意 OC 方法的调用,输出调用参数和返回值,用以查看代码逻辑是否正常执行,关键方法是否调用,监听网络方法以在 App 内抓包等。
![2fadb7a946bc06dc94dc6fe70fc8f5e9.png](https://i-blog.csdnimg.cn/blog_migrate/674f11da01aacd100e0591adcf7c3c4b.png)
监听设置自动息屏方法并显示日志
![7d71d4d1fb11a0645ee5313f41657ee5.gif](https://i-blog.csdnimg.cn/blog_migrate/e6009d3803bceda4e9f751d33bf99b40.gif)
方法监听 Demo
方法监听利用了 OC 的消息转发机制,通过 hook 监听对象消息转发的相关方法,最后可以在
ykwoodpecker_forwardInvocation
方法中收到封装了被监听方法调用参数和返回值的 NSInvocation,即可获取 target、selector 等参数数组,根据参数编码规则解析相应的参数,最后修改 NSInvocation 的 selector 为指向原方法的
ykwoodpecker_selector
,即可调用原方法获取返回值,输出日志。
![32d2fe4d55f8cb039cbf53a2e0cfb384.png](https://i-blog.csdnimg.cn/blog_migrate/147bf42df9423409670a52169b64524c.png)
使用方法监听需要输入类名、方法名、keypath 等参数,故采用了命令行进行交互,扩展性好,配合命令配置,输入也较方便。命令使用统一格式,,如监听命令
L className methodName
,KVC 取值命令
k keyPath
,调用栈查看命令
k callStack
,所有命令详见工程 README。为方便输入,命令可通过后台配置,一键输入,命令配置采用如下格式的 JSON,可在啄幕鸟初始化时指定配置 JSON 的获取地址,推荐在 https://github.com/ZimWoodpecker/WoodpeckerCmdSource 工程中建立配置,方便命令共享。
![01712dff60c3b175ff3e85bc973ac400.png](https://i-blog.csdnimg.cn/blog_migrate/9baa849e2ad44b40c66f6b5f041ab39f.png)
后台命令配置格式
3)po 命令
po 命令是 iOS 开发中最常用的 debug 命令,po 命令工具会解析输入字符串,获取输入的方法名、参数等,动态调用所输入命令,并显示返回信息。
![c9a57dc1bbfc43bd4d2312fef56c239b.png](https://i-blog.csdnimg.cn/blog_migrate/87e9274c0e18d387d3c5ae4440dc087c.png)
App 中执行 po 命令
4)JSON 抓包
使用方法监听抓包略有不便,数据量较大时会引起卡顿,因此提供了更方便的 JSON 抓包工具,通过监听 NSJSONSerialization 的 JSON 解析方法实现抓包。
![4970d01a199adf3d1bafac20f988c1ce.png](https://i-blog.csdnimg.cn/blog_migrate/9cb8bad4a8ba88a51fb9c3c76c3ed250.png)
JSON 抓包工具截图
四 更多功能
随着日常使用,啄幕鸟中增加了更多功能:
![a66a42b91500f8aa6c36dace14b42f80.png](https://i-blog.csdnimg.cn/blog_migrate/1be08df841f61214275a86a2ad8ee35f.png)
啄幕鸟工具插件截图
五 扩展开发
啄幕鸟使用插件化架构,新插件扩展方便,部分插件也支持功能扩展。一个类只需实现插件协议方法即可注册为插件,可定制插件分组、分组显示位置、插件名称、icon、插件显示位置等,简单方便,高可定制。控件拾取、系统信息等插件也支持功能扩展,通过监听相关系统通知可以获取拾取到的 View 等事件,并显示自定义信息,具体参见工程 README。
六 快速接入
啄幕鸟推出以来深受欢迎,已成为产品、设计、开发、测试日常互怼居家旅行必备之工具,啄幕鸟不依赖优酷、阿里或其它第三方库和数据,主要功能皆通过系统 API 或 hook 方式实现,没有使用 + load / initialize 方法,不开启啄幕鸟不会执行任何代码,简单安全,零侵入,零依赖。
啄幕鸟现已开源,是 AIOSO 的子项目之一,支持 iOS 8.0 及以上,阿里巴巴集团内外使用
pod YKWoodpecker
即可接入。
Get Started:
pod 'YKWoodpecker'
一行代码打开啄幕鸟:
#import "YKWoodpecker.h"
// 显示啄幕鸟入口
[[YKWoodpeckerManager sharedInstance] show];
更多介绍详见工程 README,Github 地址:
https://github.com/alibaba/youku-sdk-tool-woodpecker 。
福利来了
独家下载
《15 分钟打造你自己的小程序》
![b46bfc152087c992173a8ecc664b3943.png](https://i-blog.csdnimg.cn/blog_migrate/0d8c750f0b5323d33e23d68b18c1b1da.png)
《15 分钟打造你自己的小程序》独家电子书上线啦!零基础开发你自己的支付宝小程序,手把手教你从入门到精通的宝典。ToDo 待办事项小程序、个人相册小程序、云笔记小程序、运动步数小程序、花呗支付小程序,五大实践场景让你更懂云上生活~
识别下方二维码或点击文末“阅读原文”查看:
![6eafcfb1a3b532232643bdd6f9f73175.png](https://i-blog.csdnimg.cn/blog_migrate/c029211f263b48c27c938eaef7289602.png)
你可能还喜欢
点击下方图片即可阅读
![9b8b119586d7f956c8a8334f665c2817.png](https://i-blog.csdnimg.cn/blog_migrate/bb504a115dafded88ba26608d6a930a9.jpeg)
程序员:除了技术,还有什么更重要?
![bfce5b6759d5d76f72448f7b24b329fa.png](https://i-blog.csdnimg.cn/blog_migrate/c19147209553a11eed8c00a119dea98e.jpeg)
架构方法论:如何自底向上推导应用逻辑?
关注「阿里技术」
把握前沿技术脉搏
![3144a931d919c7e6448c7cb212cc68f7.gif](https://i-blog.csdnimg.cn/blog_migrate/f08557133ca3608fca6ac97a26e0de27.gif)
戳我,下载小程序开发电子书。