Fix a crash experienced when trying to report a crash. (#3086)

This commit is contained in:
Doug
2024-07-25 15:56:45 +01:00
committed by GitHub
parent c10ed6169c
commit 8ff53da4d2
2 changed files with 14 additions and 9 deletions
@@ -112,10 +112,10 @@ class AppCoordinator: AppCoordinatorProtocol, AuthenticationFlowCoordinatorDeleg
notificationManager = NotificationManager(notificationCenter: UNUserNotificationCenter.current(), notificationManager = NotificationManager(notificationCenter: UNUserNotificationCenter.current(),
appSettings: appSettings) appSettings: appSettings)
Self.setupServiceLocator(appSettings: appSettings, appHooks: appHooks)
Self.setupSentry(appSettings: appSettings) Self.setupSentry(appSettings: appSettings)
Self.setupServiceLocator(appSettings: appSettings, appHooks: appHooks) ServiceLocator.shared.analytics.signpost.start()
ServiceLocator.shared.analytics.startIfEnabled() ServiceLocator.shared.analytics.startIfEnabled()
windowManager.delegate = self windowManager.delegate = self
@@ -40,9 +40,14 @@ class Signposter {
static let subsystem = "ElementX" static let subsystem = "ElementX"
static let category = "PerformanceTests" static let category = "PerformanceTests"
private var appStartupTransaction: Span // MARK: - App Startup
init() { private var appStartupTransaction: Span?
// We have a manual start method because we need to configure the ServiceLocator *before* we configure
// Sentry but this class is created in the AnalyticsService and so spans and transactions are dropped
// until Sentry has been configured. Therefore doing this in the init doesn't work.
func start() {
appStartupTransaction = SentrySDK.startTransaction(name: Name.appStartup, operation: Name.appStarted) appStartupTransaction = SentrySDK.startTransaction(name: Name.appStartup, operation: Name.appStarted)
} }
@@ -55,7 +60,7 @@ class Signposter {
func beginLogin() { func beginLogin() {
loginState = signposter.beginInterval(Name.login) loginState = signposter.beginInterval(Name.login)
loginTransaction = SentrySDK.startTransaction(name: "\(Name.login)", operation: "\(Name.login)") loginTransaction = SentrySDK.startTransaction(name: "\(Name.login)", operation: "\(Name.login)")
loginSpan = appStartupTransaction.startChild(operation: "\(Name.login)", description: "\(Name.login)") loginSpan = appStartupTransaction?.startChild(operation: "\(Name.login)", description: "\(Name.login)")
} }
func endLogin() { func endLogin() {
@@ -80,14 +85,14 @@ class Signposter {
private var firstSyncSpan: Span? private var firstSyncSpan: Span?
func beginFirstSync(serverName: String) { func beginFirstSync(serverName: String) {
appStartupTransaction.setTag(value: serverName, key: Name.homeserver) appStartupTransaction?.setTag(value: serverName, key: Name.homeserver)
firstSyncState = signposter.beginInterval(Name.firstSync) firstSyncState = signposter.beginInterval(Name.firstSync)
firstSyncTransaction = SentrySDK.startTransaction(name: "\(Name.firstSync)", operation: "\(Name.firstSync)") firstSyncTransaction = SentrySDK.startTransaction(name: "\(Name.firstSync)", operation: "\(Name.firstSync)")
firstSyncTransaction?.setTag(value: serverName, key: Name.homeserver) firstSyncTransaction?.setTag(value: serverName, key: Name.homeserver)
firstSyncSpan = appStartupTransaction.startChild(operation: "\(Name.firstSync)", description: "\(Name.firstSync)") firstSyncSpan = appStartupTransaction?.startChild(operation: "\(Name.firstSync)", description: "\(Name.firstSync)")
} }
func endFirstSync() { func endFirstSync() {
@@ -111,12 +116,12 @@ class Signposter {
func beginFirstRooms() { func beginFirstRooms() {
firstRoomsState = signposter.beginInterval(Name.firstRooms) firstRoomsState = signposter.beginInterval(Name.firstRooms)
firstRoomsTransaction = SentrySDK.startTransaction(name: "\(Name.firstRooms)", operation: "\(Name.firstRooms)") firstRoomsTransaction = SentrySDK.startTransaction(name: "\(Name.firstRooms)", operation: "\(Name.firstRooms)")
firstRoomsSpan = appStartupTransaction.startChild(operation: "\(Name.firstRooms)", description: "\(Name.firstRooms)") firstRoomsSpan = appStartupTransaction?.startChild(operation: "\(Name.firstRooms)", description: "\(Name.firstRooms)")
} }
func endFirstRooms() { func endFirstRooms() {
defer { defer {
appStartupTransaction.finish() appStartupTransaction?.finish()
} }
guard let firstRoomsState else { return } guard let firstRoomsState else { return }