First in-app purchases left out of a review are caught (pitfall 70): firstProductGaps in validate / release plan (blocker) and the apple submit plan (refuses to leave a never-approved first product out); apple status (WARN + firstProductGaps in --json), release status and the desktop checks warn while a version waits for or is in review without it; iap-review says 'ready, not submitted yet' instead of 'complete'
This commit is contained in:
parent
1c35a625e1
commit
b830a99a5f
16 changed files with 288 additions and 18 deletions
|
|
@ -460,7 +460,7 @@ Specs: Apple [App Store Connect API 4.5.1](https://developer.apple.com/sample-co
|
|||
| `apps_gameCenterEnabledVersions_getToManyRelationship` | GET | `/v1/apps/{id}/relationships/gameCenterEnabledVersions` | read | |
|
||||
| `apps_getCollection` | GET | `/v1/apps` | read | apple/asc, apple/bundle, apps, console/app-id, console/verify, lib/store-apps |
|
||||
| `apps_getInstance` | GET | `/v1/apps/{id}` | read | apple/appinfo, apple/status, apps, onboard |
|
||||
| `apps_inAppPurchasesV2_getToManyRelated` | GET | `/v1/apps/{id}/inAppPurchasesV2` | read | apple/iap, apple/iap-review, apple/iap-submit, apple/offer-codes, apple/promoted, apple/status, catalog, prices, validate |
|
||||
| `apps_inAppPurchasesV2_getToManyRelated` | GET | `/v1/apps/{id}/inAppPurchasesV2` | read | apple/first-products, apple/iap, apple/iap-review, apple/iap-submit, apple/offer-codes, apple/promoted, apple/status, catalog, prices, validate |
|
||||
| `apps_inAppPurchasesV2_getToManyRelationship` | GET | `/v1/apps/{id}/relationships/inAppPurchasesV2` | read | |
|
||||
| `apps_inAppPurchases_getToManyRelated` | GET | `/v1/apps/{id}/inAppPurchases` | read | |
|
||||
| `apps_inAppPurchases_getToManyRelationship` | GET | `/v1/apps/{id}/relationships/inAppPurchases` | read | |
|
||||
|
|
@ -479,7 +479,7 @@ Specs: Apple [App Store Connect API 4.5.1](https://developer.apple.com/sample-co
|
|||
| `apps_searchKeywords_getToManyRelationship` | GET | `/v1/apps/{id}/relationships/searchKeywords` | read | |
|
||||
| `apps_subscriptionGracePeriod_getToOneRelated` | GET | `/v1/apps/{id}/subscriptionGracePeriod` | read | |
|
||||
| `apps_subscriptionGracePeriod_getToOneRelationship` | GET | `/v1/apps/{id}/relationships/subscriptionGracePeriod` | read | |
|
||||
| `apps_subscriptionGroups_getToManyRelated` | GET | `/v1/apps/{id}/subscriptionGroups` | read | apple/iap-submit, apple/promoted, apple/subscriptions, apple/win-back, catalog, prices, validate |
|
||||
| `apps_subscriptionGroups_getToManyRelated` | GET | `/v1/apps/{id}/subscriptionGroups` | read | apple/first-products, apple/iap-submit, apple/promoted, apple/subscriptions, apple/win-back, catalog, prices, validate |
|
||||
| `apps_subscriptionGroups_getToManyRelationship` | GET | `/v1/apps/{id}/relationships/subscriptionGroups` | read | |
|
||||
| `apps_updateInstance` | PATCH | `/v1/apps/{id}` | write (dry by default) | apple/appinfo |
|
||||
| `apps_webhooks_getToManyRelated` | GET | `/v1/apps/{id}/webhooks` | read | |
|
||||
|
|
@ -1246,7 +1246,7 @@ Specs: Apple [App Store Connect API 4.5.1](https://developer.apple.com/sample-co
|
|||
| `inAppPurchasesV2_promotedPurchase_getToOneRelated` | GET | `/v2/inAppPurchases/{id}/promotedPurchase` | read | |
|
||||
| `inAppPurchasesV2_promotedPurchase_getToOneRelationship` | GET | `/v2/inAppPurchases/{id}/relationships/promotedPurchase` | read | |
|
||||
| `inAppPurchasesV2_updateInstance` | PATCH | `/v2/inAppPurchases/{id}` | write (dry by default) | |
|
||||
| `inAppPurchasesV2_versions_getToManyRelated` | GET | `/v2/inAppPurchases/{id}/versions` | read | apple/iap-submit |
|
||||
| `inAppPurchasesV2_versions_getToManyRelated` | GET | `/v2/inAppPurchases/{id}/versions` | read | apple/first-products, apple/iap-submit |
|
||||
| `inAppPurchasesV2_versions_getToManyRelationship` | GET | `/v2/inAppPurchases/{id}/relationships/versions` | read | |
|
||||
| `inAppPurchases_getInstance` | GET | `/v1/inAppPurchases/{id}` | read | |
|
||||
| **marketplaceSearchDetails** (3) | | | | |
|
||||
|
|
@ -1377,7 +1377,7 @@ Specs: Apple [App Store Connect API 4.5.1](https://developer.apple.com/sample-co
|
|||
| `subscriptionGroups_getInstance` | GET | `/v1/subscriptionGroups/{id}` | read | apple/subscriptions |
|
||||
| `subscriptionGroups_subscriptionGroupLocalizations_getToManyRelated` | GET | `/v1/subscriptionGroups/{id}/subscriptionGroupLocalizations` | read | apple/subscriptions, validate |
|
||||
| `subscriptionGroups_subscriptionGroupLocalizations_getToManyRelationship` | GET | `/v1/subscriptionGroups/{id}/relationships/subscriptionGroupLocalizations` | read | |
|
||||
| `subscriptionGroups_subscriptions_getToManyRelated` | GET | `/v1/subscriptionGroups/{id}/subscriptions` | read | apple/iap-submit, apple/promoted, apple/subscriptions, apple/win-back, catalog, prices, validate |
|
||||
| `subscriptionGroups_subscriptions_getToManyRelated` | GET | `/v1/subscriptionGroups/{id}/subscriptions` | read | apple/first-products, apple/iap-submit, apple/promoted, apple/subscriptions, apple/win-back, catalog, prices, validate |
|
||||
| `subscriptionGroups_subscriptions_getToManyRelationship` | GET | `/v1/subscriptionGroups/{id}/relationships/subscriptions` | read | |
|
||||
| `subscriptionGroups_updateInstance` | PATCH | `/v1/subscriptionGroups/{id}` | write (dry by default) | |
|
||||
| `subscriptionGroups_versions_getToManyRelated` | GET | `/v1/subscriptionGroups/{id}/versions` | read | apple/iap-submit |
|
||||
|
|
@ -1485,7 +1485,7 @@ Specs: Apple [App Store Connect API 4.5.1](https://developer.apple.com/sample-co
|
|||
| `subscriptions_subscriptionLocalizations_getToManyRelated` | GET | `/v1/subscriptions/{id}/subscriptionLocalizations` | read | apple/subscriptions, catalog, validate |
|
||||
| `subscriptions_subscriptionLocalizations_getToManyRelationship` | GET | `/v1/subscriptions/{id}/relationships/subscriptionLocalizations` | read | |
|
||||
| `subscriptions_updateInstance` | PATCH | `/v1/subscriptions/{id}` | write (dry by default) | apple/subscriptions |
|
||||
| `subscriptions_versions_getToManyRelated` | GET | `/v1/subscriptions/{id}/versions` | read | apple/iap-submit |
|
||||
| `subscriptions_versions_getToManyRelated` | GET | `/v1/subscriptions/{id}/versions` | read | apple/first-products, apple/iap-submit |
|
||||
| `subscriptions_versions_getToManyRelationship` | GET | `/v1/subscriptions/{id}/relationships/versions` | read | |
|
||||
| `subscriptions_winBackOffers_getToManyRelated` | GET | `/v1/subscriptions/{id}/winBackOffers` | read | apple/win-back |
|
||||
| `subscriptions_winBackOffers_getToManyRelationship` | GET | `/v1/subscriptions/{id}/relationships/winBackOffers` | read | |
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ fails without the fix.
|
|||
|
||||
| # | date | lesson | guard |
|
||||
|---|---|---|---|
|
||||
| 70 | 2026-10 | A game: the app's first in-app purchase (a starter pack) was not in the 1.0.0 review submission (its items held only the appStoreVersion); it stayed READY_TO_SUBMIT and was noticed after two days in WAITING_FOR_REVIEW. Apple reviews the first product of a type only with an app version; approved without it, it is not sellable. | `firstProductGaps` (`cli/lib/review-submit.ts`, read by `cli/apple/first-products.ts`): WARN in `apple status` (text and --json), `release status` and the desktop checks; blocker in `validate` / `release plan` and the `apple submit` plan; `iap-review` says "ready, not submitted yet". `tests/first-products.test.ts`. |
|
||||
| 69 | 2026-10 | A web app: `bun add -d storebound` plus the scaffolded `storebound.config.ts` broke `next build`: the package exported only its TypeScript source and shipped no declarations; Bun imports .ts, so every storebound test passed, but tsc never takes a package's .ts source as its types. | The package ships declarations for ES module (`dist/types`) and CommonJS projects (`dist/types-cjs`) and a Node entry (`dist/config.js`); Bun keeps the source (`buildEntry`, `pruneDeclarations` in `tools/build-node.ts`, run by prepack). `tests/package-types.test.ts` type-checks the template against the packed entry under bundler / node16 / nodenext / node10 in both project types with no @types/node and skipLibCheck off, and loads the package with `import()` and `require()` under Node. `check` fails on the template's own placeholders (Example Studio, bare example.com). |
|
||||
| 68 | 2026-10 | A headless Chrome started by storebound's console automation (a test run's `--user-data-dir=$TMPDIR/storebound-profile-apple-…`, `--remote-debugging-port=0 --headless=new`) outlived its parent for ~20 hours as an orphan (parent PID 1). macOS LaunchServices took it for the running "Google Chrome", so the Dock's Chrome only activated the windowless instance and the owner's own Chrome would not open. A Chrome started with a DevTools port does not notice its parent dying. | `cli/console/chrome-guard.ts`: every Chrome storebound starts itself is ended on process exit, closed gracefully on SIGINT / SIGTERM / SIGHUP, and ended by a detached watchdog when the parent dies (SIGKILL included; a reused pid is never killed); every start first ends headless orphans on storebound's profiles and names orphaned windows; headless runs on macOS prefer Chromium / Chrome for Testing over Google Chrome.app; `console fill` closes the window on an error too (`tests/chrome-guard.test.ts`). |
|
||||
| 67 | 2026-10 | A checkout without `.entitlements` was reported as "builds ship without push / Game Center" while the uploaded build had both (native changes lived on a release branch). | The comparison warns only about this checkout ("built from another branch?") and names the branches / worktrees that have an `.entitlements` file; with a built IPA it reads that build's real entitlements ("uploaded build N"); without one it says the App Store Connect API does not expose them. `checkoutInfo`, `builtIpaEntitlements` (cli/apple/signing.ts), `machoEntitlements`, `compareCapabilities` (cli/lib/signing.ts), tests/signing-capabilities.test.ts. |
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue