App Store Screenshot Pipeline
SkillDev toolsiOS App Store screenshot automation with xcodebuild/simctl capture, AXe plans, Koubou framing, review artifacts, and `asc` upload.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the App Store Screenshot Pipeline skill
What this skill tells your AI
The instructions your AI receives, as published by xopoko/build-swift-apps in skills/appstore-screenshot-pipeline/SKILL.md and read by ahel’s review.
Before invoking Apple-only binaries, confirm the execution context is macOS. From Windows or Linux, run those steps in a Mac SSH project or through an already configured remote transport; do not retry missing Apple binaries locally.
Build/run the app, capture deterministic screenshots, frame them, review them, then upload through asc.
Defaults: settings .asc/screenshot.settings.json, plan .asc/screenshots.json, raw ./screenshots/raw, framed ./screenshots/framed, frame device iphone-air, Koubou 0.18.1.
Workflow
-
Verify the current CLI surface with
asc screenshots --help, subcommand help, andaxe --version. Ifaxeis missing, install it withbrew install cameroncooke/axe/axeor run./scripts/install-deps.sh --profile screenshots. -
Create/update settings with bundle id, project/scheme, UDID, paths,
frame_enabled,upload_enabled, and upload target. -
Build/install/launch:
xcrun simctl boot "$UDID" || true xcodebuild -project "App.xcodeproj" -scheme "App" -configuration Debug \ -destination "platform=iOS Simulator,id=$UDID" -derivedDataPath ".build/DerivedData" build xcrun simctl install "$UDID" ".build/DerivedData/Build/Products/Debug-iphonesimulator/App.app" xcrun simctl launch "$UDID" "com.example.app"Use
xcodebuild -showBuildSettingsif the bundle path differs. -
Capture with plan:
asc screenshots run --plan ".asc/screenshots.json" --udid "$UDID" --output jsonDuring plan authoring use AXe primitives:
axe describe-ui,axe tap,axe type,axe screenshot. -
Frame with pinned Koubou:
pip install koubou==0.18.1 kou --version asc screenshots list-frame-devices --output json asc screenshots frame --input "./screenshots/raw/home.png" --output-dir "./screenshots/framed" --device "iphone-air" --output jsonIf frames are missing, run
kou setup-framesonce with network access. -
Review:
asc screenshots review-generate --framed-dir "./screenshots/framed" --output-dir "./screenshots/review" asc screenshots review-open --output-dir "./screenshots/review" asc screenshots review-approve --all-ready --output-dir "./screenshots/review" -
Prefer plan/apply for reviewed batches so existing remote screenshots are considered:
asc screenshots plan --app "APP_ID" --version "1.2.3" --review-output-dir "./screenshots/review" --output json asc screenshots apply --app "APP_ID" --version "1.2.3" --review-output-dir "./screenshots/review" --confirm --output jsonDirect upload:
asc screenshots upload --version-localization "LOC_ID" --path "./screenshots/framed" --device-type "IPHONE_69" --output json
Locale Capture
Do not rely on xcrun simctl launch ... -e AppleLanguages; it does not reliably switch app language. Prefer one simulator UDID per locale, set simulator-wide defaults, then capture:
set_simulator_locale() {
UDID="$1"; LOCALE="$2"; LANG="${LOCALE%%-*}"; APPLE_LOCALE="${LOCALE/-/_}"
xcrun simctl boot "$UDID" || true
xcrun simctl spawn "$UDID" defaults write NSGlobalDomain AppleLanguages -array "$LANG"
xcrun simctl spawn "$UDID" defaults write NSGlobalDomain AppleLocale -string "$APPLE_LOCALE"
}
set_simulator_locale "$UDID" "de-DE"
xcrun simctl terminate "$UDID" "com.example.app" || true
asc screenshots capture --bundle-id "com.example.app" --name "home" --udid "$UDID" --output-dir "./screenshots/raw/de-DE" --output json
For manual launches: xcrun simctl launch "$UDID" "com.example.app" -AppleLanguages "(de)" -AppleLocale "de_DE". Parallelize locales with distinct UDIDs and frame/review after wait.
Rules
Use explicit long flags and JSON for machine steps. Ensure files exist before upload. Treat local screenshot automation as experimental in user-facing notes. Use plan/apply for append-limit guardrails. If framing checks fail, reinstall koubou==0.18.1. Validate with asc screenshots sizes --output table and asc screenshots list --version-localization "LOC_ID" --output table.
Signals
- GitHub stars
- 45
- Forks
- 4
- Last commit
- Aug 2026
ahel review
K1binfo
installs-packages
Automated review, not a security audit. Ruleset v1+k2.
Advanced
- Catalog kind
- skill
- Gateway key
appstore-screenshot-pipeline- Source
- github.com/xopoko/build-swift-apps