Accessibility Compliance
D-Sports Engage supports all 9 Apple Accessibility Nutrition Label categories for iPhone and iPad. This document details the implementation status and technical approach for each feature.Feature Support Matrix
Architecture
AccessibilityProvider
The central context (context/accessibility-context.tsx) manages all accessibility state:
textScale=Math.max(inAppToggle ? 1.25 : 1.0, systemFontScale)reduceMotion=inAppToggle || isSystemReduceMotionhighContrast=inAppToggle || isSystemBoldText
AccessibleText Component
components/ui/AccessibleText.tsx wraps <Text> with:
- Font size scaling via
textScalefrom context - Font weight bumping when
highContrastis active maxFontSizeMultiplier={2}to prevent layout breakageallowFontScaling={true}for native Dynamic Type
ReducedMotionConfig
Added toapp/_layout.tsx at the root level:
react-native-reanimated to skip animations when the iOS “Reduce Motion” setting is enabled.
High Contrast Colors
theme/colors.ts exports darkHighContrast and lightHighContrast variants with boosted alpha values:
Use
getColors(isDark, highContrast) to get theme-aware colors with optional contrast boost.
Files Modified
Phase 1: VoiceOver & Voice Control
app/(tabs)/_layout.tsx— Tab bar:accessibilityRole="tab", labels, hints, statesapp/(tabs)/locker-room.tsx— Header buttons, tab navigation, notification bell, avatarapp/(tabs)/leaderboard.tsx— TeamCard, search, filters, modals, league pillsapp/(tabs)/shop.tsx— Cart button, search, rarity filters, collectible cards, featured packsapp/(tabs)/wallet.tsx— Balance card, address copy, sub-tabs, filter chips, carousel cards, all modalsapp/settings/index.tsx— SettingsRow, back button, logout, version linkcomponents/wallet/TokenRow.tsx— Row button, favorite togglecomponents/wallet/HoldingRow.tsx— Accessible group with descriptive labelcomponents/shop/CollectibleCard.tsx— Card button, favorite toggle, add-to-cart
Phase 2: Larger Text
context/accessibility-context.tsx— System font scale detection, combined text scalecomponents/ui/AccessibleText.tsx—maxFontSizeMultiplier, capped scaling
Phase 3: Sufficient Contrast
theme/colors.ts—darkHighContrast,lightHighContrastvariants, updatedgetColors()
Phase 4: Reduced Motion
app/_layout.tsx—ReducedMotionConfigwithReduceMotion.Systemcontext/accessibility-context.tsx— System reduce motion detection
Phase 5: Differentiate Without Color
components/wallet/TokenRow.tsx— ▲/▼ arrows on price changescomponents/wallet/HoldingRow.tsx— ▲/▼ arrows on price changes
Phase 6: Info Screens
app/settings/accessibility-info.tsx— In-app feature support matrix screenconstants/accessibility-features-data.ts— Feature data constantd-sports-site/app/accessibility/page.tsx— Marketing site paged-sports-site/components/footer.tsx— Footer linkdocs/repositories/d-sports-engage-native/compliance/accessibility.mdx— This page
App Store Connect
After submitting the next app update:- Go to App Store Connect → App → General → App Information
- Under Accessibility, check all supported features for iPhone and iPad
- Set Accessibility URL to
https://d-sports.org/accessibility - Submit with the update
