## cvs-health/ios-swiftui-accessibility-techniques — 0.4.0…0.5.0

_176+ commits._

### Features
- **Add AppStore.md with a rewritten App Store description** (019bfb5)
- **Revert "Add Back and Forward navigation to the documentation web view"** (727dab5)
- **Add Back and Forward navigation to the documentation web view** (f904e8c)
- **Split Details into paragraphs, add seat map group label, add 26.10 notes** (a1c7679)
- **Add Accessibility Custom Content technique page** (d264ac8)
- **Add duplicate-button-label rule for WCAG 2.4.6b** (6d64ef9)
- **Add sort-priority-negative rule for Explore by Touch failure mode** (3124de5)
- **Add value-contains-role a11y-check rule** (dd9bb42)
- **Add Explore by Touch Broken prototype demo** (e1c1556)
- **add Web View Dynamic Type to README index** (810d44d)
- **add Web View Dynamic Type technique page** (6bd8beb)
- **extend draggable rule to cover .onDrag(); remove new draggable API examples** (c1edc61)
- **Add import UIKit to MotionActuationView for UIViewController/UIEvent** (6947e0c)
- **feat(techniques): add live good/bad demos for 4 new a11y-check rules** (84f47c2)
- **feat(a11y-check): add video-audio-autoplay rule for WCAG 1.4.2** (6d2e081)
- **feat(a11y-check): add 3 new WCAG 2.2 rules for drag, motion, and context change** (6e0f065)
- **Add XCTest Accessibility page with intentional audit failures** (c88069a)
- **feat(a11y-check): cross-file exemption for missing-navigation-title externally titled views** (46d6538)
- **feat(a11y-check): add --create-github-issues with Copilot assignment** (e1ff123)
- **feat: show dual-option FIXED CODE when suggestion has call-alternative before "; or .modifier"** (24a711b)
- **feat: add --base-path flag to strip runner prefix from file paths in all output formats** (24e69e0)
- **Add button-group-missing-container-label rule (WCAG 1.3.1)** (69c358d)
- **Add bad example native alert without focus management on Alerts page** (a3b1bb0)
- **Add orientation rule and strengthen SKILL.md to cover all 36 a11y-check rules** (a404d14)

### Fixes
- **Fix two contrast failures in good examples; stop flagging self-contained pairs** (f77d5ff)
- **Fix doc inconsistencies left by the verbosity correction** (2127160)
- **Fix seat map width overflow and use window/middle/aisle seat wording** (70feb08)
- **Fix label-in-name failure in Accessibility Custom Content good examples** (b6d0245)
- **Update changelog with bug fixes** — Updated the changelog to document a fix for HTML output corruption when using per-view mode, and added entries for two new accessibility rules: `duplicate-button-label` and `sort-priority-negative`. These changes track recent improvements to the a11y-check tool's functionality and rule set. (beae8d1)
- **HTML reports now include per-view scores** — Fixed a bug where using --format html with --per-view would corrupt the HTML file with terminal formatting codes. Per-view scores are now computed once and rendered as a proper HTML table in HTML reports, while terminal output still shows the colored view format. (5f80cc6)
- **Restore sort priority and collapse bug explanation into a DisclosureGroup** (a08d0b0)
- **Add on-page explanation panel for the three bug mechanisms** (a6c4cf5)
- **Add accessibilitySortPriority(-1) to tab bar to fully replicate CVS bug** (7396e89)
- **Fix iOS 17 build error in accessibilityHitTest override** (695644d)
- **Fix oversized VoiceOver focus ring in ExploreByTouchBrokenView** (559382b)
- **Fix accessibilityHitTest signature and UIAccessibility API** (11effae)
- **Fix Explore by Touch bug: override accessibilityHitTest without hiding tab bar** (ba27f0b)
- **Reproduce Explore by Touch bug using UIAccessibilityElement with misplaced frames** (478b542)
- **Refine Explore by Touch Broken prototype to match CVS bug pattern exactly** (838d9c5)
- **Fix Explore by Touch Broken with the real CVS bug pattern** (8b9482f)
- **Fix Explore by Touch Broken to actually reproduce the bug** (85858d8)
- **fix Web View Dynamic Type: auto-size frame to content height** (8293998)
- **fix animation-missing-reduce-motion WCAG criterion to 2.2.2** (c8efa22)
- **downgrade animation-missing-reduce-motion to warning; fix WCAG criterion** (b812609)
- **Fix bad example video URLs returning 403** (75a8ca8)
- **Fix MotionActuationView simulator shake: add UIKit responder chain detector** (8ca2d6b)
- **fix(videos): move AVPlayer instances to @State and fix HTTP URL** (b82127c)
- **fix: use UIViewRepresentable with nil label for missing-label bad example** (fef43bb)
- **fix: use Stepper and lineLimit(1) for missing-label and text-clipped bad examples** (f6b0a11)
- **fix: scroll before audit so bad examples below the fold are detected** (34984be)
- **Fix bad examples to use patterns that reliably trigger audit failures** (0339f5f)
- **Update changelog to include testInformative audit fix** (ed6a1ae)
- **Update changelog for testA11yCheck audit failure collection fix** (f108f24)
- **Fix navigation title placement in TabsGoodView and MessagesTabView** (eab4516)
- **fix(a11y): add .navigationTitle to HomeTabView and MessagesTabView** (3c40f29)
- **fix(a11y-check): balanced-paren modifier extraction and inside-placement for missing-navigation-title FIXED CODE** (bf33721)
- **fix(a11y-check): fix Remove suggestion parsing, line-limit replacement, wider snippet window** (411516f)
- **fix(a11y-check): word removal on context lines, view-name substitution, wider snippet window** (4d35883)
- **fix(a11y-check): show actual container children in FIXED CODE instead of // …** (fb9e6fc)
- **fix(a11y-check): improve FIXED CODE for container views and string literal fixes** (ce86e16)
- **fix(a11y-check): suppress misleading FIXED CODE for multi-line closure views** (ab39e3f)
- **fix(a11y-check): restore FIXED CODE previews for non-navigation views** (2bc382b)
- **fix(a11y-check): flag screen-level View structs with no .navigationTitle()** (fa4e1b2)
- **fix(a11y-check): suppress image-missing-label for component-owned images (conditions 2 & 3)** (447bb5c)
- **fix(a11y-check): suppress image-missing-label for images inside accessibly-managed ancestors** (fbaf7cc)
- **fix(a11y-check): clarify navigationTitle suggestion wording** (a375ec7)
- **fix(a11y-check): fix navigationTitle auto-fix placement in NavigationStack** (dc46beb)
- **fix: update toggle-missing-label suggestion to show both visible-label and accessibilityLabel options** (d064d7e)
- **fix: change "screen" to "page" in missing-navigation-title message** (6dd3d90)
- **fix(tap-gesture): simplify isKeyboardDismiss to use statements.description for Swift 6 compat** (220f737)
- **fix(tap-gesture): skip keyboard-dismiss gestures in TapGestureMissingButtonTraitRule** (a0628ee)
- **fix(tap-gesture): skip keyboard-dismiss closures as false positives for isButton trait** (3aa667a)
- **fix(html-report): correctly parse 'Replace X with Y' suggestions for fixed-code display** (ec71593)
- **fix: populate artifactChanges with actual replacement data in SARIF fixes** (20b312c)
- **fix: add required artifactChanges to SARIF fixes for GitHub Code Scanning compatibility** (a6a763b)
- **fix(a11y-check): close three static SwiftUI contrast gaps (WCAG 1.4.3) (#26)** (b2c2598)

### Backend
- **Clear remaining colour false positives; release a11y-check 0.5.0** (cd3659d)
- **Resolve constants in hardcoded-color pair detection** (bab5777)
- **Close four gaps in the colour and contrast rules** (51503cc)
- **xcode 27** (7bcb60e)
- **Correct the WCAG criteria count from 23 to 24** (3832d2c)
- **Follow up on PR #27: skip notice, CI, and two stale tests** (8ad8d17)
- **Merge PR #27: Honor exclude_paths for explicit file arguments** (680ae17)
- **Correct the build number note: 78 was the UI test target, not the app** (e8174f7)
- **Release iOS 26.7; drop README checkboxes and Siri Shortcuts** (b93bbf3)
- **Note 26.7 as the prepared version and flag the duplicate header** (c792e67)
- **Stop minting versions for GitHub commits; document the two version lines** (8c743bc)
- **Merge branch 'main' of https://github.com/cvs-health/ios-swiftui-accessibility-techniques** (646c512)
- **Update project.pbxproj** (0982a91)
- **Lead with Apple's stated purpose, drop the rotor gesture instructions** (20e0a21)
- **Trim the explanation back to the custom content API** (fffc1d9)
- **Make seats toggles so VoiceOver conveys the unselected state** (12bd050)
- **Correct the More Content verbosity claim: discoverability, not availability** (962f44d)
- **Rework Accessibility Custom Content around a seat map, drop bad examples** (921abfa)
- **Label-in-name error severity upgrade** — The `label-in-name` accessibility rule now treats cases where visible text doesn't appear at the start of an accessible label as errors instead of warnings, because Voice Control matches against what users see on screen. The error message now explains the Voice Control impact and suggests two fixes: reorder the label to put visible text first, or remove the custom accessibility label entirely. (cba29c1)
- **Accessibility label ordering now stricter** — A accessibility checking rule now treats improperly ordered visible text labels as errors instead of warnings. When an accessible label contains visible text but doesn't start with it, Voice Control users can't activate controls by speaking what they see—a WCAG 2.5.3 violation. The error message now explains the Voice Control impact and suggests either moving the visible text to the front or removing the accessibility label entirely to let it be derived automatically. (a5b6bc6)
- **Refine value-contains-role: warning for checkbox, custom guidance messages** (53575d1)
- **Document why negative accessibilitySortPriority breaks Explore by Touch** (ee0a3e5)
- **Remove .accessibilitySortPriority(-1) from tab bar to test its role** (d6c33ec)
- **Combine ContentCard a11y focus to match CVS ActivityCardView** (f2ec5e9)
- **Enlarge ContentCard to match CVS Activity carousel cards** (c591de3)
- **Redesign ExploreByTouchBroken tab bar to match CVS app visual** (8a0f901)
- **Honor exclude_paths for explicit file arguments** (ab3c5b5)
- **Rewrite prototype to match H100HomeScreenView ZStack layout** (fe393d6)
- **Replace UIKit intercept with exact CVS bad-code pattern** (23085fc)
- **Hide entire overlay branch in accessibilityHitTest to expose scroll content** (b8ce8be)
- **Return real scroll content on Explore by Touch over tab bar** (1be757f)
- **Merge branch 'main' of https://github.com/cvs-health/ios-swiftui-accessibility-techniques** (d6886f6)
- **Update project.pbxproj** (bb93d66)
- **update rule count to 41 rules across 23 WCAG criteria in all docs** (47e3a29)
- **use WheelPickerStyle in context-change picker examples** (2d8a2fa)
- **raise video-audio-autoplay impact to serious (WCAG Level A)** (eb87649)
- **Update VideosView.swift** (0e25349)
- **updates** (a41ab72)
- **Redesign XCTestAccessibilityView bad examples with confirmed-failing patterns** (70b6ac5)
- **Set continueAfterFailure=true before audit XCTFail loop** (b8cd573)
- **Update changelog for XCTest Accessibility page** (01af820)
- **Collect all performAccessibilityAudit failures in testInformative** (20a518d)
- **Collect all performAccessibilityAudit failures instead of stopping at first** (417c09b)
- **Remove .navigationTitle from MessagesTabView; title managed by TabsGoodView** (0d265cb)
- **Update TabsGoodView to show per-tab navigation title for WCAG 2.4.2** (7571b93)
- **Refactor Alerts bad examples to use single Bad Examples heading with subheadings** (9e191e4)
- **Angle chart date labels at 45 degrees instead of 90** (66a8f38)
- **Rotate chart date labels the other direction (5 on bottom)** (44f0c55)
- **Rotate trend chart date labels vertical to prevent overlap** (7fc54eb)
- **Restore side-by-side trend chart and table layout** (d2ad759)
- **Reduce trend chart limit from 30 to 20 data points** (5b5c6c3)
- **Limit trend chart to 30 data points, stack chart above table** (071964f)

### Docs
- **docs: update report and changelog for screen-level navigationTitle detection** (8781243)
- **docs: add a11y HTML report for current findings** (c5c80d2)
- **docs: update CHANGELOG for image-missing-label component conditions 2 & 3** (233b289)
- **docs: add date to Unreleased changelog section** (cd917ed)
- **docs: update CHANGELOG for image-missing-label ancestor accessibility check** (70d02aa)
- **docs: update CHANGELOG with clarified navigationTitle suggestion wording** (dfa4194)
- **docs: update CHANGELOG for navigationTitle auto-fix placement fix** (88d1ffd)
- **docs: update CHANGELOG with toggle dual-option FIXED CODE and page/screen fix** (a2f673e)
- **docs(readme): document tap-gesture keyboard-dismiss exception and suppression syntax** (71f2288)
- **docs(changelog): document tap-gesture keyboard-dismiss false positive fix** (29f8d36)
- **docs(changelog): document HTML report fixed-code bug fix for fixed-font-size** (fa8cf6a)
- **docs(readme): document --base-path flag and HTML+JSON artifact pattern** (71917cc)
- **docs(changelog): document --base-path flag and HTML artifact in Unreleased section** (82d0fd8)
- **docs: add changelog entry for detailed PR comment violations** (c83424d)
- **docs: document detailed PR comment with violations and fix suggestions** (a67bafd)
- **docs: add GHAS requirement note to changelog** (c3210b7)
- **docs: clarify SARIF upload works on public repos without GHAS** (01c6c71)
- **docs: note that SARIF upload requires GitHub Advanced Security (GHAS)** (d95d4e8)
- **docs: add changelog entry for SARIF artifactChanges fix** (886d0c7)
- **docs(a11y-check): update color contrast rule docs for dark-mode, container bg, and numeric large text** (a6b3b18)

### Chore
- **chore: remove duplicate a11y-report.html (a11y-check-report.html is canonical)** (f601dd8)
- **chore: add 26.9 changelog entry for color-contrast-insufficient fixes** (651ad56)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/cvs-health/ios-swiftui-accessibility-techniques?utm_source=github-action)._