App Store or Google Play refused your build?
Drop the .ipa, .apk or .aab into the free check and see what the stores would refuse, in your browser. If you would rather we did it, the store readiness audit also reads your listing forms against the build.
€190 · 2 working days if you'd rather we did it
Rejection codes
| Code | What it means |
|---|---|
ITMS-91053 | Required-reason API used without a declared reason |
ITMS-90683 | Protected resource with no purpose string in Info.plist |
90068 | Minimum iOS below 15: a warning now, refused from spring 2027 |
ITMS-90208 | A framework declares an older minimum iOS than its binary |
ITMS-90809 | A reference to the deprecated UIWebView |
ITMS-90685 | Two bundles inside the app share one identifier |
- What is ITMS-91053?
- Apple's rejection for calling a required-reason API without declaring a reason in a privacy manifest. It arrives at upload, names the APIs it found, and there is no warning build beforehand. The store readiness audit is mostly about this class of problem. How to fix it
- What is ITMS-90683?
- Apple's refusal for a build that can reach the camera, location, contacts or another protected resource without a sentence in Info.plist saying why. It comes from the binary, not from what the app does: a plugin that links the camera brings the requirement in even if nothing ever opens it, so a build that runs fine on a phone never reaches TestFlight. We name the key and the plugin that brought it in. How to fix it
- What does warning 90068 mean?
- App Store Connect sends it when an app's MinimumOSVersion is below iOS 15. Today the build is delivered anyway, with the warning in the email afterwards; from spring 2027 the upload is refused. A Flutter project carries 13.0 unless somebody changed it, so most teams meet this one without having done anything wrong. How to fix it
- What is ITMS-90208?
- Apple's refusal when a framework inside the app declares, in its own Info.plist, an older minimum iOS than its binary was built for. Before Flutter 3.41 the usual one was App.framework, whose Info.plist was copied from
ios/Flutter/AppFrameworkInfo.plistand kept an old MinimumOSVersion. Since 3.41 the build writes that key itself, so updating Flutter fixes it; on an older version, set it there to the version the binary was built for. How to fix it - What is ITMS-90809?
- Apple's refusal for any reference to UIWebView. New apps have been refused since April 2020 and updates since December 2020. A reference is enough, even if no web view is ever shown; it almost always comes from an old SDK, and updating or removing that SDK is the fix. How to fix it
- What is ITMS-90685?
- Apple's refusal when two bundles inside the app share one CFBundleIdentifier: usually an app extension given the app's own identifier, or a framework embedded in the app and again inside an extension. Give each extension its own identifier under the app's, and embed each framework once. How to fix it
Kept current
App Store and Google Play deadlines, 2026–2027
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 |
| Purpose strings for camera, location, contacts | 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 |
| Play Billing Library 8 | New apps and updates refused | 31 Aug 2026 |
| Google Play: declaration for precise location | Declaration required | 27 Jan 2027 |
| Native libraries on 16 KB memory pages | Update refused | 1 Feb 2027 |
| 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 16 September 2026. When a level moves, the checks move with it, and every report names which checks ran and which did not.
What the store readiness audit checks
- A privacy manifest missing, or an SDK shipped without one
- Required-reason APIs called with no declared reason — the
ITMS-91053rejection, which arrives with no warning - A plugin that reaches for the camera, location or contacts with no
…UsageDescriptionin Info.plist —ITMS-90683, which stops the upload before TestFlight, often for a feature the app never uses - An App Store icon with transparency in it, a framework that declares the wrong minimum iOS (
ITMS-90208), or no answer on encryption, which leaves every build waiting as Missing Compliance - A plugin registering for push without the entitlement, so notifications never arrive, a reference to UIWebView (
ITMS-90809), or two bundles sharing one identifier (ITMS-90685) - A third-party login with no equivalent beside it (Guideline 4.8)
- No way to delete an account from inside the app (Guideline 5.1.1(v), and Google's data deletion policy, which wants a second route outside it)
- A target API level Google Play has stopped accepting
- Native libraries that will not load on 16 KB memory pages — Google Play stops releasing such updates on 1 February 2027, and plugins with prebuilt code are the usual cause
- A release signed with the debug key, a debuggable build, or a Play Billing Library older than version 8
- Permissions Google Play reserves for certain kinds of app — background location, photos and videos, all installed apps, all files — and the ones it wants declared, precise location among them from 27 January 2027
- A privacy label or Data safety form that says less than the build does
- A support or privacy URL in the listing that no longer answers
The standards and store rules we audit against
- App Store Review Guidelines
- 4.8 · 5.1.1(v) · 1.5, and what review rejects for
- PrivacyInfo.xcprivacy
- required since 1 May 2024 — the file behind ITMS-91053
- MinimumOSVersion
- warning 90068 today, refused from spring 2027
- iOS 27 SDK
- required for uploads from April 2027
- Play target API level
- 36 since 31 August 2026 · 35 to stay listed
- Play Data safety
- and in-app account deletion
Send a build. Get a report by email.
| 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% |
Price
The store readiness audit is €190, 2 working days. For one specific rejection, or a question before you build, a consultation is €90/hour.
Get an audit
Email a build. Get a fixed price and a date.
Write to hello@checkapp.dev with the build, or a link to it, and one line on what you need: an accessibility audit, a store check, or both. You will get a fixed price and a date back the same working day.