diff --git a/FirebaseAuth/CHANGELOG.md b/FirebaseAuth/CHANGELOG.md index c1dfc40947a..310cbd2c7ad 100644 --- a/FirebaseAuth/CHANGELOG.md +++ b/FirebaseAuth/CHANGELOG.md @@ -1,5 +1,6 @@ # Unreleased - [fixed] Add a mechanism to prevent concurrent token refreshes. (#15474) +- [fixed] Fix "weak never mutated" build warning introduced in Xcode 26.2. # 12.2.0 - [added] Added TOTP support for macOS. diff --git a/FirebaseAuth/Sources/Swift/Auth/Auth.swift b/FirebaseAuth/Sources/Swift/Auth/Auth.swift index d198f5418f5..e75a551fb9b 100644 --- a/FirebaseAuth/Sources/Swift/Auth/Auth.swift +++ b/FirebaseAuth/Sources/Swift/Auth/Auth.swift @@ -1938,30 +1938,30 @@ extension Auth: AuthInterop { "for the new token.") } autoRefreshScheduled = true - weak var weakSelf = self - authDispatcher.dispatch(afterDelay: delay, queue: kAuthGlobalWorkQueue) { - guard let strongSelf = weakSelf else { + authDispatcher.dispatch(afterDelay: delay, queue: kAuthGlobalWorkQueue) { [weak self] in + guard let self else { return } - guard strongSelf._currentUser?.rawAccessToken() == accessToken else { + guard self._currentUser?.rawAccessToken() == accessToken else { // Another auto refresh must have been scheduled, so keep _autoRefreshScheduled unchanged. return } - strongSelf.autoRefreshScheduled = false - if strongSelf.isAppInBackground { + self.autoRefreshScheduled = false + if self.isAppInBackground { return } - let uid = strongSelf._currentUser?.uid - strongSelf._currentUser? - .internalGetToken(forceRefresh: true, backend: strongSelf.backend) { token, error in - if strongSelf._currentUser?.uid != uid { + let uid = self._currentUser?.uid + self._currentUser? + .internalGetToken(forceRefresh: true, backend: self.backend) { [weak self] token, error in + guard let self else { return } + if self._currentUser?.uid != uid { return } if error != nil { // Kicks off exponential back off logic to retry failed attempt. Starts with one minute // delay (60 seconds) if this is the first failed attempt. let rescheduleDelay = retry ? min(delay * 2, 16 * 60) : 60 - strongSelf.scheduleAutoTokenRefresh(withDelay: rescheduleDelay, retry: true) + self.scheduleAutoTokenRefresh(withDelay: rescheduleDelay, retry: true) } } }