Reveal界面调试工具的使用总结

3,433 阅读3分钟

「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」。

前言

Reveal(revealapp.com)是一个iOS程序界面调试工具。使用Reveal,我们可以在iOS开发时动态的查看和修改应用程序的界面。

在开发中,对于动态或者复杂的交互界面,手写UI的不可避免的。通过Reveal,我们可以很方便的调试和修改应用页面,免去了每次修改之后还要重新启动程序的痛苦。


一. Reveal简介

Reveal类似Chrome的“审查元素”功能,使我们不但可以在运行时看到iOS程序的界面层级关系,还可以实时的修改程序界面,不用重新运行程序就可以看到修改之后的结果。

在使用时,我们将Reveal连接上模拟器或真机上正在运行的iOS程序,然后就可以查看调试iOS程序的界面。

下图是Reveal的运行界面,其界面主要分成三个部分:

  1. 左边部分是整个界面的层级关系,在这里可以以树形层级的方式查看所有的界面元素。

  2. 中间部分是可视化查看区域,用户可以在这里切换2D或者3D的查看方式,这里也能看到程序运行的实时界面。

  3. 右面部分是控件详细的参数查看区域,当我们选中其中某个控件的时候,右边就可以显示出该控件的详细参数列表。除了在查看这些参数值以外,还可以修改这些值,所有的修改会实时的反应到中间的预览区域。


二. Reveal的使用

Reveal官方介绍的方法大多数需要修改工程文件,由于目前团队开发居多,那么如果修改了工程文件,就需要团队中其他人也都装Reveal,这是很不友好的。下面介绍不修改任何工程文件的情况下完成对模拟器和真机的调试方法。

2.1 创建.lldbinit文件,并编辑

打开终端,输入 vi ~/.lldbinit,创建一个.lldbinit文件,然后将如下内容输入到该文件中,并:wq保存退出。

command alias reveal_load_sim expr (void *)dlopen("/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib", 0x2);\

command alias reveal_load_dev expr (void *)dlopen([(NSString *)[(NSBundle *)[NSBundle mainBundle] pathForResource:@"libReveal" ofType:@"dylib"] cStringUsingEncoding:0x4], 0x2);\

command alias reveal_start expr (void)[(NSNotificationCenter *)[NSNotificationCenter defaultCenter] postNotificationName:@"IBARevealRequestStart" object:nil];\

command alias reveal_stop expr (void)[(NSNotificationCenter *)[NSNotificationCenter defaultCenter] postNotificationName:@"IBARevealRequestStop" object:nil];\

该步骤其实是为lldb设置了4个别名,这样可以方便后续操作,这4个别名意义如下:

reveal_load_sim 为模拟器加载reveal调试用的动态链接库。

reveal_load_dev 为真机加载reveal调试用的动态链接库。

reveal_start 启动reveal调试功能。

reveal_stop 停止reveal调试功能。

注:reveal_load_sim等别名可以根据自己的喜好设置。

2.2 模拟器调试

在AppDelegate类的application: didFinishLaunchingWithOptions:方法中,进行如下三个步骤:

  1. 在方法内部第一行增加一个断点,并编辑该断点“Edit Breakpoint”;

  2. 单击“Action”右面的“Add Action”按钮,然后输入模拟器加载动态库的别名:“reveal_load_sim”;

  3. 勾选“Option”上的“Automatically continue after evaluating actions”选项

image.png

之后运行iOS程序,并打开Reveal,在Reveal界面的左上角看到是否有模拟器可以连接调试,如果有选择它,查看并调试iOS程序。

image.png