美文网首页调试iOSios学习资料
iOS UI调试工具Reveal使用详解

iOS UI调试工具Reveal使用详解

作者: 繁星mind | 来源:发表于2016-10-17 00:35 被阅读4282次

    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 settingsOther 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/ 目录下啊?
        繁星mind:@星好唯柔 看的哪本书
      • AppleIdGX:reveal能查看一个控件继承自哪个类吗?
        繁星mind:@我帮你打水 这个好像看不了,可以看控件所在的viewController
      • 19661f3e9b6c:过pp助手->工具->系统文件,通过PP助手移动文件,可能会出现手机不能开机的问题

        这个问题这么解决啊?我遇到了
        19661f3e9b6c:@繁星mind 解决了,谢谢哈
        繁星mind:点一下开机键,然后按住音量键的“+”键,一直按住不要放,直至进入系统
      • d7c8e31bf977:好厉害 于是我决定我要关注你!!
        19661f3e9b6c:过pp助手->工具->系统文件,通过PP助手移动文件,可能会出现手机不能开机的问题

        这个问题这么解决啊?我遇到了
        繁星mind:@姑娘来自何方 谢谢鼓励

      本文标题:iOS UI调试工具Reveal使用详解

      本文链接:https://www.haomeiwen.com/subject/rcfshttx.html