Independent mobile app audits · Flutter · iOS & Android
Most mobile accessibility reports hand you a screenshot and a paragraph. This one hands you a file, a line number, and the number of screens the same line breaks. Written for the developer who has to fix it, in a document your lawyer can read.
This button is 17×27, below the Android minimum of 48×48, so it is hard to hit for anyone with limited dexterity.
43 occurrences across 6 screens — one line to change
Specimen
Rather than describe the output, here is a complete one. We audited Wonderous, the open-source app Flutter is showcased with — a careful, well-built application by people who know the framework.
| Requirement | What it asks | Defects |
|---|---|---|
WCAG 1.4.3 | Contrast (Minimum) | 17 |
WCAG 2.5.5 | Target Size | 5 |
WCAG 4.1.2 | Name, Role, Value | 3 |
WCAG 1.4.4 | Resize Text | 2 |
WCAG 1.3.2 | Meaningful Sequence | 1 |
WCAG 1.4.11 | Non-text Contrast | 1 |
WCAG 2.4.7 | Focus Visible | none found |
Twenty-nine places in the source, a hundred and fifty-three occurrences. Every one carries a file and a line, so the fix list is a work queue rather than an investigation.
Prices
No discovery call before a number. Prices are per audit, not per hour, and the turnaround is what you are quoted, not what we hope for.
Everything that gets an upload refused or an app hidden: privacy manifests, required-reason APIs, SDK declarations, Sign in with Apple, account deletion, target API level, listing forms against the build.
EN 301 549, the standard the European Accessibility Act points at. Automated checks plus a screen-reader pass by a person, on both platforms.
The same, for a product with a real surface area.
The signed document: every criterion, its clause number, where the product stands, and what was and was not checked. Added to any audit above.
Within 90 days of the original. Says what closed, what did not, and what the changes introduced.
A year on, your app has moved and so have the requirements. The same audit again, at 30% off, within 12 months of the last one.
For a specific rejection, a disputed finding, or a design decision before you build it.
One surcharge, and it is avoidable. If you can only give us a TestFlight build, the iOS accessibility pass has to be done entirely by hand and costs 60% more. A simulator build — flutter build ios --simulator, one command — avoids it.
How it works
.apk for Android, and for iOS either a simulator .app or an .ipa. No repository access, no NDA negotiation, no onboarding call.| What you send | Store checks | Accessibility |
|---|---|---|
.apk — Android | Full | Full |
.app — iOS simulator build | Full | Full |
.ipa — iOS device build | Full | Not possible |
| TestFlight invitation | Full | By hand, +60% |
What gets checked
ITMS-91053 rejection, which arrives with no warningKept current
Both stores move their requirements every year, and a checklist written last year quietly stops being a checklist. This is what applies today. The date below is when it was last read against what Apple and Google actually publish.
| Requirement | What happens | Since / from |
|---|---|---|
| Privacy manifest, required-reason APIs | Upload refused | In force |
| Account deletion inside the app | Rejected at review | In force |
| Sign in with Apple beside a third-party login | Rejected at review | In force |
| Google Play: API 36 for updates, 35 to stay listed | Update refused, app hidden | 31 Aug 2026 |
| EN 301 549 — European Accessibility Act | Market surveillance, fines | 28 Jun 2025 |
| MinimumOSVersion 15.0 | Warning 90068 now, refused later | Spring 2027 |
| iOS 27 SDK for uploads | Upload refused | Apr 2027 |
Last read against Apple's and Google's published requirements on 15 September 2026. When a level moves, the checks move with it, and every report names which checks ran and which did not.
What we do not claim
No body in the EU is accredited to certify conformance with the European Accessibility Act. What exists is an audit report and an accessibility statement, and anyone offering you certification is selling you a document with no standing. Ours says what was tested, what was found, and what was not looked at.
Automated checking finds a minority of real accessibility problems. It is good at what it covers and silent about the rest, which is why every report we write marks each criterion as not satisfied, no automated violation, or not checked — and why the third of those is written down rather than left out.
A clean result is not a statement of conformance. It means nothing we checked was found to be wrong.
Who does the work
checkApp is Iryna Molokova, a Flutter developer. The audit runs on tooling written in-house for exactly this work: it reads the running app the way assistive technology does, measures contrast from the painted frame rather than from the colours the code declares, and traces every finding back to the line that produced it. Off-the-shelf scanners do not do that.
The tooling is not the product, though. Knowing which findings matter, which are noise, and what a regulator will actually ask for is the product — and that part is a person reading your app.
Questions
Get an audit
Write to hello@checkapp.dev with the build, or a link to it, and one line about which of the two kinds of trouble you are worried about. You will get a fixed price and a date back the same working day.