【分享】iOS下view hierarchy工具

GUI程序开发过程中,庞大的View树总每次总令人花费不少时间进行调试。

当然,程序员总能为这个郁闷的过程开发到方便的工具---view hierarchy。


如果你曾经开发过android程序,那么你应该会了解过Hierarchy Viewer(有可能被墙) 这个官方提供的工具。


在iOS下,Apple并没有提供相关工具。不过幸运的是,有其他开发者开发了相关的工具:

glock45/iOS-Hierarchy-Viewer (开源)

Reveal (商业,闭源,beta阶段)


我强烈推荐大家使用Reveal,尽管它是beta阶段,但已经比较成熟,而且其功能完备,GUI界面也相对清晰,另外支持dylib方式加载省心省力。


介绍一下Reveal的使用方法:

1、下载后,放到/Application/ 目录下

2、在 Reveal.app/Contents/SharedSupport 目录下存放了其文档和framework

3、静态库使用方法,该方法有点是可以在真机和模拟器上使用。

将其Reveal.framework 加入到工程中编译,并同时link 以下三个framework

CFNetwork.framework

QuartzCore.framework

CoreGraphics.framework

最后注意需要将Build Settings的Other Linker Flags设置为-ObjC ,以确保编译的时候会强制link相关代码(否则就会因没有被引用而删除掉)

4、dylib使用方法,优点是可以完全不需要改代码,但你必须要有一个执行代码的环境,如debugger或越狱插件。

1)使用函数启动,添加以下函数,并在启动程序后调用:

void vh()
{
    void *revealLib = dlopen("/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib", 2);
    if (revealLib) {
        [[NSNotificationCenter defaultCenter] postNotificationName:@"IBARevealRequestStart" object:0];
    }
    else{
        char *error = dlerror();
        NSLog(@"Reveal dlopen error: %s", error);
    }
}

2)使用lldb启动(或attatch 到其他进程上,如模拟器的MobileSafari,粘贴下面的代码:

(lldb)p (void*)dlopen("/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib", 2)?(void)[[NSNotificationCenter defaultCenter] postNotificationName:@"IBARevealRequestStart" object:0]:(void)NSLog(@"Reveal dlopen error: %s", (char*)dlerror())

5、打开Reveal,查看结果,这里以MobileSafari为例:


 

最后补充说明一下:上述代码为了方便所以hardcode了dylib的路径,如果需要在真机上使用,需要将dylib复制到真机上并修改路径。


  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值