没想到三年后还得再编辑一次
详情参见官网,提供了三个集成方法
考虑到对代码的零侵入性,首选断点集成(如果打了全局断点,则Reveal是不可用的),具体也不知道是哪个版本的Reveal开始使用的了
参考官网的步骤,依然显示无法连接
解决方法如下:
在终端中使用命令
dns-sd -B _reveal._tcp local
可以查看本机的reveal号码
使用命令查看监听Reveal的端口号
dns-sd -L Reveal--Reveal号码 _reveal._tcp.
使用命令查看连接
curl -s -D - http://localhost:端口号/application -o /dev/null
最后是改Host,Mac的Host文件在在/etc/hosts中,加入3行:
1 | 127.0.0.1 localhost |
官网下载地址: http://revealapp.com (试用期30天)
在真正玩这个之前,听到了很多对Reveal的褒奖,不需要重写代码可以改变用户页面,实时修改页面布局,查看任意APP的UI等。
只是想感受一下的话,可以简单的集成一下。下载安装好后打开
将Reveal.framework导入项目,并需要添加libz.tbd库,在Other Linker Flags项增加Any iOS Simulator SDK项
使用模拟器和真机都可以,但是使用真机的话需要和电脑处在同一网络环境下。
然后使用模拟器运行项目,打开Reveal
上图左侧就是目录结构,中间是UI展示,右侧是类似于Xcode右侧的导航展示,可随意修改,并且会让模拟器的UI一并修改,虽然再次运行会恢复。
虽然Xcode自带有Debug View Hierarchy,但是相对较弱。在Reveal虽然可以修改UI但是感觉也不是很方便,也可能是因为接触不多没接触到精髓,但是使用Reveal来查看UI层次结构的确更为方便,尤其是刚接手一个新的项目,点击控件的同时会显示对应的类和相关的值。
因为试用期30天,网上有看到延长试用时间的方法,是进入~/Library/Preferences/这个目录,打开com.ittybittyapps.Reveal.plist文件,删除IBAApplicationPersistenceData这一项。然后再打开Reveal,会在右上角看到试用提示,再次变成30天。这只是延长使用时间,没能真正破解。还可以修改电脑上的系统时间,设为之前的时间,再次打开也可以继续使用,但是每次都要修改时间再改回来觉得比较麻烦,希望能找到好的破解方法。
有人研究出了用Reveal来观看任意app的UI方法,这个属于逆向工程的范畴了,也是接下来需要研究的课题!
网上的另外一种集成方法是
在当前用户目录新建一个文件.lldbinit,位于~/.lldbinit,LLDB每次启动的时候都会加载这个文件
在.lldbinit中输入如下内容
1 | command alias reveal_load_sim expr (void*)dlopen("/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib", 0x2); |
1 | command alias reveal_load_dev expr (void*)dlopen([(NSString*)[(NSBundle*)[NSBundle mainBundle] pathForResource:@"libReveal" ofType:@"dylib"] cStringUsingEncoding:0x4], 0x2); |
1 | command alias reveal_start expr (void)[(NSNotificationCenter*)[NSNotificationCenter defaultCenter] postNotificationName:@"IBARevealRequestStart" object:nil]; |
1 | 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。
打开工程后,在appdeleget中的didfinished:方法中打下断点,并按下图编辑断点,重新运行下应用即可
Reveal也可以在真机调试中链接真机,需要在上图将reveal_load_sim改为reveal_load_dev,并且需要将reveal的动态链接库一并添加进工程中:
点击revel菜单的”help->show reveal library in finder”在finder中查找reveal的动态链接库:libReveal.dylib,并将其拖入工程
然后调整libReveal.dylib的引用方式,需要将libReveal.dylib文件拷贝到Sandbox中,但是我们通常在引入libReveal.dylib的时候Xcode默认是以Link Binary With Libraries的方式的,实际上应该是Copy Bundle Resources,所以应该先将libReveal.dylib从Link Binary With Libraries中移除掉,然后在Copy Bundle Resources中添加。
如有任何疑问或问题请联系我:fishnewsdream@gmail.com,欢迎交流,共同提高!
Objective-C/Swift技术开发交流群201556264,讨论何种技术并不受限,欢迎各位大牛百家争鸣!
微信公众号OldDriverWeekly
,欢迎关注并提出宝贵意见
老司机iOS周报,欢迎关注或订阅
刚刚在线工作室,欢迎关注或提出建设性意见!
刚刚在线论坛, 欢迎踊跃提问或解答!
如有转载,请注明出处,谢谢!