专栏首页ios技术安装啄幕鸟:iOS开发提效好帮手
原创

啄幕鸟:iOS开发提效好帮手

一、背景

客户端日常开发中经常遇到各种低效痛点,比如开发 UI 界面时,开发、设计同学走查 UI 基本靠眼,不易于发现问题;设计同学想修改一个 UI 元素,除非是原开发者,其他同学不知道相关的 UI 类和 UI 布局,定位代码费时费力;再如出现 Bug 时无法在 Bug 现场获取数据定位问题,Debug 依赖电脑联调,缺少独立便捷的 Debug 工具。

对此优酷开发了啄幕鸟 iOS 提效工具平台,在端上整合各种高效 Debug 工具,不依赖电脑联调,直接获取 APP 运行时数据,快速定位问题,提高开发测试效率。

二、啄幕鸟简介

啄幕鸟,即手机屏幕上的啄木鸟,森林里的啄木鸟抓虫子,优酷的啄幕鸟抓 Bug。

啄幕鸟提效工具平台集合了 UI 检查、对象查看、方法监听、po 命令执行、JSON 抓包等十多个开发工具,不依赖电脑联调,直接获取运行时数据,快速定位 Bug,简便易用,零侵入、零依赖、易接入、易扩展。

啄幕鸟架构图、啄幕鸟界面截图

  1. 啄幕鸟架构

啄幕鸟使用插件化架构,每个工具作为插件接入到啄幕鸟基础服务当中,各个插件相互独立,同时支持外部插件注册、定制等,啄幕鸟还提供了一些通用功能模块,如系统分享面板、屏幕日志等,方便插件使用。

  1. 基础服务

基础服务包括生命周期管理,插件加载、注册、运行,资源管理,本地化等基础能力。

  1. 公共模块

啄幕鸟公共模块包括分享面板、图文预览、屏幕折线图、屏幕日志四部分,随着工具开发,越来越多的通用能力会总结到公共模块中。

1)分享面板封装了系统分享功能,方便各个工具导出信息,啄幕鸟中的文本、图片皆支持分享面板导出;

2)图文预览用以全屏查看文本、图片;

3)屏幕折线图方便插件直观的显示数据,啄幕鸟中性能插件使用了屏幕折线图显示性能数据;

4)屏幕日志模块方便各插件在 APP 内显示日志、接受用户输入,屏幕日志界面大小可调,支持日志显示、用户输入、搜索、正则表达式过滤等功能,系统信息工具直接使用了屏幕日志显示信息:563513413,不管你是大牛还是小白都欢迎入驻

系统信息插件中直接使用了屏幕日志显示信息

三、主要工具介绍

  1. UI 检查工具

UI 检查包含控件拾取和测距条两个工具,控件拾取会根据手指在屏幕上的点击坐标,递归遍历 View 层级,获取包含触点坐标的最靠前的 UI 控件,并显示控件的类名、frame、字体、图片 URL 等信息,方便地获取、导出运行时数据;测距条工具会在屏幕上添加大小、位置可控的 View 作为测量标尺,作为控件拾取的补充,对于某些不能通过控件拾取查看的大小间距,如行间距等,可以使用测距条测量。

控件拾取、测距条截图

  1. 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 命令等。

查看某 UILabel 对象、使用 k 命令获取圆角值

2)方法监听

对象查看提供了获取 APP 静态数据的方式,而方法监听提供了获取动态数据的方式,输入监听命令即可监听任意 OC 方法的调用,输出调用参数和返回值,用以查看代码逻辑是否正常执行,关键方法是否调用,监听网络方法以在 APP 内抓包等。

监听设置自动息屏方法并显示日志

方法监听利用了 OC 的消息转发机制,通过 hook 监听对象消息转发的相关方法,最后可以在 ykwoodpecker_forwardInvocation: 方法中收到封装了被监听方法调用参数和返回值的 NSInvocation,即可获取 target、selector 等参数数组,根据参数编码规则解析相应的参数,最后修改 NSInvocation 的 selector 为指向原方法的 ykwoodpecker_selector,即可调用原方法获取返回值,输出日志。

3) po 命令

po 命令是 iOS 开发中最常用的 Debug 命令,po 命令工具会解析输入字符串,获取输入的方法名、参数等,动态调用所输入命令,并显示返回信息。

APP 中执行 po 命令

4)JSON 抓包

使用方法监听抓包略有不便,数据量较大时会引起卡顿,因此提供了更方便的 JSON 抓包工具,通过监听 NSJSONSerialization 的 JSON 解析方法实现抓包。

JSON 抓包工具截图

四、更多功能

随着日常使用,啄幕鸟中增加了更多功能:

1)系统信息:查看系统名称、版本、屏幕、UA 等信息,支持添加业务方信息;

2)SandBox:查看沙盒文件,导出文件等;

3)Defaults:查看、新增、删除 User Defaults;

4)清除数据:清除所有沙盒数据,包括 User Default;

5)UI 对比:支持将设计图导入到 APP 中进行对比,并可画线、标注需修改的地方,方便 UI 走查;

6)查看图片资源、Bundle 资源:查看 APP 中的图片资源与 Bundle 目录内容;

7)Crash:查看本地 crash 日志;

8)触点显示:显示手指触控,方面录屏时显示触控操作;

9)性能插件:查看 CPU、内存占用率,帧率,网络流量等;

10)其他业务方注册的插件:环境切换、埋点、实验、调试工具等。

啄幕鸟工具插件截图

五、扩展开发

啄幕鸟使用插件化架构,新插件扩展方便,部分插件也支持功能扩展。一个类只需实现插件协议方法即可注册为插件,可定制插件分组、分组显示位置、插件名称、icon、插件显示位置等,简单方便,高可定制。控件拾取、系统信息等插件也支持功能扩展,通过监听相关系统通知可以获取拾取到的 View 等事件,并显示自定义信息,具体参见工程 README。

六、接入

啄幕鸟推出以来深受欢迎,已成为产品、设计、开发、测试日常互怼居家旅行必备之工具,啄幕鸟不依赖优酷、阿里或其它第三方库和数据,主要功能皆通过系统 API 或 hook 方式实现,没有使用 +load、+initialize 方法,不开启啄幕鸟不会执行任何代码,简单安全,零侵入,零依赖。

啄幕鸟现已开源,是 AIOSO 的子项目之一,支持 iOS 8.0 及以上,阿里巴巴集团内外使用‘pod YKWoodpecker’即可接入,更多详见工程 README。

啄幕鸟 Github 地址: github.com/alibaba/you…

作者:iOS一叶 链接:https://juejin.im/post/6881490368396230670

原创声明,本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

登录 后参与评论
0 条评论

相关文章

  • 面试通过后,我该选B端还是C端方向?

    周末和某东的一个同事小聚了一下,开始小酌几杯,然后从诗词歌赋谈到人生哲学再到如何实现财富自由,时间到了进入了微醺的状态,也不由自主的开始面对现实。话锋一转聊起了...

    zz_jesse
  • 产品动态 | 腾讯特效SDK免费测试,多样美颜特效带来丰富应用玩法

    随着直播、短视频业务的爆发式增长,丰富多样的视频特效,自然生动的智能美颜,新奇有趣的贴纸玩法也受到大量关注,为多种视频场景注入了新的生机与活力。腾讯云视立方·腾...

    腾讯云音视频
  • 移动跨端技术方案分析对比

    Android 应用采用 Java 或 Kotlin 编写,iOS 应用采用 Objective-C 或 Swift 编写,Web 端采用 HTML /CSS/...

    Onegun
  • 分层测试

    自动化测试一直是测试领域桂冠上的明珠,几乎所有的测试团队都有建立团队的自动化。测试团队的自动化建设也被认为是团队提效的必经之路,但搭建和使用自动化路但路却并非一...

    luxididi
  • 让开发效率提升的跨端方案

    众所周知,很多平台都采用了跨端开发(跨平台开发)的方式。相对于原生开发,跨端开发有开发成本低、开发周期短、开发难度小等诸多优点。

    pak
  • React Native在美团外卖客户端的实践

    美团研发团队基于React Native开源框架,并结合美团业务场景,定制化开发了一套动态化方案。本文主要分享该动态化方案在美团外卖业务场景中的实践,希望能给大...

    美团技术团队
  • 多端配合难?duck不必

    在项目测试过程中,大多数测试任务都会涉及到多端开发的配合,常见的配合端有客户端、前端、服务端、内核等等。而这种多端配合尤其体现在一些复杂度较大的需求任务中,甚至...

    用户5521279
  • 报名 | 技术沙龙前端专场:美团在跨端和低代码方向的探索与实践

    【美团技术沙龙】由美团技术团队和美团科协主办,每期沙龙邀请美团及其他互联网公司的技术专家分享来自一线的实践经验,覆盖各主要技术领域。从2015年7月举办第一期至...

    美团技术团队
  • 自动遍历测试方法与常用工具推荐

    1、由于每次功能回归都不太可能把所有的用例都执行完,所以一般团队倾向于优先执行新功能的测试用例,老功能的用例如果没时间就不会执行,哪怕是有专门的人力写UI自动化...

    岛哥的质量效能笔记
  • 有赞零售移动CI/CD实践

    随着有赞零售业务的蓬勃发展,为了尽早交付有价值的应用满足客户需求,我们采用了敏捷开发的模式,快速拥抱变化的同时保持竞争优势。从 2019 年起,零售客户端的发版...

    有赞coder
  • 软件测试工程师发展的 3 个方向

    关注我比较早的同学应该知道,我之前写过几篇关于软件测试发展的文章: 《做软件测试有前途么?》 《做软件测试到底要不要学编程?》 《技术导向下的业务测试何去何从?...

    sylan215
  • 腾讯云大学大咖分享 | 探索云直播技术

    直播行业规模逐年增加,但行业增速却在逐步放缓,视频直播的平台对于各大厂商的解决方案提出了更多、更个性化的要求。是什么样的技术和服务在背后支撑着我们日常直播内容发...

    可可爱爱没有脑袋
  • 苹果被曝重大系统漏洞:新款 MacBook、iPhone 12、iPad Pro 统统波及!root 权限秒获取,隐私文件随意看

    这不,有人刚把搭载 M1 处理器的 MacBook Air 拿到手,就来了一手漏洞攻破。

    GitHubDaily
  • 这个低代码报表开发平台,操作类似Excel,用好了不需要加班

    但是从实践结果来看,完全的零代码开发应用是不可能的,机器替代人类智慧还需要很长的路要走。但是介于两者之间的低代码模式开发应用是值得尝试的,现在很多企业级应用都是...

    大数据分析不是事儿
  • 小工具必备,小众但实用的工具汇总(不断更新...)

    写代码也要读书,爱全栈,更爱生活。每日更新原创IT编程技术及日常实用技术文章。我们的目标是:玩得转服务器Web开发,搞得懂移动端,电脑客户端更是不在话下。

    做全栈攻城狮
  • 二本毕业,我是如何成为BAT 安卓开发工程师?

    13年,我从一个二本学院的化学专业毕业。许多同学毕业后都是在制药工厂上班,朝九晚六,拿着微薄的工资。那个时候的自己很迷茫,总觉得未来不该如此淡然无味。一波波得招...

    Android技术干货分享
  • 技术大牛都是怎么突破运维瓶颈、提升数据价值的?

    2019年度Gdevops全球敏捷运维峰会 经过潜心打磨,结合行业热点 将于5月10日以北京为起点强势启动 展开新一年精彩纷呈的技术巡演! 运维专场精华 以提...

    腾讯大讲堂

扫码关注腾讯云开发者

领取腾讯云代金券