Overview
Send is now hidden from navigation when your organization's policy disables it
Subscription management is now available in-app
Add-item sheet titles now clearly label what you're creating
Stronger encryption is applied during new account registration
Fixed keyboard suggestions not appearing in the username field
Fixed an error that could appear on the lock screen when no account was active
What's Changed
Feature Development
- [PM-37642] feat: Add debug menu flag to disable self-host premium checks by @andrebispo5 in #2657
- [PM-35367] chore: Fix TestHarness app build & update tests. by @morganzellers-bw in #2647
- [BWA-99] feat: Add next TOTP code preview to BWA by @KatherineInCode in #2527
- [PM-7854] feat: Hide Send tab when disableSend policy is active by @fedemkr in #2667
- [PM-37721] feat: Add upgrade to premium button on Attachments premium alert by @andrebispo5 in #2666
- [PM-37697] feat: Show "Continue to web app?" alert when tapping Manage plan by @andrebispo5 in #2671
- [PM-37719] feat: Upcoming charge is not read as a dollar amount by VoiceOver by @andrebispo5 in #2678
- [PM-33550] feat: Rename modal add items text by @morganzellers-bw in #2685
- [PM-32809] feat: wire Bank Account through BitwardenSdk by @SaintPatrck in #2576
- [PM-24224] feat: Support v2 encryption on password account registration by @matt-livefront in #2684
- [PM-37998] feat: Update Cancel Premium confirmation dialog to match new design by @andrebispo5 in #2709
- [PM-32807] feat: wire Driver's License through BitwardenSdk by @SaintPatrck in #2577
- [PM-38180] feat: Announce external link on Manage plan and Cancel Premium buttons by @andrebispo5 in #2718
- [PM-38119] feat: Fix Send "Specific people" upgrade to premium flow by @andrebispo5 in #2720
- [PM-37967] feat: Show premium canceled status in plan screen by @andrebispo5 in #2716
- [PM-37997] feat: Hide cancel premium button when plan status is update payment by @andrebispo5 in #2725
- [PM-38183] feat: Add expired and pending cancellation premium plan states by @andrebispo5 in #2721
- 🍒 [PM-38394] fix: Update settings plan row visibility by @andrebispo5 in #2742
🐛 Bug fixes
- [PM-35295] fix: Prevent iOS autofill from clearing BitwardenTextField via local state buffer by @matt-livefront in #2633
- [PM-10548] fix: Biometric auth setting being reset on logout. by @morganzellers-bw in #2628
- [PM-28227] fix: Keep keyboard alive in autofillText mode via SwiftUI @focusstate anchor by @fedemkr in #2599
- [PM-37920] fix: Align Plan screen cart summary with web by @SaintPatrck in #2683
- [PM-24114] fix: Prevent noActiveAccount errors when viewing pre-login Settings by @matt-livefront in #2691
- [PM-37885] fix: Check camera permission before opening card scanner by @fedemkr in #2712
- [PM-38174] fix: Remove excess bold from past due status description by @andrebispo5 in #2719
- [PM-37719] fix: Fix VoiceOver announcing "Star Star" in upcoming charge description by @andrebispo5 in #2710
⚙️ Maintenance
- Crowdin Pull by @bw-ghapp[bot] in #2659
- [PM-35680] chore: Convert ExporterClientProtocol to AutoMockable by @matt-livefront in #2653
- [PM-36604] test: Fix flaky WatchServiceTests by @KatherineInCode in #2617
- [PM-36966] test: Fix non-deterministic ordering in ErrorReportBuilderTests by @KatherineInCode in #2624
- [PM-37604] tool: Add fix-ellipsis subcommand to fix-localizable-strings by @KatherineInCode in #2652
- [PM-35680] chore: Convert CryptoClientProtocol to AutoMockable by @matt-livefront in #2663
- [PM-35435] ci: Stop applying Change Type labels based on changed files by @vvolkgang in #2649
- [PM-35680] chore: Convert AuthClientService to AutoMockable by @matt-livefront in #2668
- chore: Moves SerialWorker to BitwardenKit. by @morganzellers-bw in #2669
- [PM-37809] chore: Fix trivial warnings by @fedemkr in #2673
- [PM-35680] chore: Convert StateClientProtocol to AutoMockable by @matt-livefront in #2675
- [PM-13621] ci: Enable xcodegen Renovate manager for SPM dependencies by @KatherineInCode in #2679
- [PM-37957] test: Fix SerialWorkerTests captured var concurrency warnings by @KatherineInCode in #2690
- [PM-37973] chore: Remove unreachable catch branch after EmptyInputValidator typed throw by @matt-livefront in #2689
- [PM-35680] chore: Convert ClientFido2Service to AutoMockable by @matt-livefront in #2687
- [PM-37819] refactor: Persist WrappedAccountCryptographicState directly by @matt-livefront in #2677
- [PM-38178] ci: Increase test execution time allowance to 3 seconds by @KatherineInCode in #2714
- [PM-37995] chore: Add pre-commit hook to lint changed Swift files by @matt-livefront in #2694
- [PM-37995] chore: Fix lint and build warnings by @matt-livefront in #2715
- [PM-37960] test: Fix BillingAPIServiceTests timeout by using MockAccountTokenProvider by @KatherineInCode in #2711
📦 Dependency Updates
- Update public suffix list by @github-actions[bot] in #2660
- Update SDK to f705e9b (3.0.0-6241-ba67235) by @bw-ghapp[bot] in #2646
- [deps]: Update gh minor by @renovate[bot] in #2650
- Update SDK to f65b246 (3.0.0-6336-b1ab270) by @bw-ghapp[bot] in #2676
- Update SDK to f30028b (3.0.0-6362-291a28e) by @bw-ghapp[bot] in #2686
- [deps]: Update SwiftProtobuf to v1.38.0 by @renovate[bot] in #2704
- Update SDK to 0169a48 (3.0.0-6438-025e5d8) by @bw-ghapp[bot] in #2707
🎨 Other
- [PM-35680] Move VaultClientService into BitwardenKit by @matt-livefront in #2680
- llm: Capture review learnings on alphabetization, comments, localization, and what-not-to-test by @SaintPatrck in #2612
- llm: Document line wrapping style in CLAUDE.md by @KatherineInCode in #2682
Full Changelog: v2026.5.0-bwpm...v2026.5.1-bwpm
Builds Source: https://github.com/bitwarden/ios/actions/runs/26657680158