【译】UIDebuggingInformationOverlay

UIDebuggingInformationOverlay是一个私有的UIWindow子类,用来帮助开发者调试Apple自己的app。本文主要做翻译,介绍了如何调用以及各项的用途,希望可以对大家有搜帮助。下文所有的我指的是原作者。原文地址

最近我浏览UIKit框架的一些私有header的时候,发现了一个以前没有注意到的类 —— UIDebuggingInformationOverlay。Goo404le搜索并没有提供给我一些有用的信息,所以我尝试来简单的描述一下我发现的内容。

UIDebuggingInformationOverlayUIWindow的一个子类,但是是私有的。Apple写这个类的目的很可能是为了帮助开发者和设计者来调试Apple自己的iOS app。

当这个类在你的项目调用的时候,这个窗口浮动在你自己app的内容之上,如下图


这篇文章我会向你展示如何去调用它,并对我自己理解的内容做一个简单的总结。

如何展示UIDebuggingInformationOverlay

要展示UIDebuggingInformationOverlay需要如下两个步骤:

  1. 调用[UIDebuggingInformationOverlay prepareDebuggingOverlay] - 事实上我也不是很确定这个方法究竟做了什么,但是如果不调用的话覆盖的内容会是一片空白。
  2. 调用[[UIDebuggingInformationOverlay overlay] toggleVisibility] - 这个方法会将覆盖的window展示出来(假设它并不是已经很明显)

因为这个类以及方法都是私有的,所以你无法直接去调用它,你可能需要多做一点操作才能让代码运行起来。一种方法是使用全局函数NSClassFromStringNSSelectorFromString

Swift版本

let overlayClass = NSClassFromString("UIDebuggingInformationOverlay") as? UIWindow.Type
_ = overlayClass?.perform(NSSelectorFromString("prepareDebuggingOverlay"))
let overlay = overlayClass?.perform(NSSelectorFromString("overlay")).takeUnretainedValue() as? UIWindow
_ = overlay?.perform(NSSelectorFromString("toggleVisibility"))

Object-C版本

UIWindow *debugWindow = (UIWindow *)NSClassFromString(@"UIDebuggingInformationOverlay");
    [debugWindow performSelector:NSSelectorFromString(@"prepareDebuggingOverlay") withObject:nil];
    
    [[debugWindow performSelector:NSSelectorFromString(@"overlay") withObject:nil] performSelector:NSSelectorFromString(@"toggleVisibility") withObject:nil];

译者注:代码添加在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions即可。

需要注意的是,构建你的app向Apple Store提交的时候记得移除。否则你的app很大可能是会被拒的。

2017.5.26 更新 感谢Bryce Pauken,这个哥们发现了你只需要调用一次[UIDebuggingInformationOverlay prepareDebuggingOverlay]即可,用两个手指点击状态栏就可以呼出这个控制台。toggleVisibility不再需要调用了。

** UIDebuggingInformationOverlay能做什么**

如同你在上面截图中所见的,这个窗口提供了七个可用的特性。我会简单介绍一下前六个,但是最后一个特性System Color Audit并没有想我展示任何东西所以我无法说明。如果你发现了什么欢迎发消息告诉我。

View Hierarchy


这个选项可以向你展示当前选择的Window的视图列表。通过这个你可以轻松的查阅视图的详细信息,包括视图的frame和成员变量。如果你的app包含了多个Window你可以自行去选择要查看的Window,或者对系统的Window有所好奇的话,你也可以通过这个来进行查看。


VC Hierarchy


这个特性让你可以很轻松的查看活跃的VC的层次。通过这个你可以很轻松的查看各个VC的详情,包括它的试图。你也可以查看这个视图究竟是展示的情景还是它自己本身。

Ivar Explorer


这个特性提供了查看UIApplication对象的成员变量的途径。更重要的一点是,其中任一一个对象的变量都是可以被查看的。如果你的app结构允许的话,这其中包含的app delegate也许提供一个很好的切入点,允许你进入自定义的对象里。

Measure


这是一个比较酷的特性,它允许你以点这个级别的精度去测量屏幕内各个元素的尺寸。首先,选择你想查看水平Horizontal还是竖直* Vertical*的轴线,然后在屏幕上拖动你的手指,使用控制台里的放大镜来配合你精确的选择。这里有两种模式:
默认的模式是忽略视图的边界。我认为这个模式是将屏幕当做一个栅格化的图片,然后使用颜色的变化来当做边界从而测量尺寸。比如说在下面的这个截图里,我可以测量label中文字的边界和屏幕边界的距离。


View Mode则是另外一种处理方式。它清晰的展示了每一个子视图的尺寸。拖动你的手指到要查看的视图上,可以查看它在你选择的轴线上的范围。在下面的屏幕截图里,我测量了顶部输入框的高度。

Spec Compare


我认为这个工具对于设计师和开发者之间的合作,提供了极其大的便利。添加一个屏幕截图到你的设备里然后通过Spec Compare选择它,被选择的这张屏幕截图会展示在当前app的顶部。你可以在屏幕上拖动来调整透明度,以此来对比设计和你app中的实现具体的不同。

2017.5.26更新:Patrick Balestra提醒了我,漏了很重要的一步那就是你需要在你的info.plist中添加[NSPhotoLibraryUsageDescription](https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW17),点击Add按钮将会跳转到UIImagePickerController。如果缺少这一步的操作你的app会发生crash。

Wrap-up


这个东西我研究了一段时间并且希望将它应用到我们的下一个beta版本。这个控制台确实比较的粗糙,但是它确实值得被多多研究,来实现一些开源的工具。如果你有机会使用它并且发现了一些我没有注意到的事情,希望你能告诉我,我会将它更新出来。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,900评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,068评论 4 62
  • 4月30日下午四点多,我在电话这头跟我母亲说:“妈,五一学校放假了,我等会就回家。” 母亲高兴地说:“好啊,妈等会...
    端银阅读 645评论 0 0
  • 1、小区的故事 最近,某小区的业主沟通群内又开始热闹起来,因为又到了一年一度物业续签订合同的时候。近十年来,该小区...
    南昌阿波罗阅读 530评论 0 5