From ff69898a0c0e84b6d7d39ea083459573a5e23ac3 Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Fri, 4 Jul 2025 13:13:35 -0400 Subject: [PATCH 1/2] [Auth] Reduce callback nesting --- FirebaseAuth/Sources/Swift/Auth/Auth.swift | 11 ++++++----- FirebaseAuth/Sources/Swift/User/User.swift | 15 ++++++++++++--- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/FirebaseAuth/Sources/Swift/Auth/Auth.swift b/FirebaseAuth/Sources/Swift/Auth/Auth.swift index 3cfb87f41cc..d198f5418f5 100644 --- a/FirebaseAuth/Sources/Swift/Auth/Auth.swift +++ b/FirebaseAuth/Sources/Swift/Auth/Auth.swift @@ -124,11 +124,12 @@ extension Auth: AuthInterop { } // Call back with current user token. currentUser - .internalGetToken(forceRefresh: forceRefresh, backend: strongSelf.backend) { token, error in - DispatchQueue.main.async { - callback(token, error) - } - } + .internalGetToken( + forceRefresh: forceRefresh, + backend: strongSelf.backend, + callback: callback, + callCallbackOnMain: true + ) } } diff --git a/FirebaseAuth/Sources/Swift/User/User.swift b/FirebaseAuth/Sources/Swift/User/User.swift index 857dc5060a2..4ef324e177c 100644 --- a/FirebaseAuth/Sources/Swift/User/User.swift +++ b/FirebaseAuth/Sources/Swift/User/User.swift @@ -1591,13 +1591,22 @@ extension User: NSSecureCoding {} /// on the global work thread in the future. func internalGetToken(forceRefresh: Bool = false, backend: AuthBackend, - callback: @escaping (String?, Error?) -> Void) { + callback: @escaping (String?, Error?) -> Void, + callCallbackOnMain: Bool = false) { Task { do { let token = try await internalGetTokenAsync(forceRefresh: forceRefresh, backend: backend) - callback(token, nil) + if callCallbackOnMain { + Auth.wrapMainAsync(callback: callback, with: .success(token)) + } else { + callback(token, nil) + } } catch { - callback(nil, error) + if callCallbackOnMain { + Auth.wrapMainAsync(callback: callback, with: .failure(error)) + } else { + callback(nil, error) + } } } } From 4d2dd551f4ec51315e5478c849d059a8ed9079eb Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Fri, 4 Jul 2025 13:17:11 -0400 Subject: [PATCH 2/2] changelog --- FirebaseAuth/CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/FirebaseAuth/CHANGELOG.md b/FirebaseAuth/CHANGELOG.md index e46496d4db0..71ae4b00f94 100644 --- a/FirebaseAuth/CHANGELOG.md +++ b/FirebaseAuth/CHANGELOG.md @@ -10,6 +10,8 @@ - [changed] **Breaking Change**: `TOTPSecret.openInOTPApp(withQRCodeURL:)` is now labeled with `@MainActor` and requires the `await` keyword when called off of the main actor or main thread. +- [fixed] Simplified completion handler memory management in Auth interop + (#14962). # 11.15.0 - [fixed] Fixed `Sendable` warnings introduced in the Xcode 26 beta. (#14996)