"In-App Purchase products were not submitted for review with the app binary." If this is the message in your Resolution Center, you are not stuck — you are 5 ASC API calls away from a clean resubmission. Below: the free checklist that catches the 14 most common iOS rejection reasons, the $49 playbook that walks you through the exact IAP 2.1(b) fix, the $499 toolkit that automates the resubmit, and a $999/hr emergency consult if your launch is on fire today.
Apple's guideline 2.1(b) (App Completeness — In-App Purchases) requires every IAP product that the app references to be submitted for review at the same time as the binary. The catch: the App Store Connect web UI hides this. Creating a SKU, setting a price, adding screenshots — none of those steps actually attach the IAP to your reviewSubmissions resource. You can ship a perfect binary, fill in every metadata field, and still get rejected because the IAP is sitting in readyToSubmit while the build review proceeds without it.
The fix takes about 90 minutes once you know the moves. The first 60 of those are reading Apple's documentation and re-reading the rejection email. The last 30 are: edit IAP metadata → create the App Review Screenshot → create a fresh reviewSubmissions resource that includes a relationship of type inAppPurchases → submit. The bottleneck is knowing which API calls to make in which order.
baseTerritory=USA, V2 relationship type inAppPurchases, the SPA hydration timing trapWaiting for Review or your money backSingle non-consumable IAP at $1.99 (one-time pro tier). Binary passed in 36 hours, came back with "Guideline 2.1(b) — IAP product not submitted for review." Root cause: the IAP was created but never attached to reviewSubmissions. Fix took 22 minutes once I had the API sequence. Resubmitted same day, accepted on 2026-05-07.
Same IAP pattern as App A. Different reviewer, identical rejection. The fix was the same script run with a different bundle ID — which is exactly the case for shipping the toolkit instead of doing it by hand four times.
Hit a different sub-failure: IAP baseTerritory wasn't set to USA, which meant the App Review Screenshot upload silently 422'd. Spent 18 minutes chasing why the curl returned 200 but the screenshot didn't appear in ASC. Documented in the playbook as failure mode #2.
The slowest of the four — hit the SPA hydration trap where the ASC web UI looked correct but the underlying appAvailabilities resource hadn't propagated. The toolkit's diagnostic script catches this in < 5 seconds; without it, I'd have refreshed the browser indefinitely.
All four apps are listed on the homepage (AutoChoice, AltitudeNow, DaysUntil, PromptVault). Public GitHub repos linked there. Resolution Center messages available on request — I redact only my Team ID.
Before you spend an hour on the wrong fix, run the symptom against the taxonomy. The first three classes are free below. Classes 4–12 are in the $49 playbook.
inAppPurchases relationship.iapScreenshotUploads resource before the submission, not after.baseTerritory=USA on the IAP resource itself, not on the price schedule.One. Most readers buy the $49 playbook and never need anything else. The $499 toolkit is for portfolio developers (3+ apps). The $999/h consult is for people whose launch deadline is in the next 48 hours and who would rather pay than read.
The free checklist covers 14 reasons across guideline 2.x. If your message doesn't mention IAPs, you probably don't need the recovery playbook — start with the checklist and email me only if you can't match your rejection text.
Playbook: 30-day money-back if you don't get past 2.1(b) on your next review cycle. Toolkit: 14-day full refund. Consult: full refund if I can't get your binary into Waiting for Review within the booked hour.
Drafting in public. The Gumroad listing goes live 2026-05-09. Pre-order via the email link above and I'll send it the moment it's published, no Gumroad markup until then.
Both. My four apps use one-time IAP because of the design rationale in this post, but the API recovery sequence is identical — only the product type field differs.
Different rejection class. Start with my TestFlight debug page and the TestFlight Debug Bible ($29). If the install fail is downstream of the IAP rejection (Apple sometimes withholds TF builds while review is open), the playbook above unblocks both.
Free checklist if you're triaging. $49 playbook if you have a few hours. $999 emergency consult if your launch window is closing.
Or just email jiejuefuyou+iap@gmail.com with your rejection text and I'll tell you which rung to start on. Reply within 24h.