Reveal早有耳闻,今天装了个reveal插件,可自动编译运行app时启动reveal,但是运行发现其仅能在模拟器环境下使用,于是改了下其代码,使其即可在模拟器也可在真机上运行:
git clone插件源码项目:https://github.com/shjborage/Reveal-Plugin-for-XCode.git
在整个项目内搜索该句:
objc_msgSend(consoleView, @selector(insertText:), @"expr (void*)dlopen(\"/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib\", 0x2);");
用这句替换掉上面那句
objc_msgSend(consoleView, @selector(insertText:), @"expr (void*)dlopen((const char *)[(NSString*)[(NSBundle*)[NSBundle mainBundle] pathForResource:@\"libReveal\" ofType:@\"dylib\"] UTF8String], 0x2);");`
重新编译运行RevealPlugin,重启XCode
把文件
/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib
通过Build Phases->Copy Bundle Resources
添加到自己项目中(注意不是通过Link Binary With Libraries)Product->Inspect with Reveal运行项目即可
参考文档:
Integrating Reveal without modifying your Xcode project
Reveal还可以用来查看别人app的UI结构,前提条件需要ios6+版本的越狱设备,然后只需以下几步即可:
在Cydia里搜索安装OpenSSH和Cydia Substrate(还有个Terminal可选安装)
创建文件libReveal.plist,输入内容
{ Filter = { Bundles = ( "<App ID>" );};}
,App ID改为需要查看的app的bundle identifier(如何获取identifier这个不需要多说了吧),可以包括多个,例如:{ Filter = { Bundles = ( "com.taobao.taobao4ipad", "com.taobao.taobao4iphone", ); }; }
确认已安装了Reveal,且libReveal.plist在~/文件夹下,在电脑终端依次输入以下命令,192.168.0.X替换为你越狱设备的ip地址,当提示需要输密码时,键入:
alpine
:scp -r /Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/Reveal.framework root@192.168.0.X:/System/Library/Frameworks scp /Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib root@192.168.0.X:/Library/MobileSubstrate/DynamicLibraries scp ~/libReveal.plist root@192.168.0.X:/Library/MobileSubstrate/DynamicLibraries
重启设备或者之前有安装Terminal的话,在越狱设备上打开Terminal,键入
killall SpringBoard
越狱设备上启动你要查看的app,Mac上打开Reveal,左上角Connection那里选择对应的app,大功告成
最后再提一下,也可用SparkInspector查看UI布局,只是scp的文件不同而已
参考文档: