Overview › Accessibility (a11y)

Accessibility (a11y)

Mixed signal: some accessibilityLabel/Hint usage, but no Dynamic Type, missing traits, VoiceOver gaps.

5 findings in this category · iOS
50
SCORE

Summary

Mixed signal — some accessibilityLabel/accessibilityHint usage but inconsistent, hardcoded font sizes preventing Dynamic Type, missing traits on buttons, VoiceOver focus order issues in onboarding. WCAG 2.2 conformance is poor — same pattern as Android.

WCAG 2.2 conformance

CriterionStatusNote
1.1.1 Non-text contentPARTIALSome accessibilityLabel; UIImageView often missing
1.3.1 Info and relationshipsPARTIALSome semantic markup; SwiftUI semantic groups inconsistent
1.4.3 ContrastFAILPallet tokens not contrast-validated
1.4.4 Resize textFAILHardcoded UIFont sizes; no Dynamic Type
2.4.7 Focus visiblePARTIALVoiceOver focus order needs audit
2.5.5 Target sizeFAILNo 44pt minimum target enforcement
4.1.2 Name, role, valuePARTIALaccessibilityTraits often missing on custom controls

Findings

CRITICAL

Dynamic Type missing — 1.4.4 FAIL

Hardcoded UIFont.systemFont(ofSize: 14) patterns across onboarding, location filters, and other screens. Users with Larger Text settings see clipped or overlapping content.
Recommendation: Use UIFont.preferredFont(forTextStyle: .body) in UIKit; .font(.body) in SwiftUI. Add a snapshot test at UIContentSizeCategory.accessibilityExtraExtraExtraLarge.
HIGH

Accessibility traits missing on custom controls

Custom buttons made with tap gestures don't inherit .button trait; VoiceOver users don't hear "button" announcement.
Recommendation: Set accessibilityTraits = .button on custom tappable views; SwiftUI .accessibilityAddTraits(.isButton).
HIGH

Touch target size — 2.5.5 FAIL

No 44pt minimum enforcement. Apple HIG mandates 44×44pt minimum for tap targets.
Recommendation: Custom modifier .minimumTapTarget(); UI test that fails on smaller targets.
MEDIUM

VoiceOver focus order in onboarding

Multi-element screens may have non-intuitive focus order.
Recommendation: Use Accessibility Inspector to walk every screen; set accessibilityElements explicitly where order matters.

Findings in this category

5 shown
Costco iOS · Code Review Report · Generated 2026-05-07 · 88 machine-curated findings