asc screenshots pipeline (xcodebuild -> AXe -> frame -> asc)
Use this skill for agent-driven screenshot workflows where the app is built and launched with Xcode CLI tools, UI is driven with AXe, and screenshots are uploaded with asc.
Current scope
- Implemented now: build/run, AXe plan capture, frame composition, and upload.
- Device discovery is built-in via
asc screenshots list-frame-devices. - Local screenshot automation commands are experimental in asc cli.
- Framing is pinned to Koubou
0.20.0for deterministic output. - Feedback/issues: https://github.com/rorkai/App-Store-Connect-CLI/issues/new/choose
Defaults
- Settings file:
.asc/shots.settings.json - Capture plan:
.asc/screenshots.json - Raw screenshots dir:
./screenshots/raw - Framed screenshots dir:
./screenshots/framed - Default frame device:
iphone-air
1) Create settings JSON first
Create or update .asc/shots.settings.json:
If you intentionally skip framing, set:
"frame_enabled": false"upload.source_dir": "./screenshots/raw"
2) Build and run app on simulator
Use Xcode CLI for build/install/launch:
Use xcodebuild -showBuildSettings if the app bundle path differs from the default location.
3) Capture screenshots with AXe (or asc screenshots run)
Prefer plan-driven capture:
Useful AXe primitives during plan authoring:
Minimal .asc/screenshots.json example:
4) Frame screenshots with asc screenshots frame
The asc CLI pins framing to Koubou 0.20.0.
Install and verify before running framing steps:
List supported frame device values first:
Frame one screenshot (defaults to iphone-air):
Supported --device values:
- iPhone:
iphone-air(default),iphone-17-pro,iphone-17-pro-max,iphone-16e,iphone-17 - iPad:
ipad-pro-13,ipad-pro-11,ipad-air-13,ipad-air-11,ipad-mini - Other:
mac,watch-series-11,watch-ultra-3,apple-tv
5) Upload screenshots with asc
Generate and review artifacts before upload:
For reviewed multi-locale sets, prefer the plan/apply flow so existing remote screenshot counts are included before upload:
Upload from the configured source directory (default ./screenshots/framed when framing is enabled):
List or validate before upload when needed:
Agent behavior
- Always confirm exact flags with
--helpbefore running commands. - Re-check command paths with
asc screenshots --helpbecause screenshot commands are evolving quickly. - Keep outputs deterministic: default to JSON for machine steps.
- Prefer
asc screenshots list-frame-devices --output jsonbefore selecting a frame device. - Ensure screenshot files exist before upload.
- Use explicit long flags (
--app,--output,--version-localization, etc.). - Treat screenshot-local automation as experimental and call it out in user-facing handoff notes.
- Use
asc screenshots plan/asc screenshots applyfor reviewed batches when you need append-limit guardrails across existing remote screenshots. - If framing fails with a version error, re-install pinned Koubou:
pip install koubou==0.20.0. - If framing fails because device frames are missing, run
kou setup-framesonce with network access.
6) Multi-locale capture (optional)
Do not use xcrun simctl launch ... -e AppleLanguages for localization.
-e is an environment variable pattern and does not reliably switch app language.
For this pipeline, use simulator-wide locale defaults per UDID. This works with
asc screenshots capture, which relaunches the app internally.
If you launch manually (outside asc screenshots capture), use app launch arguments:
7) Parallel execution for speed
Run one locale per simulator UDID in parallel:
Or use xargs with locale:udid pairs:


