Reveal

Reveal早有耳闻,今天装了个reveal插件,可自动编译运行app时启动reveal,但是运行发现其仅能在模拟器环境下使用,于是改了下其代码,使其即可在模拟器也可在真机上运行:

  1. git clone插件源码项目:https://github.com/shjborage/Reveal-Plugin-for-XCode.git

  2. 在整个项目内搜索该句:

    objc_msgSend(consoleView, @selector(insertText:), @"expr (void*)dlopen(\"/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib\", 0x2);");
    
  3. 用这句替换掉上面那句

    objc_msgSend(consoleView, @selector(insertText:), @"expr (void*)dlopen((const char *)[(NSString*)[(NSBundle*)[NSBundle mainBundle] pathForResource:@\"libReveal\" ofType:@\"dylib\"] UTF8String], 0x2);");`
    
  4. 重新编译运行RevealPlugin,重启XCode

  5. 把文件/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib通过Build Phases->Copy Bundle Resources添加到自己项目中(注意不是通过Link Binary With Libraries)

  6. Product->Inspect with Reveal运行项目即可

参考文档:

Integrating Reveal without modifying your Xcode project


Reveal还可以用来查看别人app的UI结构,前提条件需要ios6+版本的越狱设备,然后只需以下几步即可:

  1. 在Cydia里搜索安装OpenSSHCydia Substrate(还有个Terminal可选安装)

  2. 创建文件libReveal.plist,输入内容
    { Filter = { Bundles = ( "<App ID>" );};},App ID改为需要查看的app的bundle identifier(如何获取identifier这个不需要多说了吧),可以包括多个,例如:

    {
        Filter = {
            Bundles = (
                "com.taobao.taobao4ipad",
                "com.taobao.taobao4iphone",
            );
        };
    }
    
  3. 确认已安装了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
    
  4. 重启设备或者之前有安装Terminal的话,在越狱设备上打开Terminal,键入killall SpringBoard

  5. 越狱设备上启动你要查看的app,Mac上打开Reveal,左上角Connection那里选择对应的app,大功告成

最后再提一下,也可用SparkInspector查看UI布局,只是scp的文件不同而已

参考文档:

How to Inspect the View Hierarchy of Third-Party Apps