apple creative-assets: place Header and Search Results assets once Apple approved them (the version page offers only approved assets); waiting files are reported per locale and placement with their upload date and the re-run command, in the run, --verify, validate and the report; iPhone Duo: the published API spec still has no Duo type, the note says the console takes Duo and the API does not yet
This commit is contained in:
parent
47dfd372fe
commit
c2f34c62f3
13 changed files with 163 additions and 78 deletions
|
|
@ -913,31 +913,33 @@ that fails without the fix (see CONTRIBUTING.md).
|
|||
`screenshots-duo` note in check / validate. `tests/ppo.test.ts`.
|
||||
|
||||
## 76. Header and Search Results assets are not uploaded like screenshots
|
||||
- **Symptom:** a header or search results image was "uploaded" but the version page shows no header, a run kept saying
|
||||
"waiting for Apple's approval" for days, or a re-run uploaded the same file again.
|
||||
- **Symptom:** a header or search results image was "uploaded" but the version page shows no header, a run waited on
|
||||
an asset nobody had sent to review, or a re-run uploaded the same file again.
|
||||
- **Cause:** these slots take assets from the app's Asset Library (`GET /v1/apps/{id}/assetLibrary`), not a set of
|
||||
their own: a slot is an `appAssetLibraryPlacements` row (`PRODUCT_PAGE_HEADER_ASSET` or
|
||||
`APP_STORE_SEARCH_RESULTS_ASSET`, the version localization). An asset is reviewed only once it is in a review
|
||||
submission (its own item, `reviewSubmissionItems` with `appAssetLibraryImage` / `appAssetLibraryVideo`; the console's
|
||||
"Add for Review"). Apple's "App Store asset statuses": a processed asset is "Prepare for Submission" and can already
|
||||
be selected for a version. So an earlier storebound that selected only APPROVED assets waited forever: nothing ever
|
||||
sent the asset to review. Library assets carry no `sourceFileChecksum`, a rejected asset stays rejected (uploading
|
||||
the same bytes again only adds a copy), and the search slot is the API's `APP_STORE_SEARCH_RESULTS_ASSET`
|
||||
(`SEARCH_RESULTS_ADS_ASSET` is the Apple Ads one). Seen live (19 Oct 2026): placements of a live version read back
|
||||
with state `ACTIVE`, which the 4.5.1 spec's `AppAssetLibraryPlacementState` does not list; never validate placement
|
||||
states against the spec enum.
|
||||
"Add for Review"); after processing it is "Prepare for Submission". The version page's slots offer only approved
|
||||
assets ("Browse approved assets", seen in a real release, 20 Oct 2026), so placing waits for Apple's approval.
|
||||
Library assets carry no `sourceFileChecksum`, a rejected asset stays rejected (uploading the same bytes again only
|
||||
adds a copy), and the search slot is the API's `APP_STORE_SEARCH_RESULTS_ASSET` (`SEARCH_RESULTS_ADS_ASSET` is the
|
||||
Apple Ads one). Seen live (19 Oct 2026): placements of a live version read back with state `ACTIVE`, which the 4.5.1
|
||||
spec's `AppAssetLibraryPlacementState` does not list; never validate placement states against the spec enum.
|
||||
- **Do:** `storebound apple creative-assets`: MD5 in `referenceName` ("storebound <md5>"), reuse (or unarchive) a library
|
||||
asset with the same MD5, select it once processed, never re-upload a rejected file or one that failed processing
|
||||
twice. Then `--add-for-review` puts the unreviewed assets into the draft submission (with the first version, or alone
|
||||
once the app has an approved version) and `--verify` reads every slot back. With no editable version the live version
|
||||
is used and only APPROVED assets go onto it; the rest wait for their own review. Whether the API accepts a new
|
||||
placement on a live version is not documented: storebound places the new asset first and removes the old one only
|
||||
after Apple accepted it, and on a 4xx it says so, leaves the live page unchanged, gives the live version page's deep
|
||||
link (select it there, or create a version and re-run) and does not try the remaining live slots. Uploading, selecting and adding to the
|
||||
draft are normal steps, not owner buttons; Submit for Review stays the owner's.
|
||||
- **Guard:** `cli/apple/creative-assets.ts` (`classify`, `pickAsset`, `processingTiming`), `tests/creative-assets.test.ts`
|
||||
(fake App Store Connect: upload and select in one run, still processing, rejected / archived files, add-for-review
|
||||
without submitting, verify read-only, a refused live placement); the fake commits library assets to PREPARE_FOR_SUBMISSION, as Apple does.
|
||||
asset with the same MD5, never re-upload a rejected file or one that failed processing twice. `--add-for-review`
|
||||
puts the unreviewed assets into the draft submission (with the first version, or alone once the app has an approved
|
||||
version; Submit for Review stays the owner's). An asset that is not APPROVED is reported per locale and placement as
|
||||
"uploaded <date>, waiting for Apple's approval; run `storebound apple creative-assets` again later"; the run is an
|
||||
upsert, so a later run places it as soon as it is approved (an approved old asset stays shown meanwhile). `--verify`
|
||||
and `validate` / the report show the same waiting state. With no editable version the live version is used.
|
||||
Whether the API accepts a new placement on a live version is not documented: storebound places the new asset first
|
||||
and removes the old one only after Apple accepted it, and on a 4xx it says so, leaves the live page unchanged, gives
|
||||
the live version page's deep link (select it there, or create a version and re-run) and does not try the remaining
|
||||
live slots.
|
||||
- **Guard:** `cli/apple/creative-assets.ts` (`classify`, `pickAsset`, `waitingText`, `creativeWaiting`,
|
||||
`processingTiming`), `tests/creative-assets.test.ts` (fake App Store Connect: upload, wait for approval, place on a
|
||||
re-run, still processing, rejected / archived files, add-for-review without submitting, verify read-only with the
|
||||
waiting state, a refused live placement, the validate finding).
|
||||
|
||||
## 77. A macOS (tvOS, visionOS) version was invisible next to the iOS one
|
||||
- **Symptom:** `apple resubmit` said "nothing to resubmit" while a macOS version was REJECTED with an
|
||||
|
|
|
|||
|
|
@ -209,14 +209,16 @@ Screenshots". Optional: without these assets the App Store uses in-app events, a
|
|||
- **Not rendered by `shots render`**: the scene templates are portrait device shots; make the wide art yourself (or from
|
||||
the feature graphic artwork at the larger size) and drop it in.
|
||||
- **Upload and select:** `storebound apple creative-assets --dry`, then without `--dry`. Files go into the app's Asset
|
||||
Library (API: `appAssetLibraryImages` / `appAssetLibraryVideos`, category `CREATIVE_ASSETS`), and once processed
|
||||
("Prepare for Submission", a bounded wait of 2 minutes with a heartbeat) the run selects them for the slots of the
|
||||
editable version (`appAssetLibraryPlacements`, `PRODUCT_PAGE_HEADER_ASSET` / `APP_STORE_SEARCH_RESULTS_ASSET`), as the
|
||||
console's Browse Assets > Save does. Approval is not needed first. Same file (MD5) = nothing sent; an archived copy is
|
||||
Library (API: `appAssetLibraryImages` / `appAssetLibraryVideos`, category `CREATIVE_ASSETS`; processing is a bounded
|
||||
wait of 2 minutes with a heartbeat). The version page's slots offer only approved assets ("Browse approved assets"),
|
||||
so an asset is placed (`appAssetLibraryPlacements`, `PRODUCT_PAGE_HEADER_ASSET` / `APP_STORE_SEARCH_RESULTS_ASSET`)
|
||||
once Apple approved it; until then each locale and placement says "uploaded <date>, waiting for Apple's approval; run
|
||||
`storebound apple creative-assets` again later", and a later run places it. `--verify`, `validate` and the report
|
||||
show the same waiting state. Same file (MD5) = nothing sent; an archived copy is
|
||||
unarchived; a file App Review rejected is never uploaded again (change the file). MCP: `apple_creative_assets` (dry by
|
||||
default).
|
||||
- **Review:** an asset is reviewed only once it is in a review submission (its own item, `appAssetLibraryImage` /
|
||||
`appAssetLibraryVideo`; the console's "Add for Review"). `--add-for-review` adds the selected, unreviewed assets to the
|
||||
`appAssetLibraryVideo`; the console's "Add for Review"). `--add-for-review` adds the uploaded, unreviewed assets to the
|
||||
app's draft submission, once: before the first approved version it is the same submission as that version, later
|
||||
they can go alone. Pressing Submit for Review stays the owner's.
|
||||
- **Live app, no editable version:** the run uses the live version, where only APPROVED assets are selected (Apple
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue