DebugKit 的设计宗旨是尽可能简单地构建和显示有关项目的有用信息。它旨在取代所有单独的调试视图控制器,使你可以轻松使用特定用例中需要的功能,而无需自己编写。该框架包含一种简单的方法来构建 DebugOptionsViewController
(或 SwiftUI 中的 DebugOptionsView
),其中包含各种与调试相关的信息。
除了可以轻松访问基本调试信息和功能外,DebugKit 还提供记录传入项目以供以后查看的功能。开箱即用,DebugKit 能够记录 MXMetricPayload
(因此具有 MetricKit
依赖项)和 UNNotification
(因此具有 UserNotifications
依赖项)。有关记录自定义类型的更多信息,请参见下文或符合 Recordable 协议。
要使用 DebugOptionsViewController
,第一步是实例化
let viewController = DebugOptionsViewController()
这是创建新视图控制器的最简单方法,但作为初始化程序的一部分,有许多外观自定义选项可用。 视图控制器当前是单独创建的,没有 UINavigationController
,因此,如果你的调试选项的内容需要导航,则必须将其嵌套在 UINavigationController
或 NavigationView
中。
获得视图控制器后,剩下的唯一步骤就是用你希望看到的数据填充它 - 这可以通过对 configure
的单个调用来实现。
viewController.configure(with: [.init(section: .init(title: "General"),
items: [.version(for: .main), .build(for: .main), .pushToken(with: pushService.deviceToken, title: "Push Token")]),
.init(section: .init(title: "Debug"),
items: [.crashTest()]),
.init(section: .init(title: "Logs"),
items: [.log(for: "Metrics", logService: metricsLogService), .log(for: "Notifications", logService: notificationsLogService)]))
有多种内置的 DebugOption
预设,包括显示构建/版本号以及设备 APNs 令牌。 对于自定义操作,扩展 DebugOption
非常容易。 有三种类型的 DebugOption
- action、selection 和 presentation。
例如,要实现上面的 crashTest()
项,将涉及以下内容
extension DebugOption.Item {
public static func crashTest() -> Self {
return .action(title: "Crash") { fatalError("Testing a crash!") }
}
}
除了简单的 action 和 selection 项目之外,DebugItem
还被设计为与 DebugKit
的另一项功能 - LogService
无缝协作。 该服务旨在记录任何对象的实例,将它们写入磁盘并在需要时在 DebugViewController
中显示它们。
LogService
适用于符合 Recordable
协议的任何类型(更多信息请点击此处),允许使用 SwiftUI 直观地显示此日志中的条目。 这些日志可以仅在内存中,也可以选择写入某些持久性存储。 LogService
将在初始化时接受任何符合 LogStoring
的项目,并且该框架提供了默认的 LogFileStorage
。
例如,如果你想记录 OS 在几天内传递给你的应用程序的 MXMetricPayload
,你可以使用提供的便捷方法构造一个 LogService<MXMetricPayload>
// Create the log service (with optional file storage)
let metricLogService = LogService<MXMetricPayload>.metricPayloads(storedAt: myFileURL)
// then conform to MXMetricManagerSubscriber to append to the log
func didReceive(_ payloads: [MXMetricPayload]) {
payloads.forEach(logService.append)
}
默认情况下,日志的条目将从记录开始持续 1 周,尽管这可以通过 LogService.expirationInterval
属性进行自定义。 一旦到了在 DebugOptionsViewController
(或 DebugOptionsView
)中显示此日志的时候,可以使用 DebugOption
上的另一个便捷函数来完成,它可以轻松地添加到 DebugOptionsViewController
let option = DebugOption.log<T>(for: "Title", logService: metricLogService)
要运行示例项目,请克隆此 repo 并打开 DebugKit.xcworkspace
。
需要 iOS 14.0。 依赖项包括 UIKit、SwiftUI、MetricKit、UserNotifications、CryptoKit。
使用 Swift Package Manager 将其添加到你的项目中。 在 Xcode 中:File > Swift Packages > Add Package Dependency... 就完成了。 如果你直接编辑 Package.swift
,你可以按如下方式导入软件包
.package(url: "https://github.com/BottleRocketStudios/iOS-DebugKit.git", from: "1.0.0"),
将以下内容添加到你的Cartfile
github "BottleRocketStudios/iOS-DebugKit"
运行 carthage bootstrap
并按照 Carthage README 中描述的步骤进行操作。
DebugKit 在 Apache 2.0 许可证下可用。 有关更多信息,请参见LICENSE 文件。
请参阅CONTRIBUTING文档。 谢谢,贡献者!