About asc-check-readiness
asc-check-readiness is a command-line skill for checking whether an App Store version meets key submission requirements. It reports blocking issues separately from warnings and provides a submit command when its pre-check passes.
Key features
- 01Checks version state, build, pricing, and review details
- 02Separates blocking failures from warnings
- 03Returns readiness report and submit affordance
- 04Identifies common fixes for failed checks
Use cases
- 01Check a version before App Store submission
- 02Gate a submission in a CI script
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ tddworks/ asc-cli-skills --skill asc-check-readinessAfter installing, type/asc-check-readinessin Claude Code to confirm it loaded.
Details
From the project READMEasc versions check-readiness
Pre-flight check that aggregates all App Store submission requirements for a version.
Command
asc versions check-readiness --version-id <VERSION_ID> [--pretty]
Runs 6 API checks and returns a VersionReadiness report.
Reading the Output
Top-level decision field
"isReadyToSubmit": true → safe to submit; affordances.submit is present
"isReadyToSubmit": false → one or more MUST FIX checks failed
Check severity
| Field | Severity | Blocks isReadyToSubmit? |
|---|---|---|
stateCheck | MUST FIX | Yes — state must be PREPARE_FOR_SUBMISSION |
buildCheck | MUST FIX | Yes — build must be linked, valid, not expired |
pricingCheck | MUST FIX | Yes — app must have a price schedule configured |
reviewContactCheck | SHOULD FIX | No — warning only, submission still proceeds |
localizations[].pass | SHOULD FIX | No — Apple may reject post-submit |
Readiness is a pre-check, not Apple's verdict. Apple runs more checks when the version is added to a submission — every required device screenshot size (e.g. iPad 12.9"), the content rights declaration, published App Privacy answers — which check-readiness doesn't see. So isReadyToSubmit: true can still be refused at submit time. When that happens, asc versions submit / asc review-submissions items add print Apple's reasons one per line (Apple refused the review submission: … - <reason>); relay each as something to fix. See submit-with-products.md.
Build check fields
"buildCheck": {
"linked": true,
"valid": true,
"notExpired": true,
"buildVersion": "2.1.0 (102)",
"pass": true
}
pass = linked && valid && notExpired
CAEOAS — Use Affordances
When isReadyToSubmit == true, the response includes affordances.submit:
"affordances": {
"checkReadiness": "asc versions check-readiness --version-id v-123",
"listLocalizations": "asc version-localizations list --version-id v-123",
"submit": "asc versions submit --version-id v-123"
}
Always copy affordances.submit directly — never construct the submit command manually.
When isReadyToSubmit == false, affordances.submit is absent.
Typical Workflow
# 1. Find the version in PREPARE_FOR_SUBMISSION
asc versions list --app-id <APP_ID> --output table
# 2. Check readiness (use checkReadiness affordance from step 1 output)
asc versions check-readiness --version-id <VERSION_ID> --pretty
# 3a. Ready → submit using affordances.submit value
asc versions submit --version-id <VERSION_ID>
# 3b. Not ready → diagnose and fix (see Fix Guide below)
Fix Guide
| Failing check | How to fix |
|---|---|
stateCheck fails | Version is already live or in review — create a new version with asc versions create |
buildCheck.linked == false | Link a build: asc versions set-build --version-id <id> --build-id <id> |
buildCheck.valid == false | Build is still processing — wait and re-check, or upload a new build |
buildCheck.notExpired == false | Build expired — upload a new build with asc builds upload |
pricingCheck fails | asc apps price-points list --app-id <id> then asc apps prices set --app-id <id> --base-territory USA --price-point-id <id> (0.0 = Free) |
reviewContactCheck fails | asc version-review-detail update --version-id <id> --contact-email [email protected] --contact-phone "+1-555-0100" |
CI Gate Script
#!/bin/bash
set -e
RESULT=$(asc versions check-readiness --version-id "$VERSION_ID")
IS_READY=$(echo "$RESULT" | jq -r '.data[0].isReadyToSubmit')
if [ "$IS_READY" = "true" ]; then
eval "$(echo "$RESULT" | jq -r '.data[0].affordances.submit')"
else
echo "NOT ready. Failing checks:"
echo "$RESULT" | jq '.data[0] | {stateCheck, buildCheck, pricingCheck}'
exit 1
fi