CrashReporterMac 0.4.2

CrashReporterMac 0.4.2

Christian Tietze 维护。




CrashReporter 对 macOS 应用程序

CI Status Swift 5.0 Version License Platform Carthage compatible

您的应用程序总有一天会崩溃。准备好自动收集崩溃数据,因为并非每个用户都是能够从内置控制台应用程序发送 .crash 文件的技术大牛。

要求

  • macOS 10.12+
  • Xcode 10.2+
  • Swift 5+

对于可选的服务器端点脚本,您需要 PHP 7.x。

安装

Carthage

github "CleanCocoa/CrashReporter"

CocoaPods

pod 'CrashReporterMac'

SwiftPM

.package(url: "https://github.com/CleanCocoa/CrashReporter", from: "0.2.0")

手册

如果您想自定义UI,请查看源代码,并从CrashReporter/复制所有代码到您的项目中。

使用方法

服务器端点

您需要一个服务器端点来接收崩溃报告。

框架不关心服务器做了什么

  • 您可以从您的服务器上通过电子邮件发送传入的崩溃报告,或者
  • 将崩溃报告存储为带时间戳的磁盘文件以供以后参考,或者
  • 将崩溃报告存储在数据库中。

崩溃报告框架将执行一个HTTP POST请求

  • 如果希望在app的bundle中找到值,则将User-Agent元数据设置为"\(APP_NAME)-\(VERSION)",例如"Sherlock-2.0"
  • userEmail变量将被省略或设置为用户输入的电子邮件。
  • crashlog变量设置为用户提交的.crash文件的內容。
  • 将忽略服务器响应。

只要其URL从app可访问,您就可以自己创建端点。

或者,您可以使用此存储库中提供的简单端点!它位于php/index.php。这个PHP服务器脚本能尝试将崩溃日志作为附件通过电子邮件发送给您,带有时间戳,例如20190701204853 Sherlock-2.0.crash(其中时间戳表示ISO格式的日期2019-07-01 20:48:52)。如果用户输入了她的电子邮件地址,她将默认作为抄送人接收一份副本。您可以在PHP脚本的frontmatter中切换此设置。

要本地运行脚本以进行快速测试,请运行

$ php -S 127.0.0.1:3333 php/index.php

然后在Swift代码中使用URL(string: "http://127.0.0.1:3333/")作为端点。

应用设置

请参阅 Example/ 目录下的代码,这是 Xcode 项目的部分。

您可以直接在您的应用中使用该框架来检查崩溃报告

import CrashReporter

let crashReporterURL = URL(string: "http://127.0.0.1:3333/")!
let crashReporter = CrashReporter(
    crashReporterURL: crashReporterURL,
    privacyPolicyURL: URL(string: "https://example.com/privacy-policy")!)

// Run the check in the background and display 
// a crash reporter window if needed
crashReporter.check()

应用中的偏好设置面板

如果您允许用户在崩溃报告窗口中勾选“自动发送崩溃报告”,则应在您的应用偏好面板中添加相应的选项,以便启用或禁用此设置。

请参考 DefaultsKeys.sendCrashLogsAutomaticallyKey

如果您想使用 Cocoa Bindings 配置偏好面板或主菜单中的“自动发送崩溃报告”复选框,则可以在您的类中创建一个简单的 KVC 兼容包装器

// Assuming this is loaded from a Nib where you set an object of this type as the
// target for "Value" Cocoa Bindings.
class PreferenceController: NSViewController {
    let crashReporter: CrashReporter = // ... setup before ...
    
    // Cocoa bindings path is `self.sendCrashReportsAutomatically`
    @objc public dynamic var sendCrashReportsAutomatically: Bool {
        get {
            return crashReporter.sendCrashReportsAutomatically
        }
        set {
            crashReporter.sendCrashReportsAutomatically = newValue
        }
    }
}

API

  • CrashReporter.check() 是默认调用,根据需要显示当前应用的崩溃报告窗口,并将崩溃报告上传到服务器。
  • CrashReporter.check(appName:collectEmailAddress:alwaysShowCrashReporterWindow:) 允许您控制搜索 .crash 文件的报告应用的名称。如果不想收集用户的电子邮件地址,则将 collectEmailAddress 设置为 false。如果想始终显示崩溃报告窗口而不是让用户选择何时显示,则将 alwaysShowCrashReporterWindow 设置为 true
  • CrashReporter.sendCrashReportsAutomatically 提供了用户自动发送报告的设置。在偏好面板中非常有用。

如果您更改崩溃报告设置的 UserDefaults 键,请在您的应用中使用各个 DefaultsKeys.standard 属性来查找值

  • emailAddressKey"CRR_emailAddress",其中存储了用户的电子邮件地址。
  • sendCrashLogsAutomaticallyKey"CRR_sendCrashLogsAutomatically",您可以通过该设置在偏好面板中切换自动发送崩溃报告。
  • lastSeenCrashLogTimeSince1970Key"CRR_lastSeenCrashLogTimeSince1970"
  • lastSeenCrashLogMD5Key"CRR_lastSeenCrashLogMD5"

许可证

整个项目遵循MIT许可证发布。有关详细信息,请参阅LICENSE文件

项目概述

  • Swift代码改编自Brent Simmons的NetNewsWire 5,版权所有 © Brent Simmons 2017-2019。版权所有。
  • 本仓库中的变更版权所有 © Christian Tietze 2019。版权所有。
  • PHP服务器代码版权所有 © Christian Tietze 2019。版权所有。