首页 > 代码库 > 项目总结(五)--- 界面调试工具Reveal

项目总结(五)--- 界面调试工具Reveal

  在开发中,我们也许会碰到以下需求:对于一些动态复杂的交互界面,手码去制定界面是常有的事情,然而我们在开发中想修改过一些参数后想看下实时效果,只能重新运行项目,进入到对应的页面来进行修改,是不是有点麻烦呢? 还有,作为屌丝程序猿想脱离屌丝行列,不断学习先进的东东是必不可少的,那么,如果看到别的大公司开发的优秀APP,想借鉴学习下,又该怎么入手呢?这时,Reveal会帮助我们。

  1、Reveal的下载

    进入到官网(http://revealapp.com/)后 

    技术分享

    下载就可以(注意下载后默认保存的是在“下载”下面,手动移动到“应用程序”下面,方便下面使用时的一些操作)。

  2、界面认识

    技术分享

  3、Reveal的使用

    1》连接到模拟器调试

      连接到模拟器调试有好几种方法,有的是必须修改功能文件(缺点显而易见,协作开发时得要求别人也安装这玩意),有的是断点后在LLDB输入命令等等。在这就简单记录下最方便简单地一种方式,步骤如下:

      (1)在当前用户目录下,建立.lldbinit文件,并输入以下内容并保存

        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];

      (2)在项目代理中的application:didFinishLaunchingWithOptions:方法中,进行以下几步,

        第一:添加一个断点,并右击编辑

        第二:单击“Action”右边的“+”,输入“reveal_load_sim”

        第三:勾选上“Option” 上的选项 “Automatically continue after evaluating”,如图:

        技术分享

    然后运行APP在模拟器,打开Reveal就可以看到左上角有个连接调试。到此就可以尽情享受你的成果了。

  2》连接到真机调试

    (1)添加Reveal链接动态库到我们工程:在Reveal菜单“Help”->"Show Reveal Library in Finder" 找到动态库后拖拽到工程中;

    (2)注意Xcode默认是将其设置到“Link Binary With Libraries”中,需要删除它,并添加到 “Copy Bundle Resources”下面;

    (3)下面步骤与上面类似,只需要将断点中得Action 改为 reveal_load_dev 就可以了。

  3》使用此工具调试其他应用界面

    (1)要求手机必须越狱,至于越狱教程,去其他地方搜吧,好多

    (2)将Reveal 的动态链接库上传到iOS设备目录 /Library/MobileSubstrate/DynamicLibraries (这里存放着所有在系统启动时就需要加载的动态链接库)中即可。(上传方法;可以安装OpenSSH后,用scp来上传)

    (3)同时编辑并上传一个libReveal.plist,格式如下:

      {

        Filter={

            Bundles = ("需要分析的BundleID 1","需要分析的BundleID 2" …);

        };

      }

    这样可以监控指定的APP,不上传这个文件也可以,那样就可以监控所有的APP,速度慢点而已。

    注意:如果libReveal.dylib没有执行权限,可以使用 chmod+x libReveal.dylib命令来增加权限后,执行 killall SpringBoard重启桌面。

 

  当然,类似的软件还有PonyDebugger, Spark Inspector来进行调试。

项目总结(五)--- 界面调试工具Reveal