
Asc Shots Pipeline
Automate iOS simulator screenshot capture, Koubou framing, and App Store Connect upload with asc CLI and AXe-driven UI plans.
Overview
asc-shots-pipeline is an agent skill most often used in Launch (also Build frontend, Ship launch) that automates iOS simulator screenshots through AXe, Koubou framing, and asc upload.
Install
npx skills add https://github.com/rorkai/app-store-connect-cli-skills --skill asc-shots-pipelineWhat is this skill?
- Orchestrates xcodebuild/simctl build-run through AXe plan capture, frame, and asc upload
- Defaults: .asc/shots.settings.json, .asc/screenshots.json, raw ./screenshots/raw, framed ./screenshots/framed
- Pins Koubou 0.18.1 for deterministic frame output; default frame device iphone-air
- Built-in device discovery via asc screenshots list-frame-devices
- Experimental local automation commands—issues routed to App-Store-Connect-CLI GitHub
- Koubou framing pinned to version 0.18.1
- 4 default path conventions: settings, plan, raw dir, framed dir
- Pipeline stages: build/run → AXe capture → frame → asc upload
Adoption & trust: 648 installs on skills.sh; 845 GitHub stars; 3/3 security scanners passed (skills.sh audits).
What problem does it solve?
You need consistent App Store screenshots across devices but manual simulator tours and Preview framing eat days every release.
Who is it for?
Indie iOS devs already using asc CLI who want agent-driven capture plans instead of one-off manual sim sessions.
Skip if: Android-only apps, teams without Xcode/simulator access, or listings that do not need device-framed store artwork.
When should I use this skill?
Use when users ask for automated screenshot capture, AXe-driven simulator flows, frame composition, or screenshot-to-upload pipelines.
What do I get? / Deliverables
You produce framed screenshots under ./screenshots/framed and upload them via asc using checked-in JSON settings and AXe capture plans.
- .asc/shots.settings.json and .asc/screenshots.json capture plan
- Raw captures in ./screenshots/raw and framed assets in ./screenshots/framed
- Uploaded screenshot sets via asc screenshots upload
Recommended Skills
Journey fit
Spans multiple journey phases - primary shelf plus alternate fits below.
The canonical shelf is Launch because the pipeline’s end state is store-ready framed screenshots uploaded for ASO listings. aso is the fit: device-framed screenshots, locale sets, and upload are core App Store presentation work—not day-one coding.
Where it fits
Define AXe steps in screenshots.json while UI screens are still stabilizing on the simulator.
Regenerate raw and framed sets right before submission when copy or hero screens changed.
Upload framed device shots for a new locale or device class without relearning asc upload flags.
How it compares
End-to-end screenshot pipeline skill, not a general asc metadata or TestFlight submission workflow.
Common Questions / FAQ
Who is asc-shots-pipeline for?
Solo builders shipping native iOS apps who use the App Store Connect CLI and want repeatable simulator-to-upload screenshot automation.
When should I use asc-shots-pipeline?
At Launch for ASO refreshes; during Build when validating UI flows worth showing in store frames; and pre-submission when batching locale or device sizes.
Is asc-shots-pipeline safe to install?
It runs shell/Xcode tooling and may upload to Apple; review Security Audits on this page and run captures on non-production Apple accounts first.
SKILL.md
READMESKILL.md - Asc Shots Pipeline
# 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.18.1` for 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`: ```json { "version": 1, "app": { "bundle_id": "com.example.app", "project": "MyApp.xcodeproj", "scheme": "MyApp", "simulator_udid": "booted" }, "paths": { "plan": ".asc/screenshots.json", "raw_dir": "./screenshots/raw", "framed_dir": "./screenshots/framed" }, "pipeline": { "frame_enabled": true, "upload_enabled": false }, "upload": { "version_localization_id": "", "device_type": "IPHONE_65", "source_dir": "./screenshots/framed" } } ``` 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: ```bash xcrun simctl boot "$UDID" || true xcodebuild \ -project "MyApp.xcodeproj" \ -scheme "MyApp" \ -configuration Debug \ -destination "platform=iOS Simulator,id=$UDID" \ -derivedDataPath ".build/DerivedData" \ build xcrun simctl install "$UDID" ".build/DerivedData/Build/Products/Debug-iphonesimulator/MyApp.app" xcrun simctl launch "$UDID" "com.example.app" ``` 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: ```bash asc screenshots run --plan ".asc/screenshots.json" --udid "$UDID" --output json ``` Useful AXe primitives during plan authoring: ```bash axe describe-ui --udid "$UDID" axe tap --id "search_field" --udid "$UDID" axe type "wwdc" --udid "$UDID" axe screenshot --output "./screenshots/raw/home.png" --udid "$UDID" ``` Minimal `.asc/screenshots.json` example: ```json { "version": 1, "app": { "bundle_id": "com.example.app", "udid": "booted", "output_dir": "./screenshots/raw" }, "steps": [ { "action": "launch" }, { "action": "wait", "duration_ms": 800 }, { "action": "screenshot", "name": "home" } ] } ``` ## 4) Frame screenshots with `asc screenshots frame` The asc CLI pins framing to Koubou `0.18.1`. Install and verify before running framing steps: ```bash pip install koubou==0.18.1 kou --version # expect 0.18.1 # If Koubou reports missing device frames, run once with network access: kou setup-frames ``` List supported frame device values first: ```bash asc screenshots list-frame-devices --output json ``` Frame one screenshot (defaults to `iphone-air`): ```bash asc screenshots frame \ --input "./screenshots/raw/home.png" \ --output-dir "./screenshots/framed" \ --device "iphone-air" \ --output json ``` Supported `--device` values: - `iphone-air` (default) - `iphone-17-pro` - `iphone-17-pro-max` - `iphone-16e` - `iphon