在最近浏览UIKit的私有头部时,我遇到了一个我以前没看过的类UIDebuggingInformationOverlay
。 Google搜索没有提供太多的信息,所以我想写一个简短的描述,我发现了一点有意思的东西。
UIDebuggingInformationOverlay
是由Apple创建的私有UIWindow
子类,大概是帮助开发人员和设计师调试苹果自己的iOS应用程序。
启用后,窗口会浮动在应用的内容上,如下所示:
在这篇文章中,我将向您展示如何使其显示。 我也会总结一下其功能,至少在我理解的时候。
如何显示UIDebuggingInformationOverlay
在中显示UIDebuggingInformationOverlay
需要两个步骤:
1.在程序初始化时调用,一般在AppDelegate中:
Class debugCls = NSClassFromString(@"UIDebuggingInformationOverlay");
[debugCls performSelector:NSSelectorFromString(@"prepareDebuggingOverlay")];
不知道这个方法是做什么的,但如果不调用它,Overlay
将是空的。
2.在要显示调试窗口的地方调用:
Class someClass = NSClassFromString(@"UIDebuggingInformationOverlay");
id obj = [someClass performSelector:NSSelectorFromString(@"overlay")];
[obj performSelector:NSSelectorFromString(@"toggleVisibility")];
因为类和它的方法是私有的,你需要跳过几个环来获取编译代码。 一种方法是使用全局"NSClassFromString"和"NSSelectorFromString"函数。 在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"))
但是,您选择这样做,请确保代码不会进入您的App Store构建,否则您可能会被拒绝。
更新,2017年5月26日:感谢Bryce Pauken,谁发现一旦你打了[UIDebuggingInformationOverlay prepareDebuggingOverlay]
,你可以[UIDebuggingInformationOverlay prepareDebuggingOverlay]
点击状态栏来显示控制台。 无需调用toggleVisibility
。
什么UIDebuggingInformationOverlay可以做
从上述屏幕截图可以看出,覆盖层提供了七个功能。 我会简要介绍一下前六个。 我无法获得"系统颜色审核"屏幕来显示任何内容,如果你有更好的运气,给我发消息。
"查看层次结构"屏幕
这个屏幕显示你可能会期待什么 在所选窗口中的视图列表。 从这里,您可以检查任何视图的细节,包括其框架和实例变量。 如果您有多个窗口,还可以在窗口之间切换,或者只是想知道如何构建系统窗口。
"VC层次结构"屏幕
您可以预测此屏幕的作用。 它与"查看层次结构"屏幕非常相似,只是它显示了主动视图控制器的层次结构。 从这里,您可以检查任何视图控制器的细节,包括其视图。 您还可以看到视图控制器是呈现模态还是呈现。
"Ivar Explorer"屏幕
此屏幕可让您访问UIApplication
实例的变量。 更重要的是,还可以探索任何对象变量。 这包括应用程序委托,根据应用程序的结构,可以为您的自定义对象提供一个方便的入口点。
"测量"屏幕
在我看来,这是叠加层的更酷功能之一。 它可以测量屏幕元素的尺寸(以点为单位)。首先,选择是否要在"水平"或"垂直"轴上查看测量。 然后在屏幕上拖动手指,使用控制台内的放大查看器来协助您。 有两种模式:
默认模式忽略视图边界。 据我所知,此模式将屏幕视为单个光栅化图像,并将颜色变化用作潜在测量的边界。 例如,在下面的截图中,我可以测量标签文本的末尾与屏幕边缘之间的距离:
另一方面,"查看模式"显示子视图的大小。 将手指拖动到视图上以查看所选轴的尺寸。在这个屏幕截图中,我正在测量屏幕顶部的文本框的高度:
"规格比较"屏幕
我可以看到这是开发和设计之间协作的一个非常有用的工具。 将屏幕截图添加到设备,然后从"规格比较"屏幕中选择。 所选屏幕截图将显示在实际应用程序的顶部。 然后,您可以向下拖动以减少alpha值,并将规范与实际实现进行比较。
更新,2017年5月26日: Patrick Balestra提醒我,我没有重要的一步。 您需要在Info.plist中包含NSPhotoLibraryUsageDescription
键的值。 点击"添加"按钮可以显示一个UIImagePickerController
,而不需要设置此值即可使您的应用程序崩溃。
封装
我只玩了几天玩这个东西,但希望在下一个测试版中使用它。 控制台有一些粗糙的边缘,但它似乎是许多开放源代码工具的有前途的替代品。 如果您有机会使用它并注意到我错过的任何事情,请随时联系。 我会更多的了解更多信息。
原文地址