Skip to content
Launch offer: Mac Manager £9.99 first year

Shotlist guide

Verifying output

What shotlist verify checks before upload, raw-only and composed checks, unreviewed captions, content rules, the same-language check, options and exit codes.

Verifying output

shotlist verify

verify checks your output against Apple’s rules before anything is uploaded. It reads only local files: it doesn’t build, capture or contact App Store Connect, and it’s free.

publish --apply runs the same checks first and refuses to upload while any fail. Running verify yourself shows the problems sooner.

What it checks

verify works in one of two modes, depending on whether you’ve composed yet.

Before composing: the raw captures

If Shotlist/Output/composed/ doesn’t exist, verify checks the raw captures only, and says so:

✓ 32 files pass
Checked the raw captures only: nothing is composed yet. After `shotlist compose`, verify also checks captions and content rules.

For every cell in the matrix:

Check Problem it reports
The cell was captured not captured; run `shotlist capture`
The capture didn’t fail capture failed: <the cell's error>
The file exists and is a PNG the file is missing, not a PNG
No alpha channel or transparency has an alpha channel (PNG colour type 6); Apple rejects transparency
A size the slot accepts 1179 × 2556 isn't an accepted iphone-6.9 size (…)
1 to 10 screenshots per size, locale and appearance 12 screenshots; App Store Connect takes 1 to 10 per size
Each language looks different every capture is identical to en-GB's. The app probably doesn't declare fr (add it to a String Catalog or an .lproj), so iOS showed another language

Cells skipped because the scene doesn’t list the slot’s posture (iPhone Duo) aren’t problems.

Transparency is judged from the PNG file’s own header (its colour type and any tRNS chunk), not from ImageIO, which reports an alpha channel for files that have none.

The same-language check

If a locale’s captures on a slot are all byte-identical to another locale’s, the app almost certainly doesn’t declare that language, and iOS showed another one instead. verify fails it. Only locales of different languages are compared: en-GB and en-US can legitimately match. See Declare every locale.

After composing: everything

Once composed/ exists, verify runs the raw checks above, then, for each locale:

Check Problem it reports
Each slot has composed screenshots no composed screenshots; run `shotlist compose`
At most 10 per slot 11 screenshots; App Store Connect takes 1 to 10 per size
Each composed file is a PNG at an accepted size, with no alpha as for raw captures
Every scene has a caption de-DE has no caption for scene 'library' (scene.library.caption)
No caption or subtitle is an unreviewed machine draft de-DE 'library': “…” is a machine draft nobody has reviewed. Check it, then `shotlist captions review --locales de-DE`, or pass --allow-unreviewed
Captions, subtitles and creative titles follow Apple’s content rules de-DE scene.shop.caption breaks Apple's content rules: price or currency: “€5”

If creative is set in shotlist.json, it also checks every creative asset:

File Expected size
creative/<locale>/header.png (or creative/shared/header.png when not localised) 3840 × 1646
creative/<locale>/header-16x9.png 5244 × 2950
creative/<locale>/search.png 3840 × 2560
creative/<locale>/search-16x9.png 5244 × 2950

Each must exist (missing; run `shotlist compose`), have the right size (3840 × 1600; Apple wants 3840 × 1646) and have no alpha channel. The 16:9 files are expected unless "universal": false.

Output

When everything passes:

✓ 64 files pass

Otherwise, one line per problem, then a count:

✗ Captions.xcstrings: de-DE 'library': “Dein ganzes Regal an einem Ort” is a machine draft nobody has reviewed. Check it, then `shotlist captions review --locales de-DE`, or pass --allow-unreviewed
✗ raw/fr-FR/iphone-6.3: every capture is identical to en-GB's. The app probably doesn't declare fr (add it to a String Catalog or an .lproj), so iOS showed another language
2 problems in 64 files

Each problem starts with the file or folder it’s about, relative to Shotlist/Output/ (or Captions.xcstrings for caption problems).

Options

Option Effect
--raw-only Check only the raw captures, even after composing.
--allow-unreviewed Accept machine-drafted captions nobody has reviewed. Useful for a preview build; don’t publish with it.
--slots <list>, --locales <list> Check only these.
--json Print checkedFiles and problems (each with file and message) as JSON.
--project-dir <folder> The folder that holds Shotlist/.

Exit codes

Code Meaning
0 No problems.
1 At least one problem, or shotlist.json isn’t valid.

In the Mac app

Verify in the Publish screen runs the same checks and lists the problems in the inspector. The app never accepts unreviewed captions: Upload… refuses while verify has any problem.

A typical sequence

shotlist capture
shotlist verify --raw-only        # sizes, failures and locales, before captions exist
shotlist captions draft
# … someone checks the drafts …
shotlist captions review --locales de-DE,fr-FR
shotlist compose
shotlist verify                   # everything, ready to publish