DebugKit

CI Status GitHub tag (latest SemVer) License

DebugKit 的设计宗旨是尽可能简单地构建和显示有关项目的有用信息。它旨在取代所有单独的调试视图控制器,使你可以轻松使用特定用例中需要的功能,而无需自己编写。该框架包含一种简单的方法来构建 DebugOptionsViewController(或 SwiftUI 中的 DebugOptionsView),其中包含各种与调试相关的信息。

除了可以轻松访问基本调试信息和功能外,DebugKit 还提供记录传入项目以供以后查看的功能。开箱即用,DebugKit 能够记录 MXMetricPayload(因此具有 MetricKit 依赖项)和 UNNotification(因此具有 UserNotifications 依赖项)。有关记录自定义类型的更多信息,请参见下文或符合 Recordable 协议

要使用 DebugOptionsViewController,第一步是实例化

let viewController = DebugOptionsViewController()

这是创建新视图控制器的最简单方法,但作为初始化程序的一部分,有许多外观自定义选项可用。 视图控制器当前是单独创建的,没有 UINavigationController,因此,如果你的调试选项的内容需要导航,则必须将其嵌套在 UINavigationControllerNavigationView 中。

获得视图控制器后,剩下的唯一步骤就是用你希望看到的数据填充它 - 这可以通过对 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

使用 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"),

Carthage

将以下内容添加到你的Cartfile

github "BottleRocketStudios/iOS-DebugKit"

运行 carthage bootstrap 并按照 Carthage README 中描述的步骤进行操作。

作者

Bottle Rocket Studios

许可证

DebugKit 在 Apache 2.0 许可证下可用。 有关更多信息,请参见LICENSE 文件

贡献

请参阅CONTRIBUTING文档。 谢谢,贡献者