Apple rejected my app twice, and neither reason was code
Two rejections, two App Store Connect mechanics nobody warns you about, and the checks that would have caught both before submitting.
Tapeflix was approved on the third attempt. Both rejections were my fault, and neither one was in the app. They were things App Store Connect lets you believe you have done.
If you are about to submit your first app, these are the two that cost me three weeks.
"Ready for Review" does not mean submitted
My app sells two auto-renewable subscriptions. Both were configured, priced, localised, and showing a yellow dot that read Ready for Review. I submitted the app and got back Guideline 2.1(b): the binary references subscriptions that were never submitted for review.
The products were complete. They were simply not attached to anything. In App Store Connect, a subscription reaching "Ready for Review" means its own metadata is finished — not that it is part of your submission. Attaching it is a separate action, an Add for Review button on the subscription group page, and until you press it your submission contains only the binary.
You can verify this before submitting. On the App Review page, your draft submission lists its items. Mine said 1 Item the first time — the app, alone. A submission that includes subscriptions says so in that count. If the number is lower than you expect, something you believe is included is not.
A rejected submission keeps your version hostage
The second rejection taught me something stranger. After it, I fixed the metadata and went to resubmit — and the version page had no submit button at all. The draft submission said "add an app version for the selected platform", while the version itself sat there marked Ready for Review with a build attached. Each screen was waiting for the other.
A rejected submission stays open. It still owns your version, so the version cannot join a new submission, which is why neither screen offers the action you are looking for. Replying in Resolution Center does not release it; a reply is a message, not a state change.
The fix is one link: open the rejected submission and press Cancel Submission. The version is freed, the draft binds it automatically, and Submit for Review goes blue.
The other rejection: a link I thought I had
The first rejection was Guideline 3.1.2(c) — no Terms of Use link in the App Store metadata. I had one in the app: the paywall showed plan names, prices, the auto-renew sentence, and tappable Terms and Privacy links.
The rule has two halves. The app needs those disclosures, and the listing needs a Terms of Use link too, either at the end of your description or in the EULA field. I had satisfied the half I could see while testing, and missed the half that lives in a text box.
What I would check before submitting
- Open the draft submission and count the items. The binary alone is the failure mode.
- Confirm every in-app purchase shows Ready for Review and appears in that submission.
- Read your own App Store description to the end. The privacy and terms links must survive into the live listing, not just exist in your drafts folder.
- If a previous submission was rejected, cancel it before trying to build a new one.
None of this is in the app you spent a year writing. It is all in the console around it, and the console is happy to show you green states that mean less than they look like.
FAQ
Does a rejection count against my developer account?
No. There is no penalty counter and a rejection does not mark your account. Repeatedly resubmitting without addressing the feedback will slow your reviews, but a rejection followed by a fix is the normal path.
Can I attach a new build to a rejected version?
Yes. Once a version is rejected it becomes editable again, so you can select a new build and resubmit without losing your place in any queue. While a version is actually in review, you would have to cancel the submission first.
Do I need a new binary to fix a metadata rejection?
Usually not. If the problem is your description, keywords or review notes, you edit the metadata and resubmit the same build. Apple will tell you explicitly when a new binary is required — mine did, in the 2.1(b) rejection.
What is an App Review screenshot for a subscription?
Each in-app purchase needs its own screenshot in App Store Connect before it can be submitted. A screenshot of your own paywall is what the field expects. Without it the product cannot reach Ready for Review, which means it cannot be attached to your submission.