UI Debug

突然发现一个比较有意思的UI debug工具,所以接直接总结一把现在用到过的UI debug工具

Reveal

老牌工具,Xcode开发的时候可以在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions的debug断点中加入expr (Class)NSClassFromString(@"IBARevealLoader") == nil ? (void *)dlopen("/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib", 0x2) : ((void*)0)可以不添加framework的情况下,在模拟器中debug,如果要真机debug那就要把reveal framework打包在项目中了。优点视图层次展现清晰,能即时修改属性并作用到UI上,缺点要钱,要钱,要钱

Flex

开源工具,需要集成在项目中,优点可以方便的修改UI的属性,缺点影响包体大小,多层次的UI界面点击选中比较困难

Xcode

在xcode开发的时候本身可以使用debug选项debug view hierarchy,优点是比较好的展现View的层次结构,但是只能随便看看并不能做任何的修改,就好比lite版的Reveal

UIDebuggingInformationOverlay

iOS自带私有的UI debug类,也是只能看,不过能调节view的透明度,具体功能稍后分析,优点系统自带,不占用任何包体大小,功能随版本更新,缺点私有API,不能带上线

今天具体的就是想说一下UIDebuggingInformationOverlay

UIDebuggingInformationOverlay 6大功能

View Hierarchy

选中Window的子view, 可以更换不同的window查看其子view

VC Hierarchy

查看存活的VC里的子view

Ivar Explorer

UIApplication中的所有变量

Measure

可以测量屏幕上点到点的距离, 打开View Mode可以测量任意UI元素的尺寸

Spec Compare

可以那设计图和当前的界面直接做对比,精准检验视觉还原度

System Color Audit

点击进入是空列表,不知道可以干啥

UIDebuggingInformationOverlay使用方法

1
2
3
4
Class overlayClass = NSClassFromString(@"UIDebuggingInformationOverlay");
[overlayClass performSelector:NSSelectorFromString(@"prepareDebuggingOverlay")];
id obj = [overlayClass performSelector:NSSelectorFromString(@"overlay")];
[obj performSelector:NSSelectorFromString(@"toggleVisibility")];

后面两行可以不用写,只要双指点击状态栏就可以了

##Anyway
不缺钱的首选还是Reveal,如果不舍得花钱,可以根据自身的情况选择其他工具