
Asc Shots Pipeline
Orchestrate iOS simulator screenshot capture with AXe, Koubou framing, and App Store Connect upload using the asc CLI.
Overview
asc-shots-pipeline is an agent skill most often used in Launch (also Build, Ship) that orchestrates iOS simulator screenshots from build-run through AXe capture, Koubou framing, and asc upload.
Install
npx skills add https://github.com/rudrankriyam/asc-skills --skill asc-shots-pipelineWhat is this skill?
- End-to-end flow: xcodebuild/simctl build-run → AXe plan capture → frame → asc upload
- JSON-driven `.asc/shots.settings.json` and `.asc/screenshots.json` capture plans
- Raw and framed output dirs with default iPhone Air frame device
- Device discovery via `asc screenshots list-frame-devices`
- Framing pinned to Koubou 0.18.1 for deterministic composition
- Koubou framing pinned to version 0.18.1
- Default frame device: iphone-air
- Standard paths: .asc/shots.settings.json, .asc/screenshots.json, ./screenshots/raw, ./screenshots/framed
Adoption & trust: 965 installs on skills.sh; 845 GitHub stars; 3/3 security scanners passed (skills.sh audits).
What problem does it solve?
You have an iOS app in Xcode but no repeatable way to generate framed App Store screenshots and push them to App Store Connect.
Who is it for?
Indie iOS developers automating ASO screenshot production with Xcode, simctl, AXe, and the asc CLI on a Mac.
Skip if: Android-only apps, manual one-off screenshots without automation, or teams without Xcode and a bootable simulator UDID.
When should I use this skill?
When users ask for automated screenshot capture, AXe-driven simulator flows, frame composition, or screenshot-to-upload pipelines.
What do I get? / Deliverables
You get versioned JSON settings, AXe-driven raw captures, Koubou-framed assets, and uploads via asc screenshots commands ready for store listing.
- Raw simulator screenshots under ./screenshots/raw
- Framed ASO images under ./screenshots/framed
- Upload-ready assets via asc screenshots upload
Recommended Skills
Journey fit
Spans multiple journey phases - primary shelf plus alternate fits below.
Canonical shelf is Launch ASO because the pipeline ends in framed store assets uploaded for App Store listing optimization. ASO subphase matches automated screenshot generation, device framing, and asc upload—the core App Store presentation workflow.
Where it fits
Boot the simulator and run AXe against key UI states before marketing copy is final.
Produce framed screenshot sets as part of release checklist before submission.
Upload refreshed framed devices to App Store Connect for a version bump.
How it compares
Agent-driven Xcode plus asc CLI pipeline instead of ad-hoc Simulator screenshots and manual App Store Connect uploads.
Common Questions / FAQ
Who is asc-shots-pipeline for?
Solo and indie iOS builders using Claude Code, Cursor, or Codex to automate simulator UI flows and App Store screenshot delivery.
When should I use asc-shots-pipeline?
Use it in Launch for ASO asset runs, in Build when wiring AXe JSON plans and simctl launch, and in Ship launch prep when you need framed shots uploaded before release.
Is asc-shots-pipeline safe to install?
The skill runs shell, Xcode, and upload tooling—review repo trust and the Security Audits panel on this page; it will modify project build outputs and screenshot directories locally.
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