mirror of
https://github.com/bitwarden/ios.git
synced 2025-12-10 17:46:07 -06:00
63 lines
1.6 KiB
Swift
63 lines
1.6 KiB
Swift
import BitwardenKit
|
|
import BitwardenShared
|
|
import FirebaseCore
|
|
import FirebaseCrashlytics
|
|
|
|
/// An `ErrorReporter` that logs non-fatal errors to Crashlytics for investigation.
|
|
///
|
|
final class CrashlyticsErrorReporter: ErrorReporter {
|
|
// MARK: Properties
|
|
|
|
/// A list of additional loggers that errors will be logged to.
|
|
private var additionalLoggers: [any BitwardenLogger] = []
|
|
|
|
// MARK: ErrorReporter Properties
|
|
|
|
var isEnabled: Bool {
|
|
get { Crashlytics.crashlytics().isCrashlyticsCollectionEnabled() }
|
|
set {
|
|
Crashlytics.crashlytics().setCrashlyticsCollectionEnabled(newValue)
|
|
}
|
|
}
|
|
|
|
// MARK: Initialization
|
|
|
|
/// Initialize the `CrashlyticsErrorReporter`.
|
|
///
|
|
init() {
|
|
FirebaseApp.configure()
|
|
}
|
|
|
|
// MARK: ErrorReporter
|
|
|
|
public func add(logger: any BitwardenLogger) {
|
|
additionalLoggers.append(logger)
|
|
}
|
|
|
|
func log(error: Error) {
|
|
let callStack = Thread.callStackSymbols.joined(separator: "\n")
|
|
for logger in additionalLoggers {
|
|
logger.log("Error: \(error)\n\(callStack)")
|
|
}
|
|
|
|
// Don't log networking related errors to Crashlytics.
|
|
guard !error.isNetworkingError else { return }
|
|
|
|
Crashlytics.crashlytics().record(error: error)
|
|
}
|
|
|
|
func setRegion(_ region: String, isPreAuth: Bool) {
|
|
guard isEnabled else {
|
|
return
|
|
}
|
|
Crashlytics.crashlytics().setCustomValue(region, forKey: isPreAuth ? "PreAuthRegion" : "Region")
|
|
}
|
|
|
|
func setUserId(_ userId: String?) {
|
|
guard isEnabled else {
|
|
return
|
|
}
|
|
Crashlytics.crashlytics().setUserID(userId)
|
|
}
|
|
}
|