apple resubmit after a rejection: iap-submit reuses the open review submission (UNRESOLVED_ISSUES gets only missing items and is resubmitted, a draft is reused, one waiting for or in review means nothing is sent), never a second draft; 409 ITEM_PART_OF_ANOTHER_SUBMISSION names the other submission instead of the list-lag message, a draft the run created is canceled and the named one used; submit retried with backoff and heartbeat while Apple says not ready yet; new apple resubmit --build <n> (build by number, plan table, --yes); apple status lists UNRESOLVED_ISSUES items and the resubmit command. Pitfall 30

This commit is contained in:
CRTkafa 2026-10-12 10:33:48 +08:00
parent c8213be2b6
commit 0da5ee9d01
21 changed files with 726 additions and 80 deletions

View file

@ -90,6 +90,11 @@ answers the compliance facts no file proves, all in one batch at the start.
and the version page has no "In-App Purchases and Subscriptions" section any more. If the version was already
submitted without them: cancel the review submission (`storebound apple status --cancel-submission <id>`, the
owner's yes), wait a minute, then `apple iap-submit --with-version` (pitfall 28).
- Rejected (Invalid Binary, a crash, ...): the review submission stays open with UNRESOLVED_ISSUES and keeps the
version and its IAPs. Upload a fixed build, then `storebound apple resubmit --build <n>` (dry run with the plan
table), and after the owner's yes `--build <n> --yes`: it attaches build n, reuses that submission (no second
draft), adds only missing items and resubmits, retrying while Apple says "not ready to be submitted yet"
(pitfall 30, `review-rejections`). `apple iap-submit` reuses it the same way.
- App Privacy (data types, purposes, linked, tracking) is UI-only and must be **published**, not just saved.
- Export compliance unanswered = "Missing Compliance": `storebound apple encryption` (`export-compliance`).
- ITMS-91053 / 91061 privacy manifest emails after upload: `privacy-manifest` skill.

View file

@ -46,6 +46,19 @@ Flutter / React Native code, the Health apps declaration, alignment inside prebu
Start with Fix or Clarify; Push back only with evidence; Appeal last. Always ask the owner before sending anything.
### Apple: resubmit a fixed build (Invalid Binary, crash, ...)
The rejected submission stays open with **UNRESOLVED_ISSUES** and keeps its items (the version, REJECTED, and its
in-app purchases). Resubmit that same submission; never create a second one next to it (Apple then answers 409
`ITEM_PART_OF_ANOTHER_SUBMISSION`).
1. Upload the fixed build and note its number (`storebound apple upload`, `apple encryption` if it asks).
2. `storebound apple status`: the submission with UNRESOLVED_ISSUES, its items and their states.
3. `storebound apple resubmit --build <n>` (dry run without `--yes`): the plan table shows the build to attach, the
submission reused, every item in it already or added, and the submit.
4. The owner's yes, then `storebound apple resubmit --build <n> --yes`: build n is attached by its number, missing
items go in, and the submit is retried with backoff while Apple says "Version is not ready to be submitted yet"
(normal for a few minutes after a build is attached; it gives up after 10 minutes and a re-run continues).
5. Reply in the Resolution Center what changed (template below), then `storebound apple status --wait-review`.
## 2. Reply template (Resolution Center / appeal, under 200 words)
```
Hello, thank you for the review.

View file

@ -392,3 +392,18 @@ that fails without the fix (see CONTRIBUTING.md).
--propose` writes true only with `appPrivacy.trackingDomains`; `apple upload` checks every manifest in the IPA
(app root, Frameworks, bundles) before any network call, `apple build` after the export;
`tests/privacy-tracking.test.ts`.
## 30. Resubmit after a rejection: reuse the UNRESOLVED_ISSUES submission
- **Symptom:** after an Invalid Binary rejection, `apple iap-submit --with-version --yes` created a new, empty draft
and stopped with "the store says it already exists but does not list it yet (its lists lag ...)". The real answer
was 409 `ITEM_PART_OF_ANOTHER_SUBMISSION`: the version was still in the rejected submission.
- **Cause:** a rejected submission stays open with UNRESOLVED_ISSUES and keeps its items (the REJECTED version, its
IAPs); storebound only looked for READY_FOR_REVIEW drafts, and read the 409's "already added" as a duplicate.
- **Do:** upload the fixed build, `storebound apple status` (shows the submission, its items and the command), then
`storebound apple resubmit --build <n>` (dry run, plan table) and after the owner's yes `--yes`. Expect "Version is
not ready to be submitted yet" for a few minutes after the build is attached: the command retries with backoff
(up to 10 min) and a re-run continues where it stopped.
- **Guard:** `chooseSubmission` (cli/lib/review-submit.ts) reuses an open submission and never creates a second one;
`addItem` turns the 409 into a message naming the other submission (never the lag message: `isConflict` excludes
it), a draft created by the same run is canceled and the named one used; `submitWithRetry` (cli/apple/submission.ts);
`tests/resubmit.test.ts`.