App Release

Screenshot Automation

Screenshots are driven by app-owned scenarios. The CLI builds the simulator app, launches it with deterministic hooks, waits, and captures the screen.

Required App Hooks

The app should support either launch arguments or simulator child environment variables.

Example environment:

{
  "env": {
    "MAZZI_SCREENSHOT": "1",
    "MAZZI_SCREENSHOT_ROUTE": "settings",
    "MAZZI_SCREENSHOT_LANGUAGE": "{appLanguage}"
  }
}

The CLI prefixes keys with SIMCTL_CHILD_ automatically.

What Hooks Should Control

  • onboarding state
  • language
  • color mode
  • route or sheet
  • deterministic game state
  • difficulty or level
  • account/network bypasses

Output

By default screenshots go to:

artifacts/screenshots/<app>/screenshots/<version>/<device-slug>/*.png

The app config can override screenshots.outputDir.

Preflight

Run this before capture:

npx @sil/app-release --config apps/chess/release/ios.json --mode preflight

The screenshots module reports missing Xcode projects, iOS directories, Xcode tools, and screenshot config.