2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

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

评论

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

MotionLayout_ 打开动画新世界大门 (part II),android插件化原理

android 程序员 移动开发

MVVM系列之一:Lifecycle,面试竟然被这31道Android基础题难倒了

android 程序员 移动开发

OkHttp 断点上传的“基操”(1),完美讲解内存缓存LruCache实现原理

android 程序员 移动开发

OkHttp流程分析,音视频编解码技术

android 程序员 移动开发

lambda表达式(4)(Shawn),开发android

android 程序员 移动开发

🔥 DeepVideo 智能视频生产训练营火热报名中!

阿里云CloudImagine

阿里云 媒体处理 智能视频 智能生产 视频云

《黑客之道》干了一夜的kali Linux之Metasploit渗透测试框架的基本使用

学神来啦

Linux 运维 黑客 渗透 Metasploit

springmvc的定时任务

小鲍侃java

11月日更

OkHttp 3,安卓移动开发大作业

android 程序员 移动开发

实验室信息系统的主要功能及作用

低代码小观

企业管理 管理系统 LIMS实验室信息管理系统 信息管理系统 实验室

OkHttp3源码详解之拦截器(四),计算机应届毕业生面试题

android 程序员 移动开发

阿里大佬手写Docker学习笔记就这?也就是让我五体投地的水平罢了

Docker 编程 程序员

Linux编程之权限系统与工具使用(二),一文详解

android 程序员 移动开发

「元宇宙」赛道,除了脸书,微软也来了

BeeWorks

MVVM系列之二:LiveData,android程序开发教程

android 程序员 移动开发

MotionLayout_ 打开动画新世界大门 (part II)(1),kotlin框架

android 程序员 移动开发

Java线程安全ReentrantLock

FunTester

Java 性能测试 线程安全 测试开发 FunTester

Native开发工具之CPU 和架构(三),学习Android开发的步骤,

android 程序员 移动开发

LeakCanary核心源码解析,android开发从入门到精通素材

android 程序员 移动开发

分享 | 一文了解 PG PITR 即时恢复

RadonDB

数据库 postgresql RadonDB

LC狂刷66道Dynamic-Programming算法题。跟动态规划说拜拜

android 程序员 移动开发

LeetCode,牛客面试必刷,看了这些,flutter面试

android 程序员 移动开发

Gartner预测到2025年,将有一半的云数据中心部署具有人工智能功能的机器人

BeeWorks

直呼内行!阿里大佬离职带出内网专属“高并发系统设计”学习笔记

编程 程序员 消息队列 高并发系统

OkHttp 断点上传的“基操”,算法题+JVM

android 程序员 移动开发

Spring Boot+Vue实现汽车租赁系统(毕设)

偶尔善良

MySQL redis Spring Boot Vue

LayoutManager高端玩家,实现花式表格,kotlin中文

android 程序员 移动开发

就这?腾讯云高工熬夜手写'Java微服务学习笔记'也就让我月薪涨3k

Java spring 程序员 面试

Tapdata 等40余家行业知名企业,应邀参与共建 NextArch Foundation

tapdata

数据库 数据融合

LayoutManager高端玩家,实现花式表格(1),安卓面试题高级

android 程序员 移动开发

Linux学习~树莓派gpio控制,如何化身BAT面试收割机

android 程序员 移动开发

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