Skip to content

Commit 275fd2f

Browse files
Port forcedotcom#4094: typed SFOAuthErrorCode enum (upstream 6993d6b, unit 38/49)
Replace brittle OAuth error string comparisons with a typed enum. NEW SFOAuthErrorCode.swift (45 server error values + .unknown, from(_:) parser, wireValue mapping, + SFOAuthErrorCodeHelper ObjC bridge) added verbatim and wired into the SDKCore target. SFSDKOAuthTokenEndpointErrorResponse (Swift twin) gains an errorCode property set via SFOAuthErrorCode.from(errorType); SFOAuthCoordinator's Lightning-URL diagnostic now branches on errorCode == .unsupportedGrantType. Legacy kSFOAuthErrorType* constants marked __deprecated_msg (retained). De-ref .m/.h ref-synced (SFSDKOAuthConstants.h verbatim; SFOAuthCoordinator.m + SFSDKOAuth2.m hunks surgical). SFSDKOAuth2.h is a migration tombstone (property lives in the Swift twin). Tests: new SFOAuthErrorCodeTests.swift (8) + SFOAuthCoordinatorLightningURLTests +4 hunk. SDKCore builds green (0 new warnings); 13 tests pass. Escalation: OAuth error-handling surface -> PR-flag. Advances upstream-sync marker ab84f31 -> 6993d6b.
1 parent bfe7361 commit 275fd2f

12 files changed

Lines changed: 303 additions & 50 deletions

File tree

.claude/pr-escalation-digest.md

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,8 +174,21 @@ Pre-approved gates (still PR-flag, do NOT re-ask): SQLCipher #4096; Localizable.
174174
live-org dependency. SDKCore builds green (0 new warnings); 22 tests pass (2 new RTR refresher tests + 1 new
175175
per-user RTR marker test). Escalation = feature-flag + OAuth token-refresh path — flag in PR.
176176

177+
- **Unit 38 · #4094 · `6993d6ba8` — OAuth error handling.** Introduces a typed `SFOAuthErrorCode` enum
178+
(45 server error values + `.unknown`, with `from(_:)` parser and `wireValue` mapping) to replace fragile
179+
string comparisons against the OAuth token-endpoint `error` field. `SFSDKOAuthTokenEndpointErrorResponse`
180+
gains an `errorCode` property (typed enum in Swift, `NSInteger` from ObjC); `SFOAuthCoordinator`'s
181+
Lightning-URL diagnostic now branches on `errorCode == .unsupportedGrantType` instead of a raw string
182+
compare. The legacy `kSFOAuthErrorType*` string constants are marked `__deprecated_msg("Use SFOAuthErrorCode
183+
enum instead")` but retained (no removal). **Reviewer notes:** (1) no behavior change — the enum parses the
184+
same wire strings the string constants held; the 45-value round-trip and the Lightning-URL diagnostic paths
185+
are covered by tests. (2) The migrated `SFSDKOAuth2.swift` already carried its own Swift error-type constants
186+
and `errorWithType` mapping, so upstream's ObjC inline-literal churn is cosmetic for the compiled path; the
187+
material change ported is the enum + `errorCode` property. New `SFOAuthErrorCode.swift` added verbatim and the
188+
2 new/changed test files wired into the SDKCore target. No live-org dependency. SDKCore builds green (0 new
189+
warnings); 13 tests pass. Escalation = OAuth error-handling surface — flag in PR.
190+
177191
## Pending escalation units (upcoming — port in order)
178-
- **38 · #4094 — OAuth:** OAuth error-code enum (new SFOAuthErrorCode.swift, SFSDKOAuth2, SFOAuthCoordinator).
179192
- **39 · #4093 — PUBLIC API + advanced-auth default flip + L10n(pre-appr):** make advanced-auth the default & deprecate `forceAdvancedAuthentication`; 24 files incl. Localizable.strings.
180193
- **40 · #4088 — login-host + L10n(pre-appr):** invalid login-host recovery; Localizable.strings.
181194
- **42 · #4096 — dependency bump (gate PRE-APPROVED):** SQLCipher 4.16 → 4.17 (SmartStore.podspec, mobilesdk_pods.rb).

.claude/upstream-sync-backlog.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Upstream Sync Backlog Ledger
22

3-
Marker (done floor): `ab84f31bd` (units 1-37 done) · forcedotcom/dev HEAD (target): `b5d37d807` · **12 units remaining** · Re-seeded: 2026-07-19 (Phase 0 of the resume-porting plan).
3+
Marker (done floor): `6993d6ba8` (units 1-38 done) · forcedotcom/dev HEAD (target): `b5d37d807` · **11 units remaining** · Re-seeded: 2026-07-19 (Phase 0 of the resume-porting plan).
44

55
> **Direction:** we port changes **FROM** `forcedotcom/dev` **INTO** our ObjC→Swift migration branch
66
> (`feature/objc-to-swift-test-migration`). Each unit is a *semantic re-implementation* against the current
@@ -17,7 +17,7 @@ Marker (done floor): `ab84f31bd` (units 1-37 done) · forcedotcom/dev HEAD (ta
1717
> non-libs (CI, docs, skills, sample apps). Live progress bar = subject of lead task #9.
1818
1919
## Migration status
20-
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░ 37/49 units done (76%) · libs-production-impacting: 12/21 · Phase 1 porting (units 1-37 ✅)
20+
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░ 38/49 units done (78%) · libs-production-impacting: 13/21 · Phase 1 porting (units 1-38 ✅)
2121

2222
| Bucket | Count | Notes |
2323
|--------|-------|-------|
@@ -68,7 +68,7 @@ Marker (done floor): `ab84f31bd` (units 1-37 done) · forcedotcom/dev HEAD (ta
6868
| 35 | #4086 feature flags per user | 99a173b58 | B | ⚠⚠ feature-flags + login/OAuth + multi-lib | ✅ done (commit 85e7a1c5a6161fa85ad9479fcc331a7afa4113ca) | Per-user feature flags across Core/MobileSync/SmartStore. Ported into compiled Swift twins: **SFSDKAppFeatureMarkers.swift** (+`registerAppFeature(_:forUser:)`/`unregisterAppFeature(_:forUser:)`/`appFeatures(forUser:)`/`loadPersistedFeatures(_:forUser:)` + per-user `[String:Set<String>]` map keyed by `SFKeyForUserAndScope(user,.user)`; persist via `UserAccountManager.shared.upsert(_:)` — migration's manager-level save, NOT the persister-only `saveAccount(forUser:)`); **SalesforceSDKManager.swift** (new public `userAgent(qualifier:for:)` =`@objc(userAgentString:forUser:)`; `defaultUserAgentString` delegates to it; new `hydratePerUserFeatureFlags()` called in `sharedInstance` lazy init); **SFUserAccount.swift** (`persistedFeatureFlags: Set<String>?` + NSCoding encode/decode w/ `kUser_FEATURE_FLAGS`); **SFUserAccountManager.swift** (bio-auth/screen-lock register `forUser:` + `finalizeAuthCompletion` BW/WD/QR per-user promotion block); **SFSmartStore.swift** + **SFMobileSyncSyncManager.swift** (per-user register one-liners). De-ref .m ref-synced: SFUserAccount.m + SFMobileSyncSyncManager.m (matched pre-image→post-image verbatim); SFSmartStore.m (1-line hunk); SFSDKAppFeatureMarkers.h/.m + SalesforceSDKManager.h/+Internal.h + SFUserAccountManager.m = migration stubs, NO matching region (upstream changes live in Swift twins). **`SalesforceSDKCore.podspec` NOT modified** — upstream's change was pure auto-gen `public_header_files` REORDERING (header set byte-identical pre/post; file is generated by update_podspec_headers.sh) → no material change to port, podspec left untouched (CLAUDE.md podspec rule respected). Tests: NEW SFSDKAppFeatureMarkersTests.m ref-synced (216 lines) + 13 new tests ADDED to compiled .swift twin (per-user + auth-promotion); +1 roundtrip test each to SFUserAccountManagerTests + 3 per-user-UA tests to SalesforceSDKManagerTests (.m ref-synced + .swift twin extended, adapted `upsert`/`delete` for save/delete). Sample AuthFlowTester: 9 files ref-synced to post-image (UserCredentialsView.swift kept migration's `idData?.username` optional-chaining). **3 schemes TEST BUILD SUCCEEDED (SDKCore+SmartStore+MobileSync, 0 err, 0 new warnings); 17 AppFeatureMarkers + 4 manager/UA tests PASS (fixture-based, not live-gated).** ⚠⚠ escalation: feature-flags + login/OAuth (finalizeAuthCompletion) + new public API `userAgent(qualifier:for:)` → digest + PR-flag. |
6969
| 36 | #4091 notification-types thread safety | 9de77c7e2 | B | ⚠ thread-safety | ✅ done (commit 0faf8dfb9c54a0cbd4445cedaca8045ed40fbf70) | Thread-safety fix for `SFUserAccount.notificationTypes` (the last unguarded accessor). Ported into the compiled twin **SFUserAccount.swift**: `notificationTypes` getter now reads `_notificationTypes` under `syncQueue.sync`, setter writes under `syncQueue.async(flags: .barrier)` with `newValue?.map { $0 }` snapshot copy — matches the existing `accessScopes`/`credentials` idiom in the same file (upstream used `dispatch_sync`/`dispatch_barrier_async` on `_syncQueue`). De-ref **SFUserAccount.m** ref-synced: matched pre-image → overwrote with post-image verbatim (`dispatch_sync`/`dispatch_barrier_async` guards). NEW test **SFUserAccountThreadSafetyTests.swift** (upstream is already `.swift`; class `UserAccountThreadSafetyTests`, 4 tests) added byte-faithful, wired additively into pbxproj (build-file `42996EA8…`, file-ref `0DB02650…`, group + Sources phase; plutil OK). **1 test-only migration adaptation:** setUp line 36 `OAuthCredentials(identifier:clientId:encrypted:true)!` → `OAuthCredentials.credentials(identifier:…)!` — the migrated base `OAuthCredentials` convenience init returns nil for `.keychain` (class-cluster replaced by the factory method that builds `OAuthKeychainCredentials`); same class-cluster→factory adaptation used in unit 35's test twin. SDKCore TEST BUILD SUCCEEDED (0 err, 0 new warnings; the `oldKey` warning at SFUserAccount.swift:482 is pre-existing, outside my diff). All 4 UserAccountThreadSafetyTests PASS (fixture-based, not live-gated). ⚠ thread-safety → digest + PR-flag. |
7070
| 37 | #4092 iOS RTR feature flag | ab84f31bd | B | ⚠ feature-flag/OAuth | ✅ done (commit 57820a68ccae1e7606071551620e270a7e320037) | iOS Refresh-Token-Rotation (RTR) feature flag `RT`. New global constant `kSFAppFeatureRTR = "RT"` added to compiled twin **SFSDKAppFeatureMarkers.swift** (+ de-ref `.h`/`.m` ref-synced: both matched pre-image, applied the 1-line const hunk). **SFOAuthSessionRefresher.swift** (compiled twin): in the refresh success branch, capture `oldRefreshToken` before `credentials.update(...)`, then if the new refresh token is non-empty AND `!= oldRefreshToken`, resolve the account via `UserAccountManager.shared.userAccount(for:)` (migrated `accountForCredentials:`) and `SFSDKAppFeatureMarkers.registerAppFeature(kSFAppFeatureRTR, forUser:)` — detects server-side token rotation and tags the user's UA. De-ref `SFOAuthSessionRefresher.m` ref-synced: matched pre-image → applied import + else-branch hunk surgically (kept migration's existing `-Swift.h` import). Tests: both `.m`s ref-synced to post-image (matched pre-image → verbatim); the NEW tests ALSO ported into the compiled `.swift` twins — **SFOAuthSessionRefresherTests.swift**: added a file-scope `SFSDKOAuthClientStub: NSObject, SFSDKOAuthProtocol` (immediate-completion stub), setUp userId/orgId 15-char entity IDs (so `matchesCredentials:` can compare), + 2 tests (`test_givenRotatedRefreshToken…` / `test_givenUnchangedRefreshToken…`) using the migrated `SFSDKOAuthTokenEndpointResponse(dictionary:parseAdditionalFields:)`, `UserAccountManager.shared.upsert/delete`, and the `authClient` factory var (upstream's `saveAccountForUser:`/`deleteAccountForUser:` → `upsert`/`delete`, `authClient` property assignment kept); **SFSDKAppFeatureMarkersTests.swift**: +RTR tearDown line + 1 per-user RTR test. Sample `BaseAuthFlowTester.swift` (UITest, not lib-compiled) ref-synced to post-image (matched pre-image → verbatim): `isRtr` param threaded through `validateUserAgent`, WD/MU/RT negative-assertions, revoke-refresh cycle passes loginHost + validates UA. No pbxproj change (both `.swift` twins already compiled). SDKCore TEST BUILD SUCCEEDED (0 err; 3 warnings all pre-existing, outside my diff — refresher:84 nil-coalescing, markers:59/67 unused-sync). 22 tests PASS (4 refresher incl. 2 new RTR + 18 AppFeatureMarkers incl. new RTR; fixture-based, not live-gated). ⚠ feature-flag/OAuth (SFOAuthSessionRefresher) → digest + PR-flag. |
71-
| 38 | #4094 OAuth error-code enum | 6993d6ba8 | B+D | ⚠ OAuth | ⬜ pending | `SFOAuthCoordinator.m`, NEW `SFOAuthErrorCode.swift`, `SFSDKOAuth2.h/.m`, constants + tests + pbxproj. |
71+
| 38 | #4094 OAuth error-code enum | 6993d6ba8 | B+D | ⚠ OAuth | ✅ done (commit b1f4e186b0a03a50fe268bdea473c7169d0f2754) | Typed OAuth error-code enum replacing brittle string comparisons. NEW `SFOAuthErrorCode.swift` (Cat D) added **verbatim** (byte-matches upstream post-image): `@objc enum SFOAuthErrorCode: Int, CaseIterable` (45 cases + `.unknown`), `from(_:)` parser, `wireValue` extension, + `SFOAuthErrorCodeHelper` ObjC bridge (`from(_:) -> NSInteger`). Wired additively into pbxproj: 6 entries (prod buildfile+fileref+group+sources, test buildfile+fileref+group+sources) using upstream placeholder UUIDs `4FOAUTHEC0*`/`4FOAUTHECT0*` (no collision; plutil OK). Production port into compiled Swift twins: **SFSDKOAuth2.swift** — added `@objc public private(set) var errorCode: SFOAuthErrorCode = .unknown` to `SFSDKOAuthTokenEndpointErrorResponse`, set via `SFOAuthErrorCode.from(errorType)` in `init(errorType:description:)` (upstream added an ObjC `NSInteger errorCode` ivar + `SFOAuthErrorCodeHelper from:` call — in the Swift twin the enum is used directly). **SFOAuthCoordinator.swift** — the Lightning-URL unsupported-grant-type check now uses `response.error?.errorCode == .unsupportedGrantType` (was `tokenEndpointErrorCode == kSFOAuthErrorTypeUnsupportedGrantType`). De-ref .m/.h ref-synced: `SFSDKOAuthConstants.h` matched pre-image → post-image verbatim (adds `__deprecated_msg("Use SFOAuthErrorCode enum instead")` to all `kSFOAuthErrorType*` constants); `SFOAuthCoordinator.m` (5 hunks: 2×jwt_launch_failed, errorCode-enum check, 3×malformed_response inline literals) + `SFSDKOAuth2.m` (errorCode ivar block + `_errorCode = [SFOAuthErrorCodeHelper from:]` + malformed literal + the 17-branch `errorWithType` isEqualToString→inline-literal conversion) applied surgically (both diverge elsewhere from migration; `-Swift.h` import already present). `SFSDKOAuth2.h` is a migration TOMBSTONE (no ErrorResponse @interface) → the upstream `errorCode` property has NO matching region there (lives in the Swift twin). **NOTE: the migrated SFSDKOAuth2.swift defines its OWN Swift `let` error-type constants + its own `errorWithType` mapping — the upstream .m inline-literal churn is cosmetic for the compiled path; the material change is the enum + errorCode property.** Tests: NEW `SFOAuthErrorCodeTests.swift` (8 tests, verbatim) + `SFOAuthCoordinatorLightningURLTests.swift` +4 hunk (2 `private let` → `SFOAuthErrorCode.<case>.wireValue!`) applied to the compiled .swift twin (region byte-matched pre-image; twin diverges elsewhere from unit-8 migration adaptations). SDKCore TEST BUILD SUCCEEDED (0 err; 2 warnings pre-existing outside diff — coordinator:420 unused-result, lightning:40 unused-block). 13 tests PASS (8 error-code + 5 lightning, fixture-based). ⚠ OAuth → digest + PR-flag. |
7272
| 39 | #4093 make advanced-auth default + deprecate forceAdvancedAuthentication | a2c4ee4d5 | B | ⚠⚠⚠ PUBLIC API + advanced-auth + L10n(pre-appr) | ⬜ pending | 24 files: `SalesforceSDKManager.*`, LoginHost VCs, `SFOAuthCoordinator.m`, `SFUserAccountManager.m` + tests + **Localizable.strings** + sample. PUBLIC-API deprecation + default behavior flip. |
7373
| 40 | #4088 invalid login-host recovery | a2a271cca | B | ⚠ login-host + L10n(pre-appr) | ⬜ pending | `NewLoginHostView.swift`, `SFUserAccountManager.m` + tests + pbxproj + **Localizable.strings**. |
7474
| 41 | #4095 token-exchange error tests | e4bdf6397 | A || ⬜ pending | 1 test `.swift` + pbxproj. |

.claude/upstream-sync-marker

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
ab84f31bdbcdea948692ce4f9c3aefd2d460262a
1+
6993d6ba88b043a7aacc4517854b13ab0487ce9e

libs/SalesforceSDKCore/SalesforceSDKCore.xcodeproj/project.pbxproj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,8 @@
119119
4F3139682331C5C7007B3705 /* SFSDKAuthRootController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F3139672331C5B9007B3705 /* SFSDKAuthRootController.h */; };
120120
4F5727E327F27F1A0008CDA4 /* SFSDKPrimingRecordsResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F5727DC27F27F1A0008CDA4 /* SFSDKPrimingRecordsResponse.h */; settings = {ATTRIBUTES = (Public, ); }; };
121121
4F5A49502E98711600C89DDD /* ScopeParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F5A494F2E98711600C89DDD /* ScopeParser.swift */; };
122+
4FOAUTHEC012E98711600C89DDD /* SFOAuthErrorCode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FOAUTHEC002E98711600C89DDD /* SFOAuthErrorCode.swift */; };
123+
4FOAUTHECT012E98711600C89DDD /* SFOAuthErrorCodeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FOAUTHECT002E98711600C89DDD /* SFOAuthErrorCodeTests.swift */; };
122124
4F5A49582E98B0F800C89DDD /* ScopeParserTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F5A49572E98B0F800C89DDD /* ScopeParserTests.swift */; };
123125
4F7EB40D1BFFC88200768720 /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8280EC1716E15FFC00768DE8 /* MessageUI.framework */; };
124126
4F7EB4101BFFC88200768720 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8220B74F16D804CA00EC3921 /* Foundation.framework */; };
@@ -654,6 +656,8 @@
654656
4F5727DC27F27F1A0008CDA4 /* SFSDKPrimingRecordsResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SFSDKPrimingRecordsResponse.h; sourceTree = "<group>"; };
655657
4F5727E227F27F1A0008CDA4 /* SFSDKPrimingRecordsResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SFSDKPrimingRecordsResponse.m; sourceTree = "<group>"; };
656658
4F5A494F2E98711600C89DDD /* ScopeParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScopeParser.swift; sourceTree = "<group>"; };
659+
4FOAUTHEC002E98711600C89DDD /* SFOAuthErrorCode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SFOAuthErrorCode.swift; sourceTree = "<group>"; };
660+
4FOAUTHECT002E98711600C89DDD /* SFOAuthErrorCodeTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = SFOAuthErrorCodeTests.swift; path = SalesforceSDKCoreTests/SFOAuthErrorCodeTests.swift; sourceTree = SOURCE_ROOT; };
657661
4F5A49572E98B0F800C89DDD /* ScopeParserTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ScopeParserTests.swift; path = ../SalesforceSDKCoreTests/ScopeParserTests.swift; sourceTree = "<group>"; };
658662
4F755F4120D48D6700CE4E0E /* NSString+SFAdditionsTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = "NSString+SFAdditionsTests.m"; path = "SalesforceSDKCoreTests/NSString+SFAdditionsTests.m"; sourceTree = SOURCE_ROOT; };
659663
4F7EB3F71BFFC87600768720 /* SDKCommonNSDataTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SDKCommonNSDataTests.m; path = SalesforceSDKCoreTests/SDKCommonNSDataTests.m; sourceTree = SOURCE_ROOT; };
@@ -1259,6 +1263,7 @@
12591263
B7355248228E84AF001C7759 /* SFSDKLogoutBlocker.h */,
12601264
B7A901BD228E4DFA0036D749 /* SFSDKLogoutBlocker.m */,
12611265
399A11508BCB47F490DFB724 /* SFOAuthCoordinatorLightningURLTests.swift */,
1266+
4FOAUTHECT002E98711600C89DDD /* SFOAuthErrorCodeTests.swift */,
12621267
2B4074A2C0DE44F19A0E3344 /* SFSDKOAuth2RefreshInstanceUrlTests.swift */,
12631268
4F9E052C2DD6A06F00548985 /* SFSDKOAuthTokenEndpointResponseTests.m */,
12641269
69848CBB2364063E00893E57 /* SFSDKPushNotificationDataProvider.h */,
@@ -1413,6 +1418,7 @@
14131418
4F5A494F2E98711600C89DDD /* ScopeParser.swift */,
14141419
23D96B6E2E145AC20004B06A /* DomainDiscoveryCoordinator.swift */,
14151420
4F8A3B002CEC202F00ECDC76 /* JwtAccessToken.swift */,
1421+
4FOAUTHEC002E98711600C89DDD /* SFOAuthErrorCode.swift */,
14161422
4F96FCC61BFD32130022F021 /* SFOAuthCoordinator.h */,
14171423
4F96FCC71BFD32130022F021 /* SFOAuthCoordinator.m */,
14181424
4F96FCC51BFD32130022F021 /* SFOAuthCoordinator+Internal.h */,
@@ -2524,6 +2530,7 @@
25242530
69CEBC7E22F368CF00F16218 /* SFNetworkTests.swift in Sources */,
25252531
4FA1B2C32F0E000000000001 /* LoginForAdminTests.swift in Sources */,
25262532
1A31073F5F374B9EB1162F2E /* SFOAuthCoordinatorLightningURLTests.swift in Sources */,
2533+
4FOAUTHECT012E98711600C89DDD /* SFOAuthErrorCodeTests.swift in Sources */,
25272534
2B4074A1C0DE44F19A0E1122 /* SFSDKOAuth2RefreshInstanceUrlTests.swift in Sources */,
25282535
237C186C2E44FCAE0008015C /* EncryptStreamTests.swift in Sources */,
25292536
4FARCHRT001234567890ABCD /* CredentialsArchiveRoundTripTests.swift in Sources */,
@@ -2646,6 +2653,7 @@
26462653
CE4CE3961C0E526A009F6029 /* SFUserAccountManager.m in Sources */,
26472654
A3C7476129F709EB00D72B7F /* BiometricAuthenticationManagerInternal.swift in Sources */,
26482655
4F5A49502E98711600C89DDD /* ScopeParser.swift in Sources */,
2656+
4FOAUTHEC012E98711600C89DDD /* SFOAuthErrorCode.swift in Sources */,
26492657
23945B712D78E4A60060B195 /* NotificationType.swift in Sources */,
26502658
D3B1519F2E1DA6EB00914EF1 /* AuthCoordinatorFrontdoorBridgeLoginOverride.swift in Sources */,
26512659
FDCECF001234567890ABCDEF /* DevInfoViewController.swift in Sources */,

0 commit comments

Comments
 (0)