Building iOS, Android & Flutter apps for clients in the USA · UK · UAE · Worldwide +92 333 9799025WhatsAppjunaidtariqlhrpk@gmail.com
Design

Mobile App Accessibility Guide

What WCAG 2.2 AA means on iOS and Android, where the EAA and ADA apply, the target and contrast numbers to use, and a real-device testing checklist.

Mobile app accessibility is the work of making sure people can use your app with a screen reader, with large text, with one hand, with a switch or voice control, or without perfect colour vision. On a phone that work sits in a few concrete places: labels and roles on every control, layouts that reflow when text grows, touch targets large enough to hit, contrast you can read outdoors, and gestures that have a simpler alternative.

This guide covers which WCAG 2.2 criteria matter on mobile, where the European Accessibility Act and the ADA come in, the platform numbers to design to, and how to test on real devices. If you want a team to design it in from the first wireframe, our mobile app UI UX design services treat WCAG 2.2 AA as the baseline. For general design principles, our mobile app UX best practices guide covers the rest.

Accessibility is far cheaper to design in than to retrofit. A missing label is a one-line fix; a custom control that a screen reader cannot operate, repeated across forty screens, is a rebuild.

Who mobile app accessibility is for, and who checks it

Most teams picture a blind user with VoiceOver. That user matters, but the larger groups are quieter: people who set the system text size two steps up, older users with reduced dexterity, people with colour vision deficiency, and anyone using the phone one-handed on a bus.

The assistive technologies to plan for on mobile:

  • Screen readers: VoiceOver on iOS and TalkBack on Android. Users move between elements by swiping.
  • Text size: Dynamic Type on iOS, font size and display size on Android.
  • Switch and voice control: Switch Control and Voice Control on iOS, Switch Access and Voice Access on Android, which rely on the same labels and focus order.
  • Display and media: Reduce Motion, increased contrast, bold text, dark mode, plus captions for any video.

Then there are the people who check: enterprise and public-sector buyers ask for an audit during procurement, EU regulators now have a law to point to, and Apple lists accessibility among the things its editors consider, as covered in our post on getting your app featured on the App Store.

WCAG is a web standard, but audits, tenders and regulators use it for apps too. WCAG 2.2 became a W3C Recommendation on 5 October 2023, adding nine success criteria to WCAG 2.1. Level AA is the practical target for almost every commercial app.

European Accessibility Act

The EAA applies from 28 June 2025 to covered products and services placed on the market after that date. Covered services include e-commerce, consumer banking, telecoms, transport (including websites, apps and e-ticketing) and e-books. Dutch government guidance counts marketplaces and hotel or meal booking platforms as e-commerce. If your app sells to EU consumers in one of those sectors, plan as if it applies.

Article 4(5) of Directive (EU) 2019/882 says microenterprises providing services are exempt from the service accessibility requirements. Luxembourg’s official EAA guidance defines a microenterprise as fewer than 10 employees with annual turnover or balance-sheet total of no more than €2 million. Note who the exemption belongs to: the business providing the service. A bank or retailer is not exempt because the agency building its app is small.

United States

For private businesses, DOJ guidance from March 2022 says the ADA’s effective-communication requirements apply to online goods and services, without mandating a specific technical standard. For state and local governments, the ADA Title II rule requires WCAG 2.1 AA for web content and mobile apps, including apps provided through contractors. An interim final rule effective 20 April 2026 moved the compliance dates to 26 April 2027 for entities with a population of 50,000 or more and 26 April 2028 for smaller ones. The technical standard did not change.

Not legal advice

This section summarises public sources so you can ask better questions. Whether the EAA, the ADA or a national law applies to your app, and whether an exemption covers you, is a question for your lawyer. We design and test to WCAG 2.2 AA either way, and agree a different version with you if a contract or tender names one.

WCAG 2.2’s new criteria, translated for mobile apps

These are the nine criteria WCAG 2.2 added, with the level of each, according to the W3C summary of what is new in WCAG 2.2. Aim for every A and AA item; treat AAA items as good practice.

Criterion Level What it means in an app Typical fix
2.4.11 Focus Not Obscured (Minimum) AA A focused element must not be fully hidden by sticky headers, bottom bars, sheets or the on-screen keyboard Scroll focused fields above the keyboard; test with an external keyboard and switch control
2.4.12 Focus Not Obscured (Enhanced), 2.4.13 Focus Appearance AAA No part of the focused element is hidden; the focus indicator is strong and visible Good practice, especially for tablet apps used with keyboards
2.5.7 Dragging Movements AA Anything done by dragging also works with a single tap or click Move-up and move-down actions for reordering, steppers next to sliders, zoom buttons on maps
2.5.8 Target Size (Minimum) AA Targets at least 24×24 CSS pixels, or spaced so they do not crowd each other Use the platform sizes below, which exceed it
3.2.6 Consistent Help A Help options sit in the same relative place across screens One fixed home for chat, help and contact, such as the account tab
3.3.7 Redundant Entry A Do not ask for the same information twice in one process Prefill billing from shipping; carry data between steps
3.3.8 Accessible Authentication (Minimum) AA No memory or transcription test to log in without an alternative Allow paste and password managers, autofill one-time codes, offer passkeys
3.3.9 Accessible Authentication (Enhanced) AAA Removes the exceptions for recognising objects or personal content Avoid image-recognition CAPTCHAs entirely

WCAG 2.2 also removed 4.1.1 Parsing as obsolete.

Touch targets and contrast: the numbers to design to

Three different numbers get quoted for touch targets. They come from different sources and do not conflict.

  • WCAG 2.2 (2.5.8, AA): pointer targets of at least 24×24 CSS pixels, with exceptions for spacing, inline text links, equivalent controls, user-agent defaults and essential cases. This is the audit floor.
  • Android: Google’s Android accessibility guidance recommends a touch target of at least 48dp × 48dp for each interactive element, and says larger is better. Material components already enforce it.
  • iOS: Apple’s guidelines use 44×44 pt as the default tap size on iPhone.

Design to the platform numbers and the WCAG minimum takes care of itself. Remember that the touch target and the visible icon are different things: a small close icon is fine if its tappable frame is 44pt. In Figma, draw the hit area as its own transparent layer so developers can see it; in code, add padding and a contentShape in SwiftUI, or a 48dp minimum size with sizeIn in Jetpack Compose.

For text, the same Google guidance asks for a contrast ratio of at least 4.5:1 for text smaller than 18sp (or bold text smaller than 14sp) and 3:1 for other text. Check it in design and again on the device: text over photos, pale disabled states and dark-mode colours often break it after handoff. Never use colour alone to show an error, a selected tab or a required field. Add an icon, a label or a change in weight.

Screen readers: what VoiceOver and TalkBack need from your code

A screen reader announces three things for each element: its name (the label), what it is (a role or trait such as button, heading or switch) and its state (selected, disabled, 40%). Native controls provide all three for free. Custom controls provide none until a developer adds them.

The problems that come up most often in mobile audits:

  • Icon-only buttons announced as “button” or by an image file name.
  • Cards where every text fragment is a separate swipe stop.
  • Custom toggles with no state, so the user cannot tell on from off.
  • Toasts and inline errors that appear on screen but are never announced.
  • Focus that jumps to the top when a sheet closes, instead of returning to the button that opened it.

Accessibility basics by framework

Whatever the stack, the habit is the same: every custom component gets a label, a role and a state before it is merged. These are the usual tools in each framework.

Task SwiftUI Jetpack Compose Flutter React Native
Name an icon button accessibilityLabel modifier contentDescription Semantics label accessibilityLabel prop
Set the role accessibilityAddTraits (.isButton, .isHeader) semantics: role, heading() Semantics button / header flags accessibilityRole prop
Read a card as one item accessibilityElement(children: .combine) semantics(mergeDescendants = true) MergeSemantics widget accessible prop on the container
Hide decoration accessibilityHidden(true) contentDescription = null ExcludeSemantics widget accessibilityElementsHidden (iOS), importantForAccessibility (Android)
Announce a change UIAccessibility.post(notification: .announcement) liveRegion semantics Semantics liveRegion flag AccessibilityInfo.announceForAccessibility

Large text and layouts that survive it

Larger text is the setting many apps handle worst: truncated buttons, labels clipped by fixed-height containers, tab bars where words collide.

  • Use the platform text styles (SwiftUI’s body, headline and the rest; sp units on Android) instead of fixed point sizes.
  • Never give fixed heights to containers that hold text.
  • At the largest sizes, switch horizontal layouts to vertical: label above value, buttons stacked.
  • Do not switch off font scaling in Flutter or React Native to protect a layout. Cap a single oversized element if you must, never the whole app.

Designers can make this cheap by drawing the most text-heavy screens at the largest size during design, so reflow rules are decided before code. Our post on wireframes, mockups and prototypes shows where these annotations belong.

Want an accessibility review of your designs or build?

Send us your Figma file or a TestFlight or Play internal testing build. We reply within one business day with the WCAG 2.2 AA issues we would test first and how we would fix them.

Gestures and login

Every gesture needs a simple alternative

Swipe-to-delete, drag-to-reorder and long-press menus are fine as shortcuts, not as the only way to do something. Under WCAG 2.2’s Dragging Movements criterion, anything done by dragging must also work with a single pointer, so add a visible delete button or an edit mode, move-up and move-down actions, and zoom buttons on maps. VoiceOver and TalkBack custom actions can also offer Delete or Archive on a list item without any swipe.

Login without memory tests

In our projects, Accessible Authentication (Minimum) has the biggest product impact of the new AA criteria. Blocking paste into password fields, splitting a one-time code into six boxes that defeat autofill, and image puzzles all work against it. Support password managers and paste, mark fields so the system can autofill them (the one-time code content type on iOS, autofill hints on Android), and offer passkeys or Sign in with Apple and Google where they suit your users.

Mobile app accessibility testing checklist for real devices

Run this on at least one iPhone and one Android phone before each major release. Our mobile app testing services include these passes on physical iPhones and Android phones.

  • Run Xcode’s Accessibility Inspector audit and Google’s Accessibility Scanner app on every main screen, and fix every missing label and small target
  • Add automated accessibility checks to UI tests: the XCTest accessibility audit on iOS and Espresso’s AccessibilityChecks on Android
  • Turn on VoiceOver and complete the core task (sign up, search, pay) without looking at the screen
  • Repeat with TalkBack on Android, including the system back gesture
  • Swipe through every element: labels make sense out of context, cards read as one item, decorative images are skipped
  • Confirm that errors, toasts and loading changes are announced
  • Set text to the largest accessibility size and check every screen for clipping, overlap and truncation
  • Turn on Reduce Motion or Remove animations and confirm transitions still make sense
  • Check contrast in light and dark mode, including disabled, error and placeholder text
  • Log in with a password manager and with a pasted one-time code
  • Log each issue against a WCAG 2.2 criterion with a severity

Building mobile app accessibility into delivery

Treat accessibility as part of each two-week sprint: WCAG 2.2 AA in the definition of done, labels and roles built once into shared components, and the checklist above on every release candidate. If the app is already live, do not start with a full redesign. Audit sign-up, the core task, payment and account settings first, and fix labels, roles and announcements in shared components, which clears issues across many screens at once.

Where the audit shows that custom components are the root cause, replacing them with styled native controls is often cheaper than patching each one. That is the point where an accessibility fix becomes a mobile app redesign of specific flows. For EU-facing products, our page on app development outsourcing Germany covers how EAA questions are settled in discovery.

Mobile app accessibility FAQs

What WCAG level should a mobile app meet?

WCAG 2.2 Level AA is the sensible target for commercial apps. It is the current version of the standard, and AA is the level audits and tenders usually ask for. Treat AAA criteria as good practice. If a contract or public-sector rule names a different version, such as WCAG 2.1 AA under the ADA Title II rule, confirm it at the start of the project.

Is a small company exempt from the European Accessibility Act?

Article 4(5) of the EAA exempts microenterprises providing services from the service accessibility requirements. Luxembourg’s official guidance defines a microenterprise as fewer than 10 employees with turnover or balance sheet of no more than €2 million. The exemption covers the business providing the service, so a large client is not exempt because its developer is small. Confirm your position with a lawyer.

What touch target size should I design for?

Use the platform sizes: 44×44 pt is Apple’s default tap size on iPhone, and Google recommends at least 48dp × 48dp on Android. Both exceed the WCAG 2.2 AA minimum of 24×24 CSS pixels. The visible icon can be smaller, as long as the tappable area is full size.

Can automated tools make my app accessible?

No, but they help. Accessibility Inspector, Accessibility Scanner and the audit APIs in XCTest and Espresso catch missing labels, small targets and some contrast problems quickly, and they belong in CI. They cannot judge whether labels make sense, whether focus order is logical or whether a flow works with a screen reader. That needs a person testing on real devices with VoiceOver and TalkBack.

Are Flutter and React Native apps less accessible than native apps?

Not inherently. Both frameworks pass labels, roles and states to VoiceOver and TalkBack through their own APIs, such as Flutter’s Semantics widgets and React Native’s accessibility props. Problems appear when teams build custom controls without that metadata or switch off font scaling to protect layouts. The same checklist and real-device testing apply whichever framework you choose.

Make accessibility part of the build

Our mobile app UI UX design services design to WCAG 2.2 AA from the first wireframe, and our QA team tests with VoiceOver and TalkBack on real devices before every release. Tell us about your app and we reply within one business day with a scoped plan.

Leave a Reply

Your email address will not be published. Required fields are marked *

WhatsApp Call