Fix libdispatch main-thread trap when logging Sentry crash events

Sentry's beforeSend runs on a background queue, but Event.crashLog read
UIDevice.current there, which carries a main-thread dispatch assertion and
trapped libdispatch. Read the device values on the main thread at setup and
pass them into the now-nonisolated crashLog.
This commit is contained in:
Stefan Ceriu
2026-06-22 08:29:33 +03:00
parent 30e4e6339d
commit 10017714e5
2 changed files with 10 additions and 6 deletions
@@ -1020,8 +1020,11 @@ class AppCoordinator: AppCoordinatorProtocol, AuthenticationFlowCoordinatorDeleg
}
// Mirror every crash into our own logs (which ship with rageshakes) before it's sent to Sentry.
options.beforeSend = { event in
if let crashLog = event.crashLog {
// Device values are read here on the main thread; beforeSend runs on a background queue.
let deviceModel = UIDevice.current.model
let systemVersion = UIDevice.current.systemVersion
options.beforeSend = { @Sendable event in
if let crashLog = event.crashLog(deviceModel: deviceModel, systemVersion: systemVersion) {
MXLog.error("Sentry crash event \(event.eventId.sentryIdString):\n\(crashLog)")
}
return event