Modernize the iOS Voice Settings catalogue - #294
Conversation
Rebuild Voice Settings as a native SwiftUI list hosted from the UIKit Settings screen. Preserve voice selection and preview behavior, enhanced voice confirmation, speaking rate announcements, foreground refresh, telemetry, accessibility focus, and temporary callout and beacon muting. Remove the legacy VoiceSettings storyboard, table controller, speaking rate cell, storyboard segue, and obsolete project references. Automated testing: - Soundscape Debug arm64 simulator build - 66 UnitTests tests - InterfaceBuilderAudit with no Voice Settings candidates or stale references Manual testing required: - Verify Settings > Voice navigation, localized sections, subtitles, checkmarks, preview spinner, enhanced voice alert, selection persistence, foreground voice refresh, and back navigation. - Verify speaking-rate commit and delayed announcement, voice preview completion, and cancellation when leaving the screen. - Verify callouts and beacon audio are muted only while Voice Settings is visible and restored afterward. - Verify VoiceOver focus, traits, labels, and hints; Dynamic Type; and light/dark appearance colors.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (5)
💤 Files with no reviewable changes (1)
📝 WalkthroughSummary by CodeRabbit
WalkthroughThe pull request replaces the storyboard voice settings screen with a SwiftUI voice catalogue, adds novelty/provider grouping and selection behavior, introduces catalogue tests and localization strings, and removes legacy voice settings storyboard and source references. ChangesVoice settings catalogue
Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@apps/ios/GuideDogs/Code/Visual`
UI/Views/Settings/Voice/VoiceSettingsView.swift:
- Around line 360-362: Update the voice dictionary construction in the
VoiceSettingsView loading flow to use a uniquing initializer instead of
Dictionary(uniqueKeysWithValues:), so duplicate identifiers from
TTSConfigHelper.loadVoices() no longer trap. Preserve the existing voice lookup
behavior and rebuildCatalogue() call.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 58898e86-a447-493f-9128-5b025a91643b
📒 Files selected for processing (13)
apps/ios/GuideDogs.xcodeproj/project.pbxprojapps/ios/GuideDogs/Assets/Localization/en-GB.lproj/Localizable.stringsapps/ios/GuideDogs/Assets/Localization/en-US.lproj/Localizable.stringsapps/ios/GuideDogs/Code/App/Framework Extensions/AVSpeech Extensions/AVSpeehSynthesisVoice+Extensions.swiftapps/ios/GuideDogs/Code/Audio/Text To Speech/TTSConfigHelper.swiftapps/ios/GuideDogs/Code/Visual UI/Controls/Voice Settings/SpeakingRateTableViewCell.swiftapps/ios/GuideDogs/Code/Visual UI/View Controllers/Settings/SettingsViewController.swiftapps/ios/GuideDogs/Code/Visual UI/View Controllers/Settings/Voice/VoiceSettingsTableViewController.swiftapps/ios/GuideDogs/Code/Visual UI/Views/Settings.storyboardapps/ios/GuideDogs/Code/Visual UI/Views/Settings/Voice/VoiceCatalogue.swiftapps/ios/GuideDogs/Code/Visual UI/Views/Settings/Voice/VoiceSettingsView.swiftapps/ios/GuideDogs/Code/Visual UI/Views/VoiceSettings.storyboardapps/ios/UnitTests/Audio/VoiceCatalogueTests.swift
💤 Files with no reviewable changes (4)
- apps/ios/GuideDogs/Code/Visual UI/View Controllers/Settings/Voice/VoiceSettingsTableViewController.swift
- apps/ios/GuideDogs/Code/Visual UI/Views/VoiceSettings.storyboard
- apps/ios/GuideDogs/Code/Visual UI/Controls/Voice Settings/SpeakingRateTableViewCell.swift
- apps/ios/GuideDogs/Code/Visual UI/Views/Settings.storyboard
|
@coderabbitai review |
✅ Action performedReview finished.
|
Summary
Why
The previous storyboard implementation presented a long, difficult-to-navigate voice list and mixed rarely useful novelty and third-party voices with standard voices. Reordering the selected locale immediately also caused VoiceOver focus to land on a different row. The new catalogue makes the list easier to scan and keeps its structure stable during interaction.
Validation
xcodebuild test -project GuideDogs.xcodeproj -scheme Soundscape -destination 'platform=iOS Simulator,id=6D13394A-295B-4D57-B202-561E1E914E74' -only-testing:UnitTests/VoiceCatalogueTests CODE_SIGNING_ALLOWED=NO