bitwarden / bitwarden/ios

[PM-30138] Crash during vault sync: BitwardenShared.KeychainServiceError.osStatusError(-25300) (iOS 18.6.2 / v2025.12.0)

Open
#2,213 21 comments 1 reaction 0 assignees View on GitHub
app:password-manager bug
Dominant language
Swift
Stars
684
Forks
154
Avg merge
7d 2h
Merged PRs (30d)
32

Description

### Steps To Reproduce

1. Open Bitwarden iOS app (v2025.12.0) on iOS 18.6.2
2. Ensure the app is logged in to a vault with pending sync data (or trigger manual sync via the "Sync" button in settings)
3. Initiate sync (manual or wait for automatic sync)
4. App crashes with the keychain error

### Expected Result

The app should complete vault synchronization without crashing, even if keychain entries are temporarily unavailable. If keychain access fails during sync, the app should display a user-friendly error message and allow retries instead of crashing.

### Actual Result

When triggering a vault sync (either manually via the sync button or automatically on app launch/unlock), the app crashes immediately with the error BitwardenShared.KeychainServiceError.osStatusError(-25300). The stack trace shows failures related to Swift concurrency and generic metadata instantiation, pointing to a compatibility or error-handling gap in the keychain service layer during sync operations.

### Screenshots or Videos

BitwardenShared.KeychainServiceError.osStatusError(-25300)

Stack trace:
0 BitwardenKit 0x000000010552e260 __swift_memcpy96_8 + 29620
1 BitwardenShared 0x0000000102cba2e5 objectdestroy.3Tm + 165
2 BitwardenKit 0x00000001054eff1d __swift_mutable_project_boxed_opaque_existential_1 + 1993
3 BitwardenKit 0x00000001054e8749 __swift_instantiateGenericMetadata + 2665
4 BitwardenKit 0x00000001054f0309 __swift_mutable_project_boxed_opaque_existential_1 + 2997
5 BitwardenShared 0x0000000102f80d69 block_destroy_helper.28 + 42137
6 BitwardenShared 0x0000000102df0495 objectdestroy.37Tm + 8649
7 BitwardenKit 0x00000001054e8411 __swift_instantiateGenericMetadata + 1841
8 BitwardenKit 0x00000001054efce1 __swift_mutable_project_boxed_opaque_existential_1 + 1421
9 BitwardenKit 0x00000001054e8749 __swift_instantiateGenericMetadata + 2665
10 BitwardenKit 0x0000000105598d39 objectdestroy.13Tm + 905
11 BitwardenShared 0x0000000102cbd921 objectdestroy.3Tm + 14049
12 BitwardenShared 0x0000000102cba2e5 objectdestroy.3Tm + 165
13 BitwardenKit 0x00000001054f2bdd __swift_memcpy1_1 + 1909
14 BitwardenKit 0x00000001054e8411 __swift_instantiateGenericMetadata + 1841
15 BitwardenKit 0x000000010554caa5 objectdestroy.4Tm + 28597
16 BitwardenKit 0x00000001054e8749 __swift_instantiateGenericMetadata + 2665
17 libswift_Concurrency.dylib 0x00000001973e9241 7D7AD359-D240-391B-8E01-A01153D84033 + 414273

Binary images:
Bitwarden: 0x000000010286c000
BitwardenShared: 0x0000000102c94000
AuthenticatorBridgeKit: 0x0000000102a08000
BitwardenKit: 0x00000001054dc000
BitwardenResources: 0x0000000102a3c000

📝 Bitwarden 2025.12.0 (2787)
📦 Bundle: com.8bit.bitwarden
📱 Device: iPhone12,1
🍏 System: iOS 18.6.2
🧱 Commit: bitwarden/ios/release/2025.12-rc37@b7349493707fc9dccf3549207f9c0f398e02eb59
💻 Build Source: bitwarden/ios/actions/runs/19830131166/attempts/1

### Additional Context

_No response_

### Build Version

Bitwarden 2025.12.0 (2787)

### What server are you connecting to?

US

### Self-host Server Version

_No response_

### Environment Details

Bitwarden Version: 2025.12.0 (2787)
Bundle ID: com.8bit.bitwarden
Device: iPhone 12 (iPhone12,1)
iOS Version: 18.6.2
Commit Hash: bitwarden/ios/release/2025.12-rc37@b7349493707fc9dccf3549207f9c0f398e02eb59
Build Source: bitwarden/ios/actions/runs/19830131166/attempts/1

### Issue Tracking Info

- [x] I understand that work is tracked outside of Github. A PR will be linked to this issue should one be opened to address it, but Bitwarden doesn't use fields like "assigned", "milestone", or "project" to track progress.

Contributor guide

Open the contributing guide

Research direction

Reproduce vault sync on Bitwarden iOS 2025.12.0 with iOS 18.6.2, then trace KeychainServiceError.osStatusError(-25300) through the keychain service and sync path. Done means sync no longer crashes when keychain entries are unavailable, and the app shows a user-friendly error that permits retrying.

Written by the indexing model from the issue text.

Assessment

Tech stack
ios, swift
Domain
mobile, security
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.