zashi-ios-wallet-private/secant/Dependencies/CrashReporter/CrashReporterLiveKey.swift

42 lines
1.4 KiB
Swift
Raw Normal View History

Add crash reporter to secant (#531) * [#525] Adds functions to configure, testCrash and check if it can start. This adds a build phase where a dummy file is added to the project to make the build and Plist copy happy. When building in the CI there will be a script to replace this Plist file with the real one that then will be copied to the bundle Crashlytics will be "off" by default and then be turned on when starting up to be an Opt-Out thing. This is the only way it can be turned off later. reference: https://firebase.google.com/docs/crashlytics/customize-crash-reports?platform=ios#enable_opt-in_reporting The app will start with crash reporting turned off and will set it up on by default on the application's code. Then if the user wants to opt-out of crash reporting, it can. Otherwise, it won't be possible. Adds opting out of crash reporting as a stored user preference. This adds a value inside UserPreferencesStorage and its live and mock counterparts. also creates a builer for `CrashReporterClient` that has a Dependency to `@Dependency(\.userStoredPreferences)` and sets the references for the client to set the appropriate values into the user storage `UserPreferencesStorage` as been adapted to be a TCA Dependency. `SettingsStore` now as a `Toogle()` to turn off and on crash reporting. But it doesn't work yet because I haven't found out how to make a TCA Binding that can rely on an initial value that is not hardcoded but injected from somewhere else. See https://www.pointfree.co/episodes/ep158-safer-conciser-forms-part-1 https://www.pointfree.co/episodes/ep158-safer-conciser-forms-part-2 Adds Test Crash button and enable crash reporting Adds upload-symbols run script phase Closes #525 Add a custom build environment variable "UPLOAD_CRASHLYTICS_SYMBOLS" that will let Xcode skip the upload_symbols script for debug builds Fix Initialization tests * bump build
2023-02-15 13:18:18 -08:00
//
// CrashReporterLiveKey.swift
// secant-testnet
//
// Created by Francisco Gindre on 2/2/23.
//
import ComposableArchitecture
import FirebaseCore
import FirebaseCrashlytics
extension CrashReporterClient: DependencyKey {
static let liveValue: CrashReporterClient = CrashReporterClient(
configure: { canConfigure in
let fileName = "GoogleService-Info.plist"
// checks whether the crash reporter's config file is a dummy_file purposedly placed by the build job or the real one.
// this does not check the integrity of the Plist file for Firebase.
// that's a problem for the library itself.
guard
let configFile = Bundle.main.url(forResource: fileName, withExtension: nil),
let properties = NSDictionary(contentsOf: configFile),
properties["IS_DUMMY_FILE"] == nil,
canConfigure
else {
return
}
FirebaseApp.configure()
Crashlytics.crashlytics().setCrashlyticsCollectionEnabled(true)
},
testCrash: {
fatalError("Crash was triggered to test the crash reporter")
},
optIn: {
Crashlytics.crashlytics().setCrashlyticsCollectionEnabled(true)
},
optOut: {
Crashlytics.crashlytics().setCrashlyticsCollectionEnabled(false)
}
)
}