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。
Reveal:分析iOS UI该武器的更多相关文章
- Reveal分析IOS界面,plist文件读取
Reveal分析IOS界面,需要得到app的 softwareVersionBundleId上传到iphone中 , 而IOS8的iTunesMetadata.plist (设备路径/var/mobi ...
- Reveal:分析iOS UI的利器
转:http://security.ios-wiki.com/issue-3-4/ Reveal简介 Reveal是分析iOS应用UI的利器: Reveal能够在运行时调试和修改iOS应用程序.它能连 ...
- iOS安全攻防(三):使用Reveal分析他人app
使用Reveal分析他人app 准备工作 1)已越狱的设备,而且已安装了OpenSSH,MobileSubstrate等有用工具(Cydia源里安装) 2)本地已安装了Reveal 操作步骤 1)拷贝 ...
- iOS使用Reveal分析他人app界面
本文转自http://blog.csdn.net/cuibo1123/article/details/45694657 安装: 首先前往 http://revealapp.com/download/ ...
- iOS UI布局调试工具
查看ios软件的ui布局有三种: 1.DCIntrospect 这种方式是开源的,我从github上clone下来后运行demo,运行遇到了问题:Xcode cannot run using t ...
- Reveal分析工具的使用
首先:在reveal官网http://revealapp.com/下载适用版本.试用版本是30天免费,可以选择破解.破解链接http://pan.baidu.com/s/1bnc5wwn?errno= ...
- [IOS]IOS UI指南
[IOS]IOS UI指南 众所周知,IOS的界面设计,越来越流行,可以说都形成了一个标准,搜集了一些资料,供自己以后学习使用! iOS Human Interface Guidelines (中文翻 ...
- IOS UI 第八篇:基本UI
实现图片的滚动,并且自动停止在每张图片上 - (void)viewDidLoad{ [super viewDidLoad]; UIScrollView *scrollView = [[U ...
- 国外IOS UI指南
国外IOS UI指南 众所周知,IOS的界面设计,越来越流行,可以说都形成了一个标准,搜集了一些资料,供自己以后学习使用! iOS Human Interface Guidelines (中文翻译) ...
随机推荐
- No-Touch Integration 在SharePoint中使用社区支持的Silverlight应用程序
No-Touch Integration 在SharePoint中使用社区支持的Silverlight应用程序 No-Touch Integration应该是最简单的方法了.将Silv ...
- learning - Haskell AND Lisp vs. Haskell OR Lisp - Programmers Stack Exchange
learning - Haskell AND Lisp vs. Haskell OR Lisp - Programmers Stack Exchange Haskell AND Lisp vs. Ha ...
- postgresql优化数据的批量插入
原文:http://www.cnblogs.com/mchina/archive/2012/08/11/2537393.html 有以下几种方法用于优化数据的批量插入. 1. 关闭自动提交: ...
- MySQL的一些基本操作
近期開始学习MySQL,主要是通过书籍,和看燕十八老师的视频,然后通过博客记录自己的学习过程. 登入数据库 zhiniaobu@telunsu-K55VD:~$ mysql -uroot -p Ent ...
- 在VS2012中使用GitHub
注册GitHub账号(DeanZhouLin) https://github.com/ 向GitHub中添加一个仓库(Test) *创建完成后,记录该仓库的地址:https://github.com/ ...
- PHP移动互联网开发笔记(2)——变量及常量
原文地址:http://www.php100.com/html/php/rumen/2014/0326/6703.html 一.PHP5.4的基本的语法格式 1.PHP的切割符 view source ...
- JS经常使用正則表達式【分享】
工作中JS经常使用表达式: 1)2010-09-10类型日期校验 2)推断正整数.字符串长度 3)校验长度,和是否空 4)推断字符串是否为空 5)比較字符大小 6)推断字符串长度 7)推断格式是否为E ...
- jQuery插件实战之fullcalendar(日历插件)Demo
jQuery的插件许多,应用的场景也很丰富,今天我这里给大家介绍一款很有用的日历页面开发插件 - fullcalendar,眼下最新版本号是1.5.1,使用这款插件可以高速帮助你高速编程实现基于web ...
- 所有城市list每次从页面花1段时间抽取后写入到数组,
所有城市list每次从页面花1段时间抽取后写入到数组,
- MVC的DependencyResolver组件
MVC的DependencyResolver组件 一.前言 DependencyResolver是MVC中一个重要的组件,从名字可以看出,它负责依赖对象的解析,可以说它是MVC框架内部使用的一个IOC ...