Apple隐藏的Debug利器UIDebuggingInformationOverlay

转自 http://www.jianshu.com/p/36b887a722a7
UIDebuggingInformationOverlay是继承自UIWindow的私有类,是Apple调试们自己的app的时候用的,并没有开放给开发者。然而,这个私有类最近国外一个哥们偶然发现,发现这个工具真实太强大了。下面介绍一下这个东西怎么用。

  • 当我们调出它的时候,它的debug窗口就会在整个Window之上,如下:


    2048697-7698e929bb0015af.gif
  • 那么如何调出这个工具呢,废话不多说,只需要在AppDelegate.m中的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中加入以下代码即可:
#ifdef DEBUG//因为这个是私有的api,一定要保证上线时的包中不包含这段代码!
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
  id debugClass = NSClassFromString(@"UIDebuggingInformationOverlay");//获得对象
  [debugClass performSelector:NSSelectorFromString(@"prepareDebuggingOverlay")];//开启调试模式
#pragma clang diagnostic pop
#endif
  • 运行工程,app启动之后,用2个手指点击状态栏就会调出debug窗口,再次点击就会消失。


    Apple隐藏的Debug利器UIDebuggingInformationOverlay_第1张图片
    2048697-3204a93dd92146d9.png
  • 你也可以在需要的地方手动弹出debug窗口:
#ifdef DEBUG//因为这个是私有的api,一定要保证上线时的包中不包含这段代码!
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
  id debugClass = NSClassFromString(@"UIDebuggingInformationOverlay");//获得对象
  [debugClass performSelector:NSSelectorFromString(@"prepareDebuggingOverlay")];//开启调试模式

  id debugOverlayInstance = [debugClass performSelector:NSSelectorFromString(@"overlay")];//手动弹出窗口
  [debugOverlayInstance performSelector:NSSelectorFromString(@"toggleVisibility")];
#pragma clang diagnostic pop
#endif
  • 关于这个debug窗口中各个模块的用法,我简单的总结如下,大家最好自己体验一下,cool。

    • View Hierarchy
      展示当前window下的view列表、包含关系,而且可以看到每个view的详细信息,位置、透明度、甚至view的属性值,感觉比另一软件Reveal都强大。
    • VC Hierarchy
      展示当前控制器的继承关系。而且可以看到控制器的详细信息。
    • Ivar Explorer
      展示UIApplication,以及其他对象的当前的属性值。
    • Measure
      这个是非常好用的功能,可以查看屏幕中元素之间的尺寸,选择Vertical或者Horizontal,然后用手指在你想要查看的界面上滑动,看到了吧,试试吧
    • Spec Compare
      你可以把你相册中的图片暂时的导入当前的window上,而且导入之后可以在图片上滑动手指来调整图片的透明度,想象一下,你可以把设计师的设计稿导入查看效果。
    • System Color Audit
      目前还不知道,这个有什么用(摊手)。

谢谢阅读此文,希望它能对你有用。

你可能感兴趣的:(Apple隐藏的Debug利器UIDebuggingInformationOverlay)