写点什么

别放走了那只啄幕鸟: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:582074

评论

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

极智网络告警关联规则挖掘

鲸品堂

方法论 解决方案

攻击区块链网络的都有哪些方式方法

CECBC

区块链

思维导图学《Java性能权威指南》

Yano

Java 性能 思维导图

“区块链+电子商务”,电商能否再创辉煌?

电微13828808271

大数据前置知识-服务器及磁盘

大数据技术指南

大数据 4月日更

26天吃透算法笔记,面试字节,面试官朝我比了个“ok”

比伯

Java 编程 架构 算法 技术宅

聪明人的训练(十二)

Changing Lin

4月日更

Redis单线程已经很快,为何6.0要引入多线程?有啥优势?

Java架构师迁哥

视频云全球创新挑战赛 —— 视频目标分割经典算法解析

阿里云CloudImagine

阿里云 计算机视觉

区块链电子政务——不动产综合服务平台

电微13828808271

一文读懂容器存储接口 CSI

阿里巴巴云原生

容器 云原生 k8s 存储 调度

混音新手必备软件:FL Studio,用它简单制作混音

奈奈的杂社

【LeetCode】子集二Java题解

Albert

算法 LeetCode 4月日更

EGG Network阿凡提 公链EFTalk全球首创POTP二叉交叉共识机制

币圈那点事

用 JavaScript 实现三次贝塞尔动画库 - 前端组件化

三钻

JavaScript 大前端 动画 组件化

回归主流:区块链新大门的“密钥”

CECBC

区块链

专业开发者眼中的HarmonyOS:专访资深软件工程师李宁

Geek_283163

华为

BERT和GAN咋压缩,且看咱PaddleSlim新利器—— OFA

百度大脑

百度 飞桨

技术人如何调研和选型第三方 SDK?全文干货

融云 RongCloud

android开发面试题,字节跳动Android三面凉凉,手慢无

欢喜学安卓

android 程序员 面试 移动开发

企业如何做数字化转型?想要资产状况及时把控,它的作用至关重要!

一只数据鲸鱼

数字化 数据可视化 资产管理

阿里高级架构师纯手打832页Java全栈知识点笔记,吃透后成功七面上岸滴滴!

Java架构追梦

Java 阿里巴巴 架构 面试 成长笔记

交易所跟单软件搭建,合约跟单系统开发

Hadoop的发展及其架构

五分钟学大数据

hadoop 4月日更

Javacv 音视频小工具 - 下载抖音无水印视频

张音乐

Java 音视频 ffmpeg 抖音 javacv

跟着源码学IM(八):万字长文,手把手教你用Netty打造IM聊天

JackJiang

Netty 即时通讯 IM

面试官:请说说什么是BFC?大白话讲清楚

蛙人

CSS 大前端

程序员去大公司面试,我的头条面试经历分享,搞懂这些直接来阿里入职

欢喜学安卓

android 程序员 面试 移动开发

SpringBoot Admin2.0 集成 Java 诊断神器 Arthas 实践

阿里巴巴云原生

Java 运维 云原生 中间件 Arthas

积极研发区块链技术落地应用业务 这家A股上市企业试水云算力挖矿

CECBC

区块链

如何将区块链打造为城市底层基础设施

CECBC

区块链

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