2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

别放走了那只啄幕鸟:iOS 开发提效好帮手

  • 2020-05-15
  • 本文字数:2642 字

    阅读完需:约 9 分钟

别放走了那只啄幕鸟: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 内显示日志、接受用户输入,屏幕日志界面大小可调,支持日志显示、用户输入、搜索、正则表达式过滤等功能,系统信息工具直接使用了屏幕日志显示信息:



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

三、主要工具介绍

  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 地址:https://github.com/alibaba/youku-sdk-tool-woodpecker


作者 | 阿里文娱高级无线开发工程师 氚雨


2020-05-15 08:582053

评论

发布
暂无评论
发现更多内容

星环云原生数据湖,为企业精准决策提供全方位技术支撑

星环科技

如何满足大数据集群服务功能真实需求?

星环科技

查询优化技术解读:以分布式搜索引擎 Transwarp Scope为例

星环科技

开源公司IPO热潮已到来?市值153亿美元的HashiCorp带来了哪些启示?

腾源会

开源 开源商业化

【日常工作】配置中心JVM堆外内存异常增长

MindController

小程序下一破局点?钉钉小程序卡片,应用与平台的深度集成

蚂蚁集团移动开发平台 mPaaS

前端 钉钉 移动开发 卡片技术

郭炜:就算倒在离开源成功最近的五米,也要让下一代开源人坚定前行

腾源会

开源 WeOpen Talk

如何提升软件测试思维?

和牛

软件测试 测试 测试右移

Linux之cp命令

入门小站

Linux

从MongoDB迁移到TDengine后,成本显著下降

TDengine

数据库 tdengine 时序数据库 后端技术

技术揭秘!百度Geek说年度优质技术干货合集

百度Geek说

技术专题合集

Nebula Graph 源码解读系列 | Vol.06 MATCH 中变长 Pattern 的实现

NebulaGraph

图数据库 知识图谱 分布式图数据库

万字教你如何用 Python 实现线性规划

华为云开发者联盟

Python 函数 线性规划 求解器 单纯形法

超大超详细图解,让你掌握Spark memeoryStore内存管理的精髓

华为云开发者联盟

Java spark 内存管理 Spark memeory Store memory Store

【签约计划第二季】正式评审环节入选名单公布

InfoQ写作社区官方

签约计划第二季 热门活动

开源投资回报率高达4倍!欧盟委员会全力推动开源软件发展

腾源会

开源

【docker 总结】第五篇 - 制作镜像、数据盘

Brave

Docker 12月日更

Linux学习分享之标准大页和透明大页

@零度

Linux

浅谈大型商城的订单系统设计方案

北游学Java

Spring Boot 订单管理 Java、 项目 商城项目

一图看懂软件缺陷检查涉及的内容

华为云开发者联盟

安全 软件开发 软件缺陷 缺陷漏洞 防护

我是如何把vue项目启动时间从70s优化到7秒的

CRMEB

为什么需要会计CRM系统?

低代码小观

低代码 企业管理系统 ERP CRM系统

国家质量基础设施NQI一站式服务平台系统开发建设方案

a13823115807

系统开发 质量基础设施“一站式” 平台建设

解决rabbitmq消息队列的顺序及重复消费问题

编程江湖

大数据

Zilliz 上榜「中国科创好公司」

Zilliz

netty系列之:从零到壹,搭建一个SOCKS代理服务器

程序那些事

Java Netty 程序那些事 SOCKS 12月日更

人和人差距是如何产生的

卢卡多多

28天写作 12月日更

【云计算】私有云是什么?主要集中在哪些行业?与公有云有什么区别?

行云管家

云计算 公有云 私有云

Linux网络管理技术-OSI七层模型和TCP四层模型

学神来啦

Linux 运维 TCP/IP syn OSI七层协议

【堡垒机】云堡垒机价格是多少?有几种计费模式?

行云管家

云计算 网络安全 等级保护 过等保

别放走了那只啄幕鸟:iOS开发提效好帮手_文化 & 方法_阿里巴巴文娱技术_InfoQ精选文章