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窗口,再次点击就会消失。


    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
      目前还不知道,这个有什么用(摊手)。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1,警告:“xoxoxoxo” is deprecated解决办法:查看xoxoxoxo的这个方法的文档,替换掉这...
    layjoy阅读 4,450评论 0 3
  • 接《iOS知识点大总结一》 三十四、主线程操作UI(对UI进行更新只能在主线程进行) 解释:所谓的在主线程更新UI...
    RunningMan_Fly阅读 1,474评论 0 0
  • 禅与 Objective-C 编程艺术 (Zen and the Art of the Objective-C C...
    GrayLand阅读 1,656评论 1 10
  • 那一年,我们在二中。 说着老何如何如何欺压我们这帮小崽子; 那一年,我们在二中。 总喜欢听着老黄如何如何酒后吐真言...
    九十九度女子Eleven阅读 317评论 0 0
  • 第一次用简书记录,就当是培养阅读习惯的一个好工具。 “今天市场上成功的公司都是做到了四点,在优秀的成功的团队基础之...
    yangpaopao963阅读 143评论 0 0