Testing Tools

Auditing a Native Mobile App: The Two Documents You Need

WCAG is written for web pages, and an app has none. WCAG-EM 2.0 now gives you the process and WCAG2ICT gives you the criteria — here is how they fit together on a real app audit.

Khushwant Parihar
Khushwant Parihar
10 min read

Auditing a native mobile app against WCAG has always involved a quiet act of improvisation. The standard is written about web pages, and an app does not have any. Every success criterion referring to a "web page," every instruction to enumerate URIs, every assumption that a browser sits between the user and the interface — none of it lands cleanly on an iOS or Android build.

Two W3C documents now close that gap from opposite ends. WCAG-EM 2.0, published on 23 July 2026, supplies the evaluation process and — for the first time — a vocabulary that covers apps. WCAG2ICT supplies the interpretation of the criteria themselves for non-web software. Neither is sufficient alone. Together they make an app audit as defensible as a website audit.

What each document does

  • WCAG-EM 2.0 — the process. Its five steps tell you how to scope, explore, sample, evaluate and report. Version 2.0 replaced "website" with "digital product" and "web page" with "view," which is what makes the method applicable to an app at all.
  • WCAG2ICT — the criteria. Formally "Guidance on Applying WCAG 2 to Non-Web Information and Communications Technologies," a W3C Group Note published 11 December 2025 covering WCAG 2.0, 2.1 and 2.2. It explains how to read WCAG’s web-centric wording for non-web documents and software, including mobile apps.

The regulatory weight sits with the second one. WCAG2ICT is the guidance U.S. Department of Justice rulemaking directs implementers toward for mobile app accessibility, which means it is no longer merely a convenience for auditors — it is the reference a public entity is expected to have used.

Both are Group Notes, so neither is a normative standard. They are the agreed professional interpretation, which is precisely what you want to be able to cite when a finding is disputed.

Step 1: Scoping an app is stricter than scoping a site

A website’s scope can be described with a URL pattern. An app has no equivalent, so the scope statement has to pin down the build itself — and it goes stale far faster.

  1. The app, its platform, and the exact version and build number evaluated.
  2. The operating system versions in scope — an app can behave differently on iOS 18 and iOS 19.
  3. The device classes covered: phone and tablet, and whether foldables or landscape orientation are included.
  4. Account states — logged out, free tier, paid tier, admin — since large parts of an app are unreachable without the right account.
  5. Whether embedded web views and third-party SDKs are in or out of scope, stated explicitly.

The accessibility support baseline in Step 1.3 needs the same specificity. For an app that means naming the screen readers and their versions — VoiceOver on a stated iOS release, TalkBack on a stated Android release — plus any platform features you commit to supporting, such as Dynamic Type, Switch Control, or Voice Control. A baseline that just says "current mobile screen readers" is not testable and will not survive scrutiny.

Step 2: Exploring an app without a sitemap

On a website you can crawl. On an app you cannot, so exploration is manual and the risk is systematically missing views that live behind a state you never entered. Work from the navigation graph rather than a page list:

  • Common views: tab bar, navigation drawer, global search, modal sheets, toasts and snackbars — the components that recur everywhere.
  • Essential functionality: onboarding, sign-in including biometrics, purchase, the core task the app exists for, and account deletion.
  • Variety of sample types: lists, forms, maps, media players, charts, camera or scanner screens, in-app documents such as PDF receipts.
  • Technologies relied upon: native SDK components, custom-drawn views, cross-platform frameworks such as React Native or Flutter, and any embedded web views.
  • Other relevant views: permission prompts, error and offline states, the accessibility settings screen if one exists, and legal or support screens.

That last group deserves attention. Permission dialogs, empty states and error states are where app audits most often find serious problems, precisely because they are hard to reach deliberately and get skipped in everyday testing.

Flag the custom-drawn and cross-platform items as you go. A native control inherits platform accessibility largely for free; a custom-drawn view or a poorly configured cross-platform component inherits nothing, and those are the views your sample most needs to include.

Step 3: Sampling by state, not by screen

The sampling model carries over unchanged — a structured sample, a random sample of 10% of it, and every view in a complete process. What changes is the unit. A single app screen can be five materially different samples: empty, loading, populated, error, and offline. Treating "the orders screen" as one sample will miss the states where the failures actually are.

Complete processes matter even more on mobile than on the web, because apps front-load mandatory flows. If onboarding is inaccessible, nothing behind it is reachable, and no amount of well-built home screen compensates. Audit onboarding, sign-in and purchase end to end, always.

The random 10% is harder to draw without a URL list. A workable approach is to enumerate the views you catalogued in Step 2, number them, and select randomly from that list — then treat any view the random draw surfaces that your structured sample missed as a signal that the exploration was incomplete.

Step 4: The criteria that behave differently on mobile

Most success criteria transfer with only vocabulary changes. A handful behave so differently on a touch device that a desktop-trained auditor will under-test them:

  • 2.5.8 Target Size (Minimum): the classic mobile failure. Small icon buttons, tightly packed list actions and close buttons in modals routinely fall under 24 by 24 CSS pixels.
  • 2.5.1 Pointer Gestures: swipe-to-delete, pinch-to-zoom, drag-to-reorder and pull-to-refresh all need a single-pointer alternative. Screen readers also intercept swipes, so a gesture-only action can become genuinely unreachable.
  • 1.3.4 Orientation: locking to portrait fails users with a device fixed to a wheelchair mount, unless orientation is essential to the function.
  • Dynamic Type and text scaling: raise the system font size to its maximum and watch what clips, truncates or overlaps. Layouts built at default size fail here constantly.
  • Focus and reading order: the accessibility focus order is set by the view hierarchy, and custom layouts often produce an order that makes no sense read aloud.

Test with the real screen readers on real hardware rather than a simulator’s approximation — gesture handling and focus behaviour are exactly what simulators reproduce least faithfully.

  • Start on Android with the TalkBack testing guide — it covers explore-by-touch, the focus-versus-activation split, and the reading-controls menu.
  • Then repeat on iOS with the VoiceOver testing guide, including the Rotor and the "interacting" model.

Where an app embeds a web view, the content inside it is web content and WCAG applies to it directly — no WCAG2ICT translation needed. Note the boundary in your report, because responsibility for that content often sits with a different team.

Step 5: Reporting an app evaluation

The reporting requirements are the same, with two additions worth making habitual. Record the build number and OS versions in the statement itself, not just the covering email — an app evaluation is a snapshot of a build, and a report that does not say which build is unusable six weeks later. And state the baseline devices and screen reader versions alongside the findings, since "works with VoiceOver" means little without them.

The limits on what you can claim are unchanged too. A sampled app evaluation supports an evaluation statement about the samples tested, not a conformance claim about the whole app — and app stores do not certify accessibility any more than the W3C does.

Sources

Khushwant Parihar
Written by
Khushwant Parihar

Khushwant Parihar is the founder of Accessibility.build and an accessibility specialist, consultant, and developer with more than four years of professional accessibility and software testing experience. His work covers WCAG auditing, keyboard and screen-reader testing with NVDA, JAWS, and VoiceOver, accessible frontend implementation, remediation workflows, and team enablement.

Found this useful? Share it.

Essential Accessibility Resources

Comprehensive tools, checklists, and guides to help you create inclusive digital experiences

Top Pick

Mobile Accessibility Guide

Touch target sizing, pointer gestures and cancellation, orientation and text scaling, native iOS accessibility (UIKit and SwiftUI), native Android accessibility (View and Jetpack Compose), mobile web, and VoiceOver and TalkBack testing, mapped to WCAG 2.2 AA and WCAG2ICT
mobile wcag
wcag2ict
wcag mobile
View guide
Top Pick

How to Audit Website Accessibility

Step-by-step accessibility audit methodology
how to audit
wcag audit
audit process
View guide

AI Accessibility Audit Helper

Expert WCAG analysis and accessibility guidance with AI
audit
wcag
testing
View tool

Other posts filed under Testing Tools.