zoukankan      html  css  js  c++  java
  • Reveal:分析iOS UI该武器


    Reveal是分析iOS应用UI的利器:

    Reveal可以在执行时调试和改动iOS应用程序。它能连接到应用程序,并同意开发人员编辑各种用户界面參数。这反过来会马上反应在程序的UI上。就像用FireBug调试HTML页面一样。在不须要重写代码、又一次构建和又一次部署应用程序的情况下就行调试和改动iOS用户界面。--InfoQ

    Reveal执行在Mac上。眼下的最新版本号是1.0.4,能够从这里下载,要求Mac OS X 10.8及以上,iOS 6以及以上。

    如今正式版本号能够下载试用30天,试用期后须要购买。有须要的话能够买一个,功能相当强大。

    Reveal的功能

    查看iOS应用的View层次结构

    使用Reveal的效果如图: 

    图中最左側能够看到View的名称。中间是View的3D展示效果,能够很清楚的看到View的层次结构。

    改动參数后无需编译就可以看到效果

    Reveal还有一个很实用的功能就是动态改动參数,无需编辑动态查看效果。例如以下图所看到的:

    显示出UILabel和UIView的关键属性值,更重要的是,这些都能够动态改动。比方我们改成測试,例如以下图: 

    把当中的图片的宽度从80改成50。改之后的效果如图:

    下图箭头所指向的对方都能够动态改动。

    关于Reveal的很多其它功能,欢迎大家去探索并分享。

    以下介绍Reveal怎样集成到iOS应用中去调试。

    Reveal的3种载入方法

    载入方法(1)

    下载Reveal之后打开,在菜单中的Help中能够找到集成到Xcode项目的方法,这里不再赘述。

    载入方法(2)

    Integrating Reveal without modifying your Xcode project 
    reveal: 檢視 iOS app 的 view 結構。 
    给出了怎样不用改动Xcodeproject就能够载入使用Reveal的方法。

    在当前用户文件夹新建一个文件.lldbinit,位于~/.lldbinit。LLDB每次启动的时候都会载入这个文件。

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

    上述文件创建了4个命令:

    reveal_load_sim,reveal_load_dev, reveal_start 和 reveal_stop
    
    • reveal_load_sim 这个仅仅在iOS模拟器上有效。

      它从Reveal的应用程序bundle中找到并载入libReveal.dylib(请确保你把Reveal安装到了系统的Application目录,假设你换地方了。你改动上述的文件)。

    • reveal_load_dev 这个命令在iOS设备和模拟器上都有效。只是。它须要你在Build Phase中的的Copy Bundle Resources中加上libReveal.dylib。请确保没有放到Link Binary With Libraries这个地方

    • reveal_start 这个命令发出一个通知启动Reveal Server。

    • reveal_stop 这个命令发出一个通知停止Reveal Server。

    请注意:仅仅有在iOS应用发出了UIApplicationDidFinishLaunchingNotification通知之后。比方应用的delegate已经处理过application::didFinishLaunchingWithOptions:之后才干调用上面的reveal_load_*命令。然后再调用reveal_start

    在设备起来之后,你就能够断下应用。在LLDB提示框中输入上述的命令了。

    上述的过程还须要手动输入。以下介绍怎样设置条件断点,使得Reveal在启动之后自己主动载入。

    在你的应用的application:didFinishLaunchingWithOptions 中的代码出加一个断点,然后右键,选择编辑断点。

    输入例如以下图一样的命令:

    又一次执行下应用。假设控制台输出了例如以下信息:

     Reveal server started.
    

    说明Reveal已经自己主动成功载入。

    载入方法(3)

    Reveal查看随意app的高级技巧介绍了怎样在越狱设备上查看随意app的技巧:

    • iOS设备须要越狱,iOS6以上
    • 安装Reveal,越狱设备与安装Reveal的Mac在同一wifi内。
    • 点击菜单Help / Show Reveal Library in Finder。获取libReveal.dylib
    • 将libReveal.dylib上传到设备的/Library/MobileSubstrate/DynamicLibraries
    • 编辑并上传一个libReveal.plist。格式和/Library/MobileSubstrate/DynamicLibraries以下的其它plist类似,当中的filter的bundle写要查看的iOS App的bundle Id。 格式例如以下:

      { Filter = { Bundles = ( "你要查看的app的bundle Id" ); }; }

    • 重新启动iOS设备

    小结

    本文简要介绍了Reveal的功能和几种载入方法。

    欢迎大家去体验下Reveal的强大功能。最后,能够看看关于Reveal的tips:Reveal tips: Navigation

  • 相关阅读:
    ajax加载数据字典下拉选后台
    【算法】二叉树前中后序的递归+迭代(java代码)
    【设计模式】代理模式与装饰器模式的区别
    《重构》读书笔记(一)
    【服务器安全】记一次处理挖矿病毒经历
    【计算机原理】数值存储计算基本理论(一)
    【JAVA】java中类的执行顺序
    【numpy&pandas】Pandas速查笔记
    【前端】打包vue项目到nginx过程
    【服务器搭建】Linux下安装docker
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4593269.html
Copyright © 2011-2022 走看看