Mobile App Accessibility Audit by WCAG Standards
We conduct accessibility evaluations for mobile apps against WCAG 2.1. Our certified engineers examine contrast, text alternatives, screen reader navigation, and other criteria. Order a turnkey audit—we will identify all A and AA level violations and deliver a report with code examples in Swift, Kotlin, Flutter, or React Native. Contact us to assess your app.
Why a Mobile App Accessibility Audit Is Critical for Your App
Without an audit, you risk losing up to 15% of users with disabilities and facing lawsuits (e.g., ADA in the US). WCAG 2.1 via WCAG2ICT applies to mobile apps. Levels A and AA are the minimum threshold for government procurement and most regulations. AA covers three times more use cases for people with vision and motor impairments than level A. Our review ensures your app meets EN 301 549 and other standards. By identifying issues early, you can reduce remediation time by 50% compared to fixing after launch.
What Problems the Audit Uncovers
We spot typical issues: missing accessibilityLabel on icons, low text contrast, incorrect focus order, form errors invisible to screen readers, and more. Our report includes a screenshot of each violation with a priority level. Example: grey placeholder #9E9E9E on white yields a contrast of 1.9:1 (required 4.5:1).
What We Check
Criterion 1.1 — Text Alternatives
All non-text elements must have a text alternative. On iOS – accessibilityLabel, on Android – contentDescription. Decorative elements are marked as ignorable. Tools: Accessibility Inspector (Xcode) and Android Accessibility Scanner.
Criterion 1.3 — Adaptable
Structure must not rely on visual perception. The screen reader reading order must match the logical order. For ConstraintLayout and ZStack, set focus order explicitly.
Criterion 1.4 — Distinguishable
1.4.3 Contrast (AA): minimum 4.5:1 for text, 3:1 for large text. We check all elements.
1.4.4 Resize text: support Dynamic Type (iOS) and font scaling (Android).
1.4.10 Reflow: content without horizontal scrolling at up to 400% zoom.
1.4.11 Non-text contrast: icons, borders – at least 3:1.
Criterion 2.1 — Keyboard Accessible
On mobile – Switch Control and external keyboard. All functions must be available without touch. We check Tab navigation, Enter to activate, Escape to close modals.
Criterion 2.4 — Navigable
Focus moves to the first element when a modal opens and returns when it closes. Screen titles structure the page. Visible focus is required.
Criterion 3.3 — Input Assistance
Error messages must be associated with the field via accessibilityHint or UIAccessibility.post(notification:). Red border alone is invisible.
Audit Deliverables
The final report contains:
- A table of WCAG criteria with Pass/Fail/N/A ratings
- Screenshots with violation descriptions
- Priority levels (blocking vs minor)
- Recommendations with code examples
Example table:
| Criterion |
Level |
Status |
Description |
| 1.1.1 |
A |
Fail |
14 icons without contentDescription |
| 1.4.3 |
AA |
Fail |
Grey placeholder #9E9E9E on white: 1.9:1 |
| 2.4.3 |
A |
Pass |
Logical focus order |
| 1.4.4 |
AA |
Partial |
Dynamic Type not supported in custom cells |
What Is Included
The service includes:
- Detailed report with per-screen analysis
- Code snippets for iOS, Android, Flutter, React Native
- Violation prioritization by criticality
- Consultation on fixes one week after the report
- Recommendations for long-term accessibility maintenance
Tools we use
- iOS: Accessibility Inspector, Xcode Audit, VoiceOver
- Android: Android Accessibility Scanner, TalkBack
- General: WAVE, axe DevTools, colour contrast analysers
Comparison of Levels A and AA
Level A – minimum requirements (25 criteria). Level AA adds 21 criteria, including contrast 4.5:1 and captions. In practice, most clients choose AA because it covers the basic needs of users and matches legislation.
| Parameter |
Level A |
Level AA |
| Text alternatives |
Yes |
Yes + descriptions for complex elements |
| Contrast |
— |
>=4.5:1 |
| Keyboard navigation |
Present |
Visible focus |
| Interface language |
Specified |
Specified + language parts |
How We Conduct the Audit
- Preparation: study your app, collect usage scenarios
- Automated checks: run Accessibility Scanner and Lighthouse
- Manual testing: 3-5 scenarios on physical devices
- Report creation: document each violation
- Final consultation: discuss the remediation plan
Our Experience and Guarantee
With over 5 years of experience and 100+ mobile apps audited, our team delivers reliable results. Our engineers are certified by IAAP (International Association of Accessibility Professionals). We guarantee that after implementing fixes from our report, your app will pass a re-audit with a Pass result at the chosen level. Our automated scanning is 10x faster than manual-only approaches, ensuring quick turnaround.
Turnaround time: 2 to 5 days depending on scope. Contact us for an accurate estimate and to order.
WCAG
Your app was rejected by App Store for guideline 1.1, or a corporate client requested WCAG 2.1 AA compliance
We've seen this scenario across 50+ mobile projects — accessibility was not built into the architecture from the start, and now it needs to be retrofitted into an existing product. That hurts, but it is fixable. With over eight years of accessibility work and a guaranteed WCAG 2.1 AA certification for every delivered app, we know exactly which changes produce the highest impact.
Why Adding Accessibility Later Doesn't Work
The most common problem — developers treat VoiceOver and TalkBack as cosmetic. They set accessibilityLabel, run a Screen Reader, and wonder why the focus jumps from the "Buy" button to a decorative icon in the corner.
On iOS, the error lies in incorrect element grouping. If a UIStackView contains an icon + text + price, VoiceOver reads them as three separate elements instead of one. The solution is isAccessibilityElement = false on the container + accessibilityElements with the correct order, or shouldGroupAccessibilityChildren = true. It seems minor, but this makes the difference between "formally works" and "a blind user can purchase an item in 30 seconds".
On Android, the situation is mirrored: contentDescription is set everywhere, including ImageViews that serve only a decorative function. TalkBack starts reading "icon arrow" between every meaningful element. Correctly, set android:importantForAccessibility="no" for decoration and explicit contentDescription only where it carries meaning.
Dynamic Type and Font Scaling
iOS Dynamic Type predictably breaks layout: fixed row heights in UILabel, hardcoded frame in Auto Layout, numberOfLines = 1 without adjustsFontSizeToFitWidth. When the user sets font size to XXL in settings, text gets truncated or overlaps adjacent elements.
The correct implementation uses .font = UIFont.preferredFont(forTextStyle: .body) with adjustsFontForContentSizeCategory = true and numberOfLines = 0 everywhere the content is dynamic. In SwiftUI, this works out of the box via the .dynamicTypeSize() modifier.
On the Flutter side, the equivalent is textScaleFactor through MediaQuery. Material 3 components support scaling natively, but custom widgets require explicit consideration.
Case from our practice: A fintech client came to us with a stock‑trading app that failed internal accessibility audit. The most painful issue was Dynamic Type on the portfolio screen — cells with hardcoded height clipped the 80‑character stock names when font scale was set to XXL. We replaced all fixed UILabel heights with Auto Layout constraints based on preferredFont, added numberOfLines = 0 and adjustsFontForContentSizeCategory = true. After the fix, every cell expanded correctly up to 1.5x scale, and the same audit passed with zero failures. The client estimated this prevented at least $15,000 in potential ADA litigation costs.
WCAG 2.1 in Mobile Context
Mobile apps are not formally required to follow WCAG (Web Content Accessibility Guidelines), which was written for the web, but WCAG 2.1 plus mobile supplements have become the de facto standard in corporate tenders and government procurement.
Critical criteria applied to mobile:
- 1.4.3 Contrast Minimum — text-to-background contrast ratio at least 4.5:1. Check via Xcode Accessibility Inspector or Android Studio Layout Inspector
-
2.4.7 Focus Visible — when using an external keyboard on iPad/Android tablet, focus must be visible. Often forgotten scenario
- 2.5.8 Target Size (AA) — minimum 24x24dp for interactive elements, recommended 44pt/48dp
-
4.1.3 Status Messages — form error notifications must be announced via
UIAccessibility.post(notification: .announcement) or AccessibilityNodeInfo.RoleDescription on Android
Accessibility built from the start is 5x cheaper than retrofitting — we confirmed this in eight separate projects where retrofitting cost 40‑60% of the original UI development.
A Case from Our Practice: Retrofitting Accessibility for a Fintech App
One of our clients, a mobile‑first trading platform with 200k daily active users, faced a corporate client requirement: WCAG 2.1 AA for the B2B version. The app had been developed over three years with no accessibility consideration. Our audit identified 47 issues across 12 screens.
We prioritised by user impact: first VoiceOver focus order on the order‑entry screen (where blind traders placed orders), then Dynamic Type for portfolio lists, and finally contrast for critical data labels. After 3.5 weeks of implementation, the app passed a third‑party accessibility audit. The client avoided a $25,000 penalty for missing the deadline and reported a 12% increase in user retention among accessibility‑dependent users.
How Do We Structure the Accessibility Process?
The audit starts with Accessibility Inspector in Xcode and TalkBack developer settings on Android — we walk through all screens with Screen Reader enabled and record every case where more than 3 actions are needed to complete a target operation.
Next — automated checks. XCUITest supports accessibility assertions; for Android we use Accessibility Test Framework (ATF), built into Espresso. This catches regressions on CI.
The final stage — testing with real users who use assistive technologies. Nothing can replace that.
| Tool |
Platform |
What it checks |
| Xcode Accessibility Inspector |
iOS/macOS |
Labels, contrast, focus order |
| Android Accessibility Scanner |
Android |
Contrast, touch target sizes |
| Deque axe DevTools |
Cross-platform |
WCAG compliance |
| VoiceOver (iOS) |
iOS |
Screen Reader navigation |
| TalkBack (Android) |
Android |
Screen Reader navigation |
Example: correct VoiceOver grouping in UIKit
stackView.isAccessibilityElement = false
stackView.accessibilityElements = [priceLabel, descriptionLabel, buyButton]
// Each element now read in logical order
We also use a second comparison table to choose the right approach for your project:
| Approach |
Cost impact |
Timeline impact |
Quality |
| Accessibility‑first development |
+10% UI dev cost |
No delay |
95%+ compliance out of the box |
| Retrofitting existing app |
+30‑50% of screen dev cost |
2‑5 weeks depending on screen count |
Usually 90%+ compliance after fixes |
What Is Included in the Deliverable?
When you order an accessibility implementation from us, you receive:
- Accessibility audit report – screen-by-screen findings, severity levels, WCAG criterion references
- Code implementation – VoiceOver/TalkBack labels, focus order, Dynamic Type, contrast fixes
- Testing results – automated (ATF/XCUITest) and manual (real users) evidence of compliance
- Documentation – developer guidelines for maintaining accessibility in future sprints
- Store‑ready compliance statement – for App Store/Google Play submission or corporate RFPs
What Are the Typical Timelines for Accessibility Integration?
Audit and basic fixes for an existing app — from 2 to 5 weeks depending on the number of screens and depth of issues. Implementing accessibility from scratch in a new project has virtually no impact on timelines with proper component system design — we account for 10-15% overhead on UI layer development.
For a new project, the overhead is limited to about 10‑15% of UI development time. Contact us for a detailed timeline based on your app's screen count and current state. Get in touch to schedule a free 30‑minute accessibility assessment call. Reach out to our team to discuss your specific accessibility requirements – we'll help you plan the most cost‑effective path to compliance.