
Asc Shots Pipeline
Automate iOS simulator screenshot capture, device framing, and App Store Connect upload for indie apps shipping on the App Store.
Overview
asc-shots-pipeline is an agent skill most often used in Launch (also Build integrations, Ship launch prep) that orchestrates iOS simulator screenshots from xcodebuild through AXe capture, Koubou framing, and asc upload.
Install
npx skills add https://github.com/rudrankriyam/app-store-connect-cli-skills --skill asc-shots-pipelineWhat is this skill?
- End-to-end flow: xcodebuild/simctl build-run → AXe UI plan capture → Koubou 0.18.1 framing → `asc screenshots upload`
- JSON-driven config: `.asc/shots.settings.json`, `.asc/screenshots.json`, raw/framed output dirs
- Built-in frame device discovery via `asc screenshots list-frame-devices` (default device `iphone-air`)
- Orchestrates AXe-driven simulator UI actions from a capture plan file
- Experimental local automation commands documented with pinned Koubou for deterministic frames
- Koubou framing pinned to version 0.18.1
- Default settings path `.asc/shots.settings.json` and plan `.asc/screenshots.json`
Adoption & trust: 2k 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 device frames but manual simulator tours and Photoshop workflows do not scale with each release.
Who is it for?
Indie iOS developers already using the App Store Connect CLI who want agent-driven, reproducible screenshot batches tied to Xcode schemes and JSON plans.
Skip if: Android or Play Console assets, marketing shots that require real-device photography only, or teams without Xcode/simulator tooling on the agent host.
When should I use this skill?
Users ask for automated screenshot capture, AXe-driven simulator flows, frame composition, or screenshot-to-upload pipelines for iOS.
What do I get? / Deliverables
After the pipeline runs you have framed assets under `./screenshots/framed` ready for `asc screenshots upload` against your Connect metadata.
- Framed PNG set in `./screenshots/framed`
- Configured `.asc/shots.settings.json` and capture plan
- Upload-ready assets via `asc screenshots upload`
Recommended Skills
Journey fit
Spans multiple journey phases - primary shelf plus alternate fits below.
App Store listing screenshots are the primary ASO asset; this pipeline’s terminal step is `asc screenshots upload`, so launch/aso is the canonical shelf even though build steps precede it. ASO subphase covers framed store screenshots, device sets, and Connect upload—not day-to-day Xcode feature work.
Where it fits
After a navigation redesign, rebuild the app and re-run the AXe capture plan to refresh raw simulator shots.
Before submission, frame all locales and verify upload paths match Connect’s screenshot slots.
Ship a full device matrix (e.g. iphone-air frames) for a seasonal ASO refresh without hand-editing every PNG.
How it compares
A scripted App Store screenshot workflow skill—not a generic browser screenshot MCP or manual Figma-only ASO kit.
Common Questions / FAQ
Who is asc-shots-pipeline for?
Solo and indie iOS builders shipping with Xcode who use the asc CLI and want automated simulator captures, framing, and Connect upload orchestration from an coding agent.
When should I use asc-shots-pipeline?
Use it during Launch when refreshing ASO screenshot sets, after Build UI changes to regenerate framed assets, and in Ship launch prep before submitting a new App Store version.
Is asc-shots-pipeline safe to install?
The skill drives local shell commands (xcodebuild, simctl, asc) and may touch network for uploads; review the Security Audits panel on this Prism page before granting shell and filesystem access to your agent.
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