Reveal简介
Reveal是一个iOS程序界面调试工具。可以在Reveal上查看视图的层级和修改控件的属性,用来调试UI,同时还可以利用越狱手机查看其它应用的结构,做逆向分析,在应用开发过程中很有用处。
Reveal功能
一、查看应用结构层级
下面是淘宝购物车iOS客户端的层级结构图
1、左边的部分是页面的层级结构,可以看出每一层是由哪些控件构成的,自定义控件的名字,从视图结构可以看出,淘宝的商品tableView中由以下几种Cell组成的。
2、中间部分是一个view的可视化视图,可以在这里实时查询view的视图效果,包括视图框架,缩放、2D视图和3D视图等。
3、右边部分是选中控件的属性,以及一些参数设置,下面是选中view的部分属性信息,包括frame和transform,backgroundColor等。
二、修改属性调试UI
从Reveal的右面的界面可以看到控件的属性,下面以选中苹果手机壳的那个cell为例,修改其背景颜色由白色修改为红色,效果图如下:
同时还可以修改其frame,alpha,hidden,title等属性,可以在不重新运行应用的情况下,通过Reveal修改其属性,达到调试UI的目的。
Reveal在开发中的作用
一、快速查找项目中某个功能所对应的代码
在实际开发过程中,如果某天需要做一个新功能,在没有头绪的时候,如果此时项目中其它模块有类似的功能,需要在项目中找功能对应的类,那么你可以打开Reveal,然后切换到对应的页面,通过Reveal展示的界面关系,可以快速的找到应用界面对应的类,然后再对应的类中查找具体代码实现,比如我想查看全选按钮是怎么实现的,我可选中全选按钮,然后看Reveal中全选按钮的对应的类是TBShopCartFooterView,然后在TBShopCartFooterView中找到具体的实现代码。
二、点击事件不响应,设置属性未达到预期效果,查看view层级,快速定位问题
在开发中常常出现点击事件不响应,设置属性未达到预期的时候,这个时候往往不好查找原因,可以通过Reveal查看视图的层级,来确定控件是否被透明层遮盖,响应事件是否被屏蔽,对应的属性是否已设置成功等。假设点击购物车的全选按钮没响应,通过查看代码,发现响应事件没有被调用,这个时候可以通过Reveal查看全选按钮是否被遮盖,点击事件响应链是否被中断,是否超出父view的frame等原因。
三、逆向分析其它应用的实现
这篇文章是以淘宝为例的,其实就是逆向分析,查看淘宝客户端的具体层级结构和实现,看看某些功能是通过哪些控件实现的,学习界面布局。
Reveal的安装
下面给大家介绍一下Reveal的官网,可以去上面看具体使用方法和安装教程
一、Reveal在模拟器中调试
Reveal在模拟器中的使用的安装方法有好几种,最方便的是通过断点的方式进行安装(官网教程),不需要向程序中添加代码,很方便,下面我就介绍一下具体步骤:
1、在Xcode中打开你的项目,选择View → Navigators → Show Breakpoint Navigator.然后选中Add Symbolic Breakpoint.
2.Symbol输入UIApplicationMain
3.然后点击Add Action按钮, 设置为Debugger Command.
4、拷贝下列代码到下面的文本框中,下面加粗部分为你的Reveal的对应目录,可以在Reveal的Help->Show Reveal Library Finder->iOS Library中查看,比如我的Reveal目录为/Users/xiaominge/Documents/MacSoft/Reveal/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib
expr (Class)NSClassFromString(@"IBARevealLoader") == nil ? (void *)dlopen("/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/RevealServer.framework/Reveal", 0x2) : ((void*)0)
5、选中 Automatically continue after evaluating actions.下面是全部设置
二、Reveal在真机中调试应用
在真机中调试的安装方法,在模拟器中也可以实现,不过需要添加代码到工程中,略微麻烦(真机调试官网教程)
1、打开Xcode工程
2、在Reveal选择Help->Show Reveal Library Finder->iOS Library查看Reveal.framework路径。
3、按住Option (⌥)将Reveal.framework拖入项目工程的根目录中
4、在项目工程的Build settings的Other Linker Flags项的Debug中增加-ObjC -framework Reveal(如果项目中有多个静态文件,这种方式可能有问题,需要改成-force_load
$(SRCROOT)/Reveal.framework/Reveal)
5.运行的程序,即可在Reveal中找到。
三、Reveal在调试其它应用的安装方法
在Reveal中调试其它应用,需要一部越狱的手机,没越狱的手机没办法调试。具体的安装步骤如下:
1.首先在手机的Cydia(越狱手机自带的,类似App Store)中搜索并安装Reveal Loader
2.然后找到iOS设备的目录/Library/MobileSubstrate/DynamicLibraries(推荐使用Cydia中安装OpenSSH工具的方式,还可以通过pp助手->工具->系统文件,通过PP助手移动文件,可能会出现手机不能开机的问题),将libReveal.dylib 放到该目录下。)
3、然后重启手机,或者利用OpenSSH在电脑终端执行killall SpringBoard 重启桌面,可以在手机设置中查看到Reveal,然后选中Reveal->Enabled Applications,打开想要查看的应用开关,然后退出,打开想要查看的app,即可查看对应的层级结构。
参考链接:
http://support.revealapp.com/kb/getting-started/reveal-integration-guide
https://xiuchundao.me/post/integrating-reveal-inspect-app-on-jailbreak-device-with-reveal
http://chaosky.me/2016/07/27/iOS-Security-Defense-Reveal/
http://chuansong.me/n/1308113
网友评论
2.然后找到iOS设备的目录/Library/MobileSubstrate/DynamicLibraries(推荐使用Cydia中安装OpenSSH工具的方式,还可以通过pp助手->工具->系统文件,通过PP助手移动文件,可能会出现手机不能开机的问题),将libReveal.dylib 放到该目录下。)
>>
书上说是要装到/library/RHRevealLoader/ 目录下啊?
这个问题这么解决啊?我遇到了
这个问题这么解决啊?我遇到了