{"id":"ca62a725-d9cc-42f2-8123-fb3da575275b","shortId":"TbVQR2","kind":"skill","title":"asc-shots-pipeline","tagline":"Orchestrate iOS screenshot automation with xcodebuild/simctl for build-run, AXe for UI actions, JSON settings and plan files, Koubou-based framing (`asc screenshots frame`), and screenshot upload (`asc screenshots upload`). Use when users ask for automated screenshot capture, AXe","description":"# asc screenshots pipeline (xcodebuild -> AXe -> frame -> asc)\n\nUse 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`.\n\n## Current scope\n- Implemented now: build/run, AXe plan capture, frame composition, and upload.\n- Device discovery is built-in via `asc screenshots list-frame-devices`.\n- Local screenshot automation commands are experimental in asc cli.\n- Framing is pinned to Koubou `0.18.1` for deterministic output.\n- Feedback/issues: https://github.com/rorkai/App-Store-Connect-CLI/issues/new/choose\n\n## Defaults\n- Settings file: `.asc/shots.settings.json`\n- Capture plan: `.asc/screenshots.json`\n- Raw screenshots dir: `./screenshots/raw`\n- Framed screenshots dir: `./screenshots/framed`\n- Default frame device: `iphone-air`\n\n## 1) Create settings JSON first\n\nCreate or update `.asc/shots.settings.json`:\n\n```json\n{\n  \"version\": 1,\n  \"app\": {\n    \"bundle_id\": \"com.example.app\",\n    \"project\": \"MyApp.xcodeproj\",\n    \"scheme\": \"MyApp\",\n    \"simulator_udid\": \"booted\"\n  },\n  \"paths\": {\n    \"plan\": \".asc/screenshots.json\",\n    \"raw_dir\": \"./screenshots/raw\",\n    \"framed_dir\": \"./screenshots/framed\"\n  },\n  \"pipeline\": {\n    \"frame_enabled\": true,\n    \"upload_enabled\": false\n  },\n  \"upload\": {\n    \"version_localization_id\": \"\",\n    \"device_type\": \"IPHONE_65\",\n    \"source_dir\": \"./screenshots/framed\"\n  }\n}\n```\n\nIf you intentionally skip framing, set:\n- `\"frame_enabled\": false`\n- `\"upload.source_dir\": \"./screenshots/raw\"`\n\n## 2) Build and run app on simulator\n\nUse Xcode CLI for build/install/launch:\n\n```bash\nxcrun simctl boot \"$UDID\" || true\n\nxcodebuild \\\n  -project \"MyApp.xcodeproj\" \\\n  -scheme \"MyApp\" \\\n  -configuration Debug \\\n  -destination \"platform=iOS Simulator,id=$UDID\" \\\n  -derivedDataPath \".build/DerivedData\" \\\n  build\n\nxcrun simctl install \"$UDID\" \".build/DerivedData/Build/Products/Debug-iphonesimulator/MyApp.app\"\nxcrun simctl launch \"$UDID\" \"com.example.app\"\n```\n\nUse `xcodebuild -showBuildSettings` if the app bundle path differs from the default location.\n\n## 3) Capture screenshots with AXe (or `asc screenshots run`)\n\nPrefer plan-driven capture:\n\n```bash\nasc screenshots run --plan \".asc/screenshots.json\" --udid \"$UDID\" --output json\n```\n\nUseful AXe primitives during plan authoring:\n\n```bash\naxe describe-ui --udid \"$UDID\"\naxe tap --id \"search_field\" --udid \"$UDID\"\naxe type \"wwdc\" --udid \"$UDID\"\naxe screenshot --output \"./screenshots/raw/home.png\" --udid \"$UDID\"\n```\n\nMinimal `.asc/screenshots.json` example:\n\n```json\n{\n  \"version\": 1,\n  \"app\": {\n    \"bundle_id\": \"com.example.app\",\n    \"udid\": \"booted\",\n    \"output_dir\": \"./screenshots/raw\"\n  },\n  \"steps\": [\n    { \"action\": \"launch\" },\n    { \"action\": \"wait\", \"duration_ms\": 800 },\n    { \"action\": \"screenshot\", \"name\": \"home\" }\n  ]\n}\n```\n\n## 4) Frame screenshots with `asc screenshots frame`\n\nasc cli pins framing to Koubou `0.18.1`.\nInstall and verify before running framing steps:\n\n```bash\npip install koubou==0.18.1\nkou --version  # expect 0.18.1\n# If Koubou reports missing device frames, run once with network access:\nkou setup-frames\n```\n\nList supported frame device values first:\n\n```bash\nasc screenshots list-frame-devices --output json\n```\n\nFrame one screenshot (defaults to `iphone-air`):\n\n```bash\nasc screenshots frame \\\n  --input \"./screenshots/raw/home.png\" \\\n  --output-dir \"./screenshots/framed\" \\\n  --device \"iphone-air\" \\\n  --output json\n```\n\nSupported `--device` values:\n- `iphone-air` (default)\n- `iphone-17-pro`\n- `iphone-17-pro-max`\n- `iphone-16e`\n- `iphone-17`\n- `mac`\n\n## 5) Upload screenshots with asc\n\nGenerate and review artifacts before upload:\n\n```bash\nasc screenshots review-generate --framed-dir \"./screenshots/framed\" --output-dir \"./screenshots/review\"\nasc screenshots review-open --output-dir \"./screenshots/review\"\nasc screenshots review-approve --all-ready --output-dir \"./screenshots/review\"\n```\n\nUpload from the configured source directory (default `./screenshots/framed` when framing is enabled):\n\n```bash\nasc screenshots upload \\\n  --version-localization \"LOC_ID\" \\\n  --path \"./screenshots/framed\" \\\n  --device-type \"IPHONE_65\" \\\n  --output json\n```\n\nList or validate before upload when needed:\n\n```bash\nasc screenshots sizes --output table\nasc screenshots list --version-localization \"LOC_ID\" --output table\n```\n\n## Agent behavior\n- Always confirm exact flags with `--help` before running commands.\n- Re-check command paths with `asc screenshots --help` because screenshot commands are evolving quickly.\n- Keep outputs deterministic: default to JSON for machine steps.\n- Prefer `asc screenshots list-frame-devices --output json` before selecting a frame device.\n- Ensure screenshot files exist before upload.\n- Use explicit long flags (`--app`, `--output`, `--version-localization`, etc.).\n- Treat screenshot-local automation as experimental and call it out in user-facing handoff notes.\n- If framing fails with a version error, re-install pinned Koubou: `pip install koubou==0.18.1`.\n- If framing fails because device frames are missing, run `kou setup-frames` once with network access.\n\n## 6) Multi-locale capture (optional)\n\nDo not use `xcrun simctl launch ... -e AppleLanguages` for localization.\n`-e` is an environment variable pattern and does not reliably switch app language.\n\nFor this pipeline, use simulator-wide locale defaults per UDID. This works with\n`asc screenshots capture`, which relaunches the app internally.\n\n```bash\n# Map each locale to a dedicated simulator UDID.\n# (Create these simulators once with `xcrun simctl create`.)\ndeclare -A LOCALE_UDID=(\n  [\"en-US\"]=\"UDID_EN_US\"\n  [\"de-DE\"]=\"UDID_DE_DE\"\n  [\"fr-FR\"]=\"UDID_FR_FR\"\n  [\"ja-JP\"]=\"UDID_JA_JP\"\n)\n\nset_simulator_locale() {\n  local UDID=\"$1\"\n  local LOCALE=\"$2\"            # e.g. de-DE\n  local LANG=\"${LOCALE%%-*}\"   # de\n  local APPLE_LOCALE=\"${LOCALE/-/_}\" # de_DE\n\n  xcrun simctl boot \"$UDID\" || true\n  xcrun simctl spawn \"$UDID\" defaults write NSGlobalDomain AppleLanguages -array \"$LANG\"\n  xcrun simctl spawn \"$UDID\" defaults write NSGlobalDomain AppleLocale -string \"$APPLE_LOCALE\"\n}\n\nfor LOCALE in \"${!LOCALE_UDID[@]}\"; do\n  UDID=\"${LOCALE_UDID[$LOCALE]}\"\n  echo \"Capturing $LOCALE on $UDID...\"\n  set_simulator_locale \"$UDID\" \"$LOCALE\"\n\n  xcrun simctl terminate \"$UDID\" \"com.example.app\" || true\n  asc screenshots capture \\\n    --bundle-id \"com.example.app\" \\\n    --name \"home\" \\\n    --udid \"$UDID\" \\\n    --output-dir \"./screenshots/raw/$LOCALE\" \\\n    --output json\ndone\n```\n\nIf you launch manually (outside `asc screenshots capture`), use app launch arguments:\n\n```bash\nxcrun simctl launch \"$UDID\" \"com.example.app\" -AppleLanguages \"(de)\" -AppleLocale \"de_DE\"\n```\n\n## 7) Parallel execution for speed\n\nRun one locale per simulator UDID in parallel:\n\n```bash\n#!/bin/bash\n# parallel-capture.sh\n\ndeclare -A LOCALE_UDID=(\n  [\"en-US\"]=\"UDID_EN_US\"\n  [\"de-DE\"]=\"UDID_DE_DE\"\n  [\"fr-FR\"]=\"UDID_FR_FR\"\n  [\"ja-JP\"]=\"UDID_JA_JP\"\n)\n\ncapture_locale() {\n  local LOCALE=\"$1\"\n  local UDID=\"$2\"\n  local LANG=\"${LOCALE%%-*}\"\n  local APPLE_LOCALE=\"${LOCALE/-/_}\"\n\n  echo \"Starting $LOCALE on $UDID\"\n  xcrun simctl boot \"$UDID\" || true\n  xcrun simctl spawn \"$UDID\" defaults write NSGlobalDomain AppleLanguages -array \"$LANG\"\n  xcrun simctl spawn \"$UDID\" defaults write NSGlobalDomain AppleLocale -string \"$APPLE_LOCALE\"\n  xcrun simctl terminate \"$UDID\" \"com.example.app\" || true\n\n  asc screenshots capture \\\n    --bundle-id \"com.example.app\" \\\n    --name \"home\" \\\n    --udid \"$UDID\" \\\n    --output-dir \"./screenshots/raw/$LOCALE\" \\\n    --output json\n\n  echo \"Completed $LOCALE\"\n}\n\nfor LOCALE in \"${!LOCALE_UDID[@]}\"; do\n  capture_locale \"$LOCALE\" \"${LOCALE_UDID[$LOCALE]}\" &\ndone\n\nwait\necho \"All captures done. Now framing...\"\n```\n\nOr use `xargs` with `locale:udid` pairs:\n\n```bash\nprintf \"%s\\n\" \\\n  \"en-US:UDID_EN_US\" \\\n  \"de-DE:UDID_DE_DE\" \\\n  \"fr-FR:UDID_FR_FR\" \\\n  \"ja-JP:UDID_JA_JP\" | xargs -P 4 -I {} bash -c '\n    PAIR=\"{}\"\n    LOCALE=\"${PAIR%%:*}\"\n    UDID=\"${PAIR##*:}\"\n    LANG=\"${LOCALE%%-*}\"\n    APPLE_LOCALE=\"${LOCALE/-/_}\"\n    xcrun simctl boot \"$UDID\" || true\n    xcrun simctl spawn \"$UDID\" defaults write NSGlobalDomain AppleLanguages -array \"$LANG\"\n    xcrun simctl spawn \"$UDID\" defaults write NSGlobalDomain AppleLocale -string \"$APPLE_LOCALE\"\n    xcrun simctl terminate \"$UDID\" \"com.example.app\" || true\n    asc screenshots capture --bundle-id \"com.example.app\" --name \"home\" --udid \"$UDID\" --output-dir \"./screenshots/raw/$LOCALE\" --output json\n  '\n```\n\n## 8) Full multi-locale pipeline example\n\n```bash\n#!/bin/bash\n# full-pipeline-multi-locale.sh\n\ndeclare -A LOCALE_UDID=(\n  [\"en-US\"]=\"UDID_EN_US\"\n  [\"de-DE\"]=\"UDID_DE_DE\"\n  [\"fr-FR\"]=\"UDID_FR_FR\"\n  [\"es-ES\"]=\"UDID_ES_ES\"\n  [\"ja-JP\"]=\"UDID_JA_JP\"\n)\n\nDEVICE=\"iphone-air\"\nRAW_DIR=\"./screenshots/raw\"\nFRAMED_DIR=\"./screenshots/framed\"\n\n# Step 1: Parallel capture with per-simulator locale defaults\nfor LOCALE in \"${!LOCALE_UDID[@]}\"; do\n  (\n    UDID=\"${LOCALE_UDID[$LOCALE]}\"\n    LANG=\"${LOCALE%%-*}\"\n    APPLE_LOCALE=\"${LOCALE/-/_}\"\n\n    xcrun simctl boot \"$UDID\" || true\n    xcrun simctl spawn \"$UDID\" defaults write NSGlobalDomain AppleLanguages -array \"$LANG\"\n    xcrun simctl spawn \"$UDID\" defaults write NSGlobalDomain AppleLocale -string \"$APPLE_LOCALE\"\n    xcrun simctl terminate \"$UDID\" \"com.example.app\" || true\n\n    asc screenshots capture \\\n      --bundle-id \"com.example.app\" \\\n      --name \"home\" \\\n      --udid \"$UDID\" \\\n      --output-dir \"$RAW_DIR/$LOCALE\" \\\n      --output json\n    echo \"Captured $LOCALE\"\n  ) &\ndone\nwait\n\n# Step 2: Parallel framing\nfor LOCALE in \"${!LOCALE_UDID[@]}\"; do\n  (\n    asc screenshots frame \\\n      --input \"$RAW_DIR/$LOCALE/home.png\" \\\n      --output-dir \"$FRAMED_DIR/$LOCALE\" \\\n      --device \"$DEVICE\" \\\n      --output json\n    echo \"Framed $LOCALE\"\n  ) &\ndone\nwait\n\n# Step 3: Generate review (single run, aggregates all locales)\nasc screenshots review-generate \\\n  --framed-dir \"$FRAMED_DIR\" \\\n  --output-dir \"./screenshots/review\"\n\n# Step 4: Upload (run per locale if needed)\nfor LOCALE in \"${!LOCALE_UDID[@]}\"; do\n  asc screenshots upload \\\n    --version-localization \"LOC_ID_FOR_$LOCALE\" \\\n    --path \"$FRAMED_DIR/$LOCALE\" \\\n    --device-type \"IPHONE_65\" \\\n    --output json\ndone\n```","tags":["asc","shots","pipeline","app","store","connect","cli","skills","rorkai","agent-skills","ai-skills","app-store-connect"],"capabilities":["skill","source-rorkai","skill-asc-shots-pipeline","topic-agent-skills","topic-ai-skills","topic-app-store-connect","topic-apple","topic-asc","topic-automation","topic-cicd","topic-cli","topic-devops","topic-ios","topic-macos","topic-testflight"],"categories":["app-store-connect-cli-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/rorkai/app-store-connect-cli-skills/asc-shots-pipeline","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add rorkai/app-store-connect-cli-skills","source_repo":"https://github.com/rorkai/app-store-connect-cli-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 776 github stars · SKILL.md body (10,223 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-02T18:53:02.839Z","embedding":null,"createdAt":"2026-04-18T21:56:50.634Z","updatedAt":"2026-05-02T18:53:02.839Z","lastSeenAt":"2026-05-02T18:53:02.839Z","tsv":"'-17':445,448,456 '/_':789,945,1075,1205 '/bin/bash':900,1134 '/rorkai/app-store-connect-cli/issues/new/choose':130 '/screenshots/framed':145,183,201,430,478,511,526,1179 '/screenshots/raw':141,180,213,340,858,997,1122,1176 '/screenshots/raw/home.png':323,426 '/screenshots/review':482,491,503,1316 '0.18.1':123,366,378,382,654 '1':152,163,331,773,934,1181 '16e':454 '2':214,776,937,1263 '3':271,1295 '4':353,1061,1318 '5':458 '6':672 '65':198,531,1349 '7':886 '8':1126 '800':348 'access':393,671 'action':18,342,344,349 'agent':58,557 'agent-driven':57 'aggreg':1300 'air':151,420,434,442,1173 'all-readi':497 'alway':559 'app':64,164,218,263,332,616,699,721,872 'appl':786,816,942,975,1072,1100,1202,1230 'applelanguag':685,804,881,963,1088,1218 'applelocal':814,883,973,1098,1228 'approv':496 'argument':874 'array':805,964,1089,1219 'artifact':466 'asc':2,28,34,46,52,83,103,116,277,286,357,360,405,422,462,470,483,492,517,542,547,574,593,715,844,868,983,1108,1238,1272,1303,1331 'asc-shots-pipelin':1 'asc/screenshots.json':137,177,290,327 'asc/shots.settings.json':134,160 'ask':40 'author':300 'autom':8,42,111,626 'axe':15,45,50,77,89,275,296,302,308,315,320 'base':26 'bash':226,285,301,374,404,421,469,516,541,723,875,899,1031,1063,1133 'behavior':558 'boot':174,229,337,794,953,1078,1208 'build':13,215,247 'build-run':12 'build/deriveddata':246 'build/deriveddata/build/products/debug-iphonesimulator/myapp.app':252 'build/install/launch':225 'build/run':88 'built':66,100 'built-in':99 'bundl':165,264,333,848,987,1112,1242 'bundle-id':847,986,1111,1241 'c':1064 'call':630 'captur':44,91,135,272,284,676,717,829,846,870,930,985,1010,1020,1110,1183,1240,1258 'check':570 'cli':71,117,223,361 'com.example.app':167,257,335,842,850,880,981,989,1106,1114,1236,1244 'command':112,567,571,579 'complet':1002 'composit':93 'configur':237,507 'confirm':560 'creat':153,157,732,739 'current':84 'de':751,752,754,755,779,780,784,790,791,882,884,885,913,914,916,917,1042,1043,1045,1046,1147,1148,1150,1151 'de-d':750,778,912,1041,1146 'debug':238 'declar':740,902,1136 'dedic':729 'default':131,146,269,416,443,510,586,709,801,811,960,970,1085,1095,1189,1215,1225 'deriveddatapath':245 'describ':304 'describe-ui':303 'destin':239 'determinist':125,585 'devic':96,108,148,195,387,401,410,431,438,528,598,605,659,1170,1285,1286,1346 'device-typ':527,1345 'differ':266 'dir':140,144,179,182,200,212,339,429,477,481,490,502,857,996,1121,1175,1178,1251,1253,1277,1281,1283,1310,1312,1315,1343 'directori':509 'discoveri':97 'done':862,1016,1021,1260,1292,1352 'driven':59,75,283 'durat':346 'e':684,688 'e.g':777 'echo':828,946,1001,1018,1257,1289 'en':745,748,907,910,1036,1039,1141,1144 'en-us':744,906,1035,1140 'enabl':186,189,209,515 'ensur':606 'environ':691 'error':645 'es':1159,1160,1162,1163 'es-':1158 'etc':621 'evolv':581 'exact':561 'exampl':328,1132 'execut':888 'exist':609 'expect':381 'experiment':114,628 'explicit':613 'face':636 'fail':641,657 'fals':190,210 'feedback/issues':127 'field':312 'file':23,133,608 'first':156,403 'flag':562,615 'fr':757,758,760,761,919,920,922,923,1048,1049,1051,1052,1153,1154,1156,1157 'fr-fr':756,918,1047,1152 'frame':27,30,51,92,107,118,142,147,181,185,206,208,354,359,363,372,388,397,400,409,413,424,476,513,597,604,640,656,660,667,1023,1177,1265,1274,1282,1290,1309,1311,1342 'framed-dir':475,1308 'full':1127 'full-pipeline-multi-locale.sh':1135 'generat':463,474,1296,1307 'github.com':129 'github.com/rorkai/app-store-connect-cli/issues/new/choose':128 'handoff':637 'help':564,576 'home':352,852,991,1116,1246 'id':166,194,243,310,334,524,554,849,988,1113,1243,1338 'implement':86 'input':425,1275 'instal':250,367,376,648,652 'intent':204 'intern':722 'io':6,241 'iphon':150,197,419,433,441,444,447,453,455,530,1172,1348 'iphone-16e':452 'iphone-air':149,418,432,440,1171 'ja':763,766,925,928,1054,1057,1165,1168 'ja-jp':762,924,1053,1164 'jp':764,767,926,929,1055,1058,1166,1169 'json':19,155,161,294,329,412,436,533,588,600,861,1000,1125,1256,1288,1351 'keep':583 'kou':379,394,664 'koubou':25,122,365,377,384,650,653 'koubou-bas':24 'lang':782,806,939,965,1070,1090,1200,1220 'languag':700 'launch':68,255,343,683,865,873,878 'list':106,398,408,534,549,596 'list-frame-devic':105,407,595 'loc':523,553,1337 'local':109,193,522,552,620,625,675,687,708,726,742,770,771,774,775,781,783,785,787,788,817,819,821,825,827,830,835,837,859,893,904,931,932,933,935,938,940,941,943,944,948,976,998,1003,1005,1007,1011,1012,1013,1015,1028,1066,1071,1073,1074,1101,1123,1130,1138,1188,1191,1193,1197,1199,1201,1203,1204,1231,1254,1259,1267,1269,1284,1291,1302,1322,1326,1328,1336,1340,1344 'locale/home.png':1278 'locat':270 'long':614 'mac':457 'machin':590 'manual':866 'map':724 'max':451 'minim':326 'miss':386,662 'ms':347 'multi':674,1129 'multi-local':673,1128 'myapp':171,236 'myapp.xcodeproj':169,234 'n':1034 'name':351,851,990,1115,1245 'need':540,1324 'network':392,670 'note':638 'nsglobaldomain':803,813,962,972,1087,1097,1217,1227 'one':414,892 'open':487 'option':677 'orchestr':5 'output':126,293,322,338,411,428,435,480,489,501,532,545,555,584,599,617,856,860,995,999,1120,1124,1250,1255,1280,1287,1314,1350 'output-dir':427,479,488,500,855,994,1119,1249,1279,1313 'outsid':867 'p':1060 'pair':1030,1065,1067,1069 'parallel':887,898,1182,1264 'parallel-capture.sh':901 'path':175,265,525,572,1341 'pattern':693 'per':710,894,1186,1321 'per-simul':1185 'pin':120,362,649 'pip':375,651 'pipelin':4,48,184,703,1131 'plan':22,90,136,176,282,289,299 'plan-driven':281 'platform':240 'prefer':280,592 'primit':297 'printf':1032 'pro':446,450 'pro-max':449 'project':168,233 'quick':582 'raw':138,178,1174,1252,1276 're':569,647 're-check':568 're-instal':646 'readi':499 'relaunch':719 'reliabl':697 'report':385 'review':465,473,486,495,1297,1306 'review-approv':494 'review-gener':472,1305 'review-open':485 'run':14,217,279,288,371,389,566,663,891,1299,1320 'scheme':170,235 'scope':85 'screenshot':7,29,32,35,43,47,60,79,104,110,139,143,273,278,287,321,350,355,358,406,415,423,460,471,484,493,518,543,548,575,578,594,607,624,716,845,869,984,1109,1239,1273,1304,1332 'screenshot-loc':623 'search':311 'select':602 'set':20,132,154,207,768,833 'setup':396,666 'setup-fram':395,665 'shot':3 'showbuildset':260 'simctl':228,249,254,682,738,793,798,808,839,877,952,957,967,978,1077,1082,1092,1103,1207,1212,1222,1233 'simul':172,220,242,706,730,734,769,834,895,1187 'simulator-wid':705 'singl':1298 'size':544 'skill':55 'skill-asc-shots-pipeline' 'skip':205 'sourc':199,508 'source-rorkai' 'spawn':799,809,958,968,1083,1093,1213,1223 'speed':890 'start':947 'step':341,373,591,1180,1262,1294,1317 'string':815,974,1099,1229 'support':399,437 'switch':698 'tabl':546,556 'tap':309 'termin':840,979,1104,1234 'tool':72 'topic-agent-skills' 'topic-ai-skills' 'topic-app-store-connect' 'topic-apple' 'topic-asc' 'topic-automation' 'topic-cicd' 'topic-cli' 'topic-devops' 'topic-ios' 'topic-macos' 'topic-testflight' 'treat':622 'true':187,231,796,843,955,982,1080,1107,1210,1237 'type':196,316,529,1347 'udid':173,230,244,251,256,291,292,306,307,313,314,318,319,324,325,336,711,731,743,747,753,759,765,772,795,800,810,822,824,826,832,836,841,853,854,879,896,905,909,915,921,927,936,950,954,959,969,980,992,993,1008,1014,1029,1038,1044,1050,1056,1068,1079,1084,1094,1105,1117,1118,1139,1143,1149,1155,1161,1167,1194,1196,1198,1209,1214,1224,1235,1247,1248,1270,1329 'ui':17,73,305 'updat':159 'upload':33,36,81,95,188,191,459,468,504,519,538,611,1319,1333 'upload.source':211 'us':746,749,908,911,1037,1040,1142,1145 'use':37,53,221,258,295,612,680,704,871,1025 'user':39,635 'user-fac':634 'valid':536 'valu':402,439 'variabl':692 'verifi':369 'version':162,192,330,380,521,551,619,644,1335 'version-loc':520,550,618,1334 'via':102 'wait':345,1017,1261,1293 'wide':707 'work':713 'workflow':61 'write':802,812,961,971,1086,1096,1216,1226 'wwdc':317 'xarg':1026,1059 'xcode':70,222 'xcodebuild':49,232,259 'xcodebuild/simctl':10 'xcrun':227,248,253,681,737,792,797,807,838,876,951,956,966,977,1076,1081,1091,1102,1206,1211,1221,1232","prices":[{"id":"46e4af21-3b13-4c1e-8a1d-8759c250bcb2","listingId":"ca62a725-d9cc-42f2-8123-fb3da575275b","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"rorkai","category":"app-store-connect-cli-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:56:50.634Z"}],"sources":[{"listingId":"ca62a725-d9cc-42f2-8123-fb3da575275b","source":"github","sourceId":"rorkai/app-store-connect-cli-skills/asc-shots-pipeline","sourceUrl":"https://github.com/rorkai/app-store-connect-cli-skills/tree/main/skills/asc-shots-pipeline","isPrimary":false,"firstSeenAt":"2026-04-18T21:56:50.634Z","lastSeenAt":"2026-05-02T18:53:02.839Z"}],"details":{"listingId":"ca62a725-d9cc-42f2-8123-fb3da575275b","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"rorkai","slug":"asc-shots-pipeline","github":{"repo":"rorkai/app-store-connect-cli-skills","stars":776,"topics":["agent-skills","ai-skills","app-store-connect","apple","asc","automation","cicd","cli","devops","ios","macos","testflight","xcode"],"license":"mit","html_url":"https://github.com/rorkai/app-store-connect-cli-skills","pushed_at":"2026-04-24T08:59:37Z","description":"Skills to automate app store deployed and everything related to it using the asc cli","skill_md_sha":"cbd1db3244e72f14625bf2cada0928d762d78e1b","skill_md_path":"skills/asc-shots-pipeline/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/rorkai/app-store-connect-cli-skills/tree/main/skills/asc-shots-pipeline"},"layout":"multi","source":"github","category":"app-store-connect-cli-skills","frontmatter":{"name":"asc-shots-pipeline","description":"Orchestrate iOS screenshot automation with xcodebuild/simctl for build-run, AXe for UI actions, JSON settings and plan files, Koubou-based framing (`asc screenshots frame`), and screenshot upload (`asc screenshots upload`). Use when users ask for automated screenshot capture, AXe-driven simulator flows, frame composition, or screenshot-to-upload pipelines."},"skills_sh_url":"https://skills.sh/rorkai/app-store-connect-cli-skills/asc-shots-pipeline"},"updatedAt":"2026-05-02T18:53:02.839Z"}}