InAppViewDebugger
InAppViewDebugger
是一个实现了带有 3D 快照视图和层次结构视图的视图调试器库,类似于 Reveal 和 Xcode 内置的视图调试器。其主要区别是,正如项目标题所暗示的,它可以嵌入到应用中,用于在设备上调试 UI 问题,而无需连接到计算机。
特性
- 在 SceneKit 中实现的 3D 快照视图:缩放、平移和旋转的手势控制。
- 与 3D 视图同步其选择的层次结构(树)视图:这是我一直希望 Xcode 有的一项功能,能够能够通过视觉找到一个视图,并看到它在层次结构视图中的位置。
- 支持 iPad 和 iPhone:布局是专门针对每种形态设计的。
- 可扩展性:基本实现支持
UIView
层次结构,但可以轻松扩展以支持任何类型的 UI 框架(例如 CoreAnimation 或 SpriteKit)
要求
- iOS 11.0+
- Xcode 10.1+(为 Swift 4.2 构建的框架)
安装
CocoaPods
将以下行添加到您的 Podfile
pod 'InAppViewDebugger', '~> 1.0.3'
Carthage
将以下行添加到您的 Cartfile
github "indragiek/InAppViewDebugger" "1.0.3"
使用
Swift
import InAppViewDebugger
@IBAction func showViewDebugger(sender: AnyObject) {
InAppViewDebugger.present()
}
Objective-C
@import InAppViewDebugger;
// alternative import (they're the same):
// #import <InAppViewDebugger/InAppViewDebugger-Swift.h>
- (IBAction)showViewDebugger:(id)sender {
[InAppViewDebugger present];
}
lldb
(lldb) expr -lswift -- import InAppViewDebugger
(lldb) expr -lswift -- InAppViewDebugger.present()
present
函数显示您应用程序关键窗口的 UI 层次结构,在窗口根视图控制器的顶级视图控制器上显示。在 InAppViewDebugger
上还有其他几个方法可用于为特定窗口、视图或视图控制器显示视图调试器。
控件
聚焦元素
要聚焦特定元素的子层次,请 长按该元素 弹出操作菜单并点击“聚焦”。长按可以在层次结构视图和3D快照视图中使用。“日志描述”操作会将元素的描述记录到控制台,如果您连接到了Xcode,可以复制对象的地址以进行进一步调试。
调整层级之间的距离
在快照视图的左下角有一个滑块,可以用来调整层次结构中层级的间距。
调整可见层级
在快照视图的右下角有一个范围滑块,可以用来调整层次结构中可见的层级范围。
显示/隐藏标题
每个UI元素都有一个头部,显示其类名。这些标题可以通过 在快照视图的空白区域长按 弹出操作菜单来隐藏或显示。
显示/隐藏边界
与标题相同,每个元素周围绘制的边框也可以显示或隐藏
定制
可以通过创建自定义的Configuration
来更改快照视图和层次结构视图的颜色、字体和其他属性。然后将配置传递给类似于InAppViewDebugger.presentForWindow(:configuration:completion:)
的函数。
扩展至其他UI框架
当前实现只支持UIView
层次结构,但可以通过使任意对象遵从Element
协议将其扩展到支持其他UI框架。查看ViewElement
的示例实现——通过提供框架的框架、快照图像和其他一些信息,您可以为您提供自己的框架的上述所有功能。
一个Snapshot
实例表示UI元素层次结构的递归快照,它使用Element
来构建。然后可以将快照传递到
InAppViewDebugger.presentWithSnapshot(:rootViewController:configuration:completion:)
显示视图调试器。
致谢
- Kyle Van Essen,他的这条推文展示了Square的实现的快照,这激发了我构建这个手势
- AudioKit SynthOne,这是一个令人印象深刻的开源iPad音频合成器应用程序,如上图所示,是一个非常棒的演示
联系方式
- Indragie Karunaratne
- @indragie
- http://indragie.com
许可
InAppViewDebugger
采用 MIT 许可证。更多信息请参阅 LICENSE
文件。