listing-kit v0.3.0
⚠️ Upgrade note
Play graphics now go where fastlane supply actually uploads them: images/featureGraphic.png and images/icon.png directly under the Play locale. Earlier versions wrote images/featureGraphic/featureGraphic.png and images/icon/icon.png, which supply silently skipped. The validator fails on the old folders and tells you where to move the files.
Store rules (re-verified against Apple/Google docs, Oct 2026)
- App Store sizes updated: 6.9" adds 1260×2736, the 6.7" class is gone, and 6.3"/6.1"/4.7"/11"/10.5" are recognized. The size table lives in one place (
scripts/lib/apple-screenshot-sizes.tsv). - Checks run per locale and per display class: you need a 6.9" or 6.5" iPhone set (at most 10 per class) and a 13" iPad set when the app runs on iPad. An 11" set no longer counts.
- Apple keywords are measured in bytes. Support and privacy URLs are required and must be real http(s) URLs. Values in
metadata/default/are used as fallbacks. - Play needs at least 2 screenshots across all device types (at most 8 per type). Tablet, TV and Wear folders are checked too. You get a warning below promotion eligibility (4 screenshots at 1080 px or more). The icon must be a 512×512 8-bit PNG.
- JPEGs are validated. Upper-case extensions, PNGs with tRNS transparency, sizes the App Store doesn't recognize, and copy that isn't UTF-8 all fail.
New
scripts/capture/normalize-screenshot.shflattens raw RGBA captures to 24-bit RGB. With--playit also crops to Play's 2:1 limit.- Device overrides for detection edge cases:
LK_SUPPORTS_IPAD=0|1andLK_SUPPORTS_IPHONE=0.
Fixes
- Review hook:
- Your existing pre-commit hooks are left as they were, so a failing hook still blocks the commit.
- The page is built from the staged tree, not from unstaged edits.
- Works with linked worktrees,
core.hooksPath, Husky 9, several app roots per repo, deletion-only commits, and app paths with spaces or glob characters. - A moved plugin install prints a warning instead of blocking commits.
- Secret scan: no longer reports "clean" when grep hits an error.
- visual-diff: works with ImageMagick 6.
- grant-permissions: says plainly when the device isn't reachable or the app isn't installed.
- gemini-extension.json: generated with a real JSON encoder.
- Pipeline order: Assemble now runs before Validate, so validation checks the tree that was actually written.
- Docs: fixed the argument order for
grant-permissions.sh, the Flutter iOS-simulator build (simulators only run debug builds), and Release builds for native/RN. - Example app:
npm ciinstalls cleanly. Bundle id is nowsh.bilal.recipebox.
Validation
bash tests/run.sh: 296 passed, 0 failed across 13 test files (also under macOS bash 3.2). CI is green on Ubuntu and macOS.