用于UI调试的开发人员工具
现代应用程序的用户界面是一个复杂的结构。 UI元素,布局和图形之间的复杂关系使调试过程变得很艰巨。 知道可用的工具可以减少调试时间,并使发现问题的过程变得微不足道。
在本文中,我想快速回顾一下Apple提供的UI调试工具。
View Hierarchy Debugger提供了检查和理解UI层次结构的功能。
应用程序的层次结构,视图,约束和视图控制器,显示为层次结构列表。 对象检查器和大小检查器。 甚至是交互式3D模型。 全部内置在Xcode中。 多么酷啊!
调试视图层次结构按钮位于调试栏中。 Xcode将您的应用暂停在当前状态。
View调试可用于iOS,tvOS和macOS,模拟器和设备。
如果您更喜欢控制台而不是视觉工具,那么您会很高兴知道UIKit包含了不错的日志记录API。 小问题-该API是私有的。 但是我们无论如何都不会在发行版中使用调试功能。
-[UIView recursiveDescription]
—以方便的形式打印UIView层次结构:
(lldb)po [view recursiveDescription] <UIView:0x7faa328013c0; 框架=(0 0; 414736); 自动调整大小= W + H; 层= >
<UILabel:0x7faa328045d0; 框架=(175198; 95 21); 文字=“您好,世界!”; 不透明=不; 自动调整大小= RM + BM; userInteractionEnabled =否; 层= >
<UIButton:0x7faa2f408000; 框架=(152 325; 50 30); 不透明=不; 自动调整大小= RM + BM; 层= >
每个UIView节点都包括布局和图形信息,CALayer以及其他特定字段。
-[UIViewController _printHierarchy]
UIViewController的类似方法 包括演示信息:
(lldb)po [viewController _printHierarchy] ,状态:消失,视图:不在窗口中
,状态:消失,视图:不在窗口中
,状态:消失,视图:不在窗口中
+ ,状态:出现,视图:,显示为:
,状态:出现,视图:
-
符号表示子视图控制器; - +代表模态演示。
_printHierarchy方法在UIWindow的rootViewController上调用时特别有用:
(lldb)po [[[[UIWindow keyWindow] rootViewController] _printHierarchy]
值得一提的是-在Swift中,控制台的行为视情况而定:
- 当程序从调试栏暂停执行时,我们可以使用Objective-C语法进行消息传递,例如po [view recursiveDescription]将起作用( 前提是您有权访问view变量或知道地址 )
- 当lldb在断点处停止时,必须使用Swift语法: po view.recursiveDescription()
当然,如果不公开公开私有API,您将无法在Swift中使用它们:
核心动画模板可衡量应用程序的图形性能。 在此示例中,我们仅关注渲染性能。 我的应用程序是带有自定义单元格的UITableView。 目前,它仅显示节和行。
我注意到滚动性能不是那么平稳。 使用Instruments对应用程序进行性能分析表明,我的性能远不及60 FPS。 当我滚动(第4-23秒)时,性能下降到44 FPS-比目标低16 FPS,降低了27%。
我怀疑问题出在我的单元格渲染上。 启用“ 颜色混合层”调试选项后,我可以更好地了解正在发生的事情。
彩色混合图层显示启用了混合的视图图层,这些视图图层相互绘制。
要了解为什么这是一个问题,我们需要知道如何创建最终图像。 用户看到的最终像素是在坐标处混合顶部像素和基础像素的组合。 这意味着必须渲染每个视图层才能创建最终图像。 当视图层不透明时,可以通过不绘制基础层来优化混合。
要创建圆角和阴影,我使用CALayer属性:
让cardView = UIView()
cardView.layer.cornerRadius = 10.0
cardView.layer.shadowColor = UIColor.black.cgColor
cardView.layer.shadowOpacity = 0.5
cardView.layer.shadowOffset = CGSize(宽度:0.0,高度:2.0)
cardView.layer.shadowRadius = 4.0
这使我的视图层的各个部分透明,从而导致不必要的混合。 由于背景是彩色填充,因此可以优化渲染。 我将在我的视图上设置纯色背景,并使用不带Alpha的背景图片:
让cardView = UIImageView(image:UIImage(named:“ cardBackground”))
一个简单的技巧使我摆脱了混合:
现在的性能为58–59 FPS,滚动感觉很流畅。
最好的部分是,您可以从iOS模拟器快速访问颜色混合图层 。
UIKit特别是对辅助功能提供了令人印象深刻的支持。 当事情无法正常工作时,Xcode提供了Accessibility Inspector 。
除了调试之外,该工具还可以对您的应用执行审核并突出显示各种问题,例如动态类型支持。
Accessibility Inspector隐藏在Xcode> Open Developer Tool> Accessibility Inspector中。
Pixie将帮助您实现像素完美的设计。 这个小工具可让您从字面上检查应用程序的每个像素:
可以从Apple Developer网站(Xcode>打开开发者工具>更多开发者工具…)的Xcode附加工具包中下载Pixie 。
感谢您的阅读。 如果您喜欢这篇文章,请关注我并分享。
阅读我最新的文章“ Swift中的并发性:读者作家锁”。
向作者显示更多❤️与👏’s
希望下次见you