CrashReporter 对 macOS 应用程序
您的应用程序总有一天会崩溃。准备好自动收集崩溃数据,因为并非每个用户都是能够从内置控制台应用程序发送 .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。版权所有。