For indie developers and small studios
App Review Rescue
Your build is done, then App Review sends it back. My own apps have been rejected under 2.1(a), 2.1(b), 3.1.2, 4.2.1, 4.3(b) and 5.1.1(iv), and I worked out what Apple actually wanted each time. Start with the free decoder, or hand it to me.
Rejection Decoder
LiveFree
A plain-English lookup of the most common rejections: what the guideline means, the usual causes and a fix checklist.
- 18 common rejections, by guideline number
- Usual causes and a fix checklist for each
- What to write in your Resolution Center reply
- Real cases from my own apps
Indie Ship Kit
Not on sale yet£49 to £79
The checklists and templates I use before every submission, so the first review is the last one.
- Pre-submission checklist mapped to guideline numbers
- Subscription paywall checklist: price, period, renewal terms, Terms of Use (EULA) and Privacy links, restore
- Review notes templates: demo account, where to find the in-app purchase, feature walkthrough
- Resolution Center reply templates for the common rejections
- App Privacy label worksheet: map each SDK to the data it collects
- Permission pre-prompt copy and purpose strings that pass 5.1.1
- StoreKit sandbox testing runbook, including the originalAppVersion trap
- First in-app purchase submission walkthrough for App Store Connect
- Screenshot spec sheet: sizes and what not to show
Done-for-you rescue or launch
Taking enquiries£300 to £1,500
I diagnose the rejection, fix what needs fixing, and handle the resubmission and reply. Fixed quote before any work starts.
- Single rejection rescue, from £300
- Full launch pass before first submission, up to £1,500
- Code, metadata, paywall, privacy labels and review notes
- Resolution Center reply written for you
- I stay with it until the review result comes back
Rejections from my own apps
Not theory. These came back from App Review on apps I build and ship myself, and each one changed how I prepare a submission.
In-app purchase not visible to the reviewer: the sandbox originalAppVersion trap
Strata went from paid to free with optional map packs, and original buyers keep every pack. Version 1.1.0 came back under 2.1(b): the reviewer was "unable to get the confirmation of the purchase or to access the acquired item". The most likely cause: the legacy-buyer check read originalApplicationVersion as a number, and the sandbox reports "1.0" for everyone, so the reviewer looked like an original buyer. The fix only counts a purely numeric build of 3 or below, and never a first purchase after the free release. The resubmitted build went through.
See the fix checklist →In-app purchase "didn't show properly": empty paywall or a teaser in the way
Rejected twice for the same purchase path. First the paywall's product list was never wired in, so it showed "Subscriptions are not configured yet" on the reviewer's iPad. Then Upgrade still opened a blurred teaser with no prices before the real store. The fix sent Upgrade straight to the native subscription screen, and Crystal Index went live.
See the fix checklist →Subscription terms missing: EULA link and renewal details
The rejection cited a missing Terms of Use link in the store metadata, and the paywall itself only had a Restore button. The fix added the renewal terms plus Terms of Use and Privacy Policy links on the paywall, and the link in the listing. The paywall is web UI inside a Capacitor shell, so the in-app part shipped without a new build.
See the fix checklist →Pre-permission screen with a button labelled "Allow"
PostReady 1.0.0 was rejected for a custom message before the permission request with an "Allow" button. Those onboarding rows call the system camera, microphone and photos prompts directly, so the fix was relabelling each one "Continue".
See the fix checklist →Seen as a thin AR app (ARKit), or an AR feature the reviewer couldn't reach
PostReady is a teleprompter and recording app. Its beauty retouch runs on MediaPipe everywhere and uses ARKit face tracking only on TrueDepth devices. The reviewer's iPad had no TrueDepth camera, and the rejection cited 4.2.1 and 2.5.1 alongside 5.1.1(iv). The listing now opens with what the app is, and the review notes say it isn't an AR app and when ARKit runs.
See the fix checklist →Saturated category: dating, flashlight, wallpaper, timers, fortune telling
The native iOS build of Lunary came back under 4.3(b) five times with the same boilerplate about astrology, horoscopes and fortune telling, and an App Review Board appeal was denied. A journaling-first dashboard and a category change didn't move it. The lesson: rearranging the app doesn't answer a category verdict; only changing what the reviewed binary is about can.
See the fix checklist →How a rescue works
- 01
Send the rejection
Paste the full message from App Store Connect, the guideline number and a TestFlight or App Store link.
- 02
Diagnosis and quote
Within one working day you get what Apple is actually asking for, the fix plan and a fixed price.
- 03
Fix and resubmit
I make the changes in code, metadata or review notes, then write the reply to the reviewer.
- 04
Through to a result
I stay on it through the next review and any follow-up questions from Apple.
Apple makes the final decision, so nobody can promise an approval. What I can promise is a clear diagnosis, a fix plan, and a resubmission that answers what the reviewer asked. Not affiliated with Apple.
Rejected right now?
Send the full rejection message. You'll get a diagnosis and a fixed quote within one working day.