Platforms Matrix

MeterReporter

基于 MetricKit 的轻量级诊断报告。

MeterReporter 将捕获 MetricKit 有效载荷并将其转发到后端。它使用 Meter 来处理和符号化有效载荷。生成的数据非常接近 MetricKit JSON 结构。但是,它确实添加了一些字段来支持其他功能。

集成

dependencies: [
    .package(url: "https://github.com/ChimeHQ/MeterReporter")
]

用法

let url = URL(string: "https://my.backend.com/reports")!

var config = MeterReporter.Configuration(endpointURL: url)

config.hostIdentifier = Bundle.main.bundleIdentifier

let reporter = MeterReporter(configuration: config)

reporter.start()

后台上传

默认情况下,MeterReporter 使用 URLSession 后台上传,以获得可靠性和性能。但是,有时操作系统实际上需要花费数小时才能执行这些操作。 如果您只是在测试东西,这可能会很痛苦。为了更容易,您可以使用 MeterReporter.Configuration 的另一个属性禁用后台上传。

NSException 捕获

MeterReporter 可以在 macOS 上捕获未捕获的 NSException。 不幸的是,AppKit 会干扰运行时异常的流程。 如果您想获得有关未捕获异常的此信息,则需要进行一些额外的工作。

您的应用程序的顶级 NSApplication 实例必须是 ExceptionLoggingApplication 的子类。

import MeterReporter

class Application: ExceptionLoggingApplication {
}

并且,您必须更新您的 Info.plist 以确保 NSPrincipalClass 键使用 <App Module Name>.Application 引用此类。

我知道这很痛苦。如果您觉得有动力,请向 Apple 提交反馈,要求他们使 AppKit 在这方面表现得像 UIKit 一样。

我还强烈建议将 NSApplicationCrashOnExceptions 默认键设置为 true。 默认设置将允许您的应用程序在异常后继续执行,几乎可以保证状态损坏和不正确的行为。

提交请求

向端点发出的请求将是 HTTP PUT。 该请求还将设置一些标头。

数据本身是 Meter 的 DiagnosticPayload.jsonRepresentation() 的结果。

建议或反馈

我很乐意收到您的来信! 问题或拉取请求效果很好。 Matrix space 也可用于实时帮助,但是我强烈倾向于以文档形式回答。

我喜欢协作,如果您有类似的项目,我很乐意找到合作方式。

我更喜欢使用制表符进行缩进,以提高可访问性。 但是,我宁愿您使用想要的系统并进行 PR,而不要因为空格而犹豫。

通过参与此项目,您同意遵守贡献者行为准则