From rudrankriyam-app-store-connect-cli-skills-17
Preflights App Store submissions using asc CLI: verifies build status, encryption compliance, content rights declaration, version metadata, localizations, screenshots, and privacy readiness. Use when shipping or troubleshooting iOS review submissions.
npx claudepluginhub ilderaj/agent-plugin-marketplace --plugin community--asc-cli-skillsThis skill uses the workspace's default tool permissions.
Use this skill to reduce review submission failures and monitor status.
Checks iOS app readiness for App Store submission and drives asc CLI release flow, fixing first-time issues for availability, IAP, subscriptions, Game Center, and App Privacy.
Routes App Store submission tasks to specialist skills: pre-submission checklists, rejection diagnosis, metadata specs, privacy manifests, age ratings, export compliance, and appeals.
Automates iOS/macOS app deployment to App Store Connect using asc CLI: TestFlight builds, App Store submissions, metadata/screenshots uploads, certificates/profiles management, review status checks, and Xcode Cloud workflows.
Share bugs, ideas, or general feedback.
Use this skill to reduce review submission failures and monitor status.
asc builds info --build-id "BUILD_ID"
Check:
processingState is VALIDusesNonExemptEncryption - if true, requires encryption declarationIf usesNonExemptEncryption: true:
# If the app should be exempt, patch the local plist helper, rebuild, and re-upload
asc encryption declarations exempt-declare --plist "./Info.plist"
# List existing declarations
asc encryption declarations list --app "APP_ID"
# Create declaration if needed
asc encryption declarations create \
--app "APP_ID" \
--app-description "Uses standard HTTPS/TLS" \
--contains-proprietary-cryptography=false \
--contains-third-party-cryptography=true \
--available-on-french-store=true
# Assign to build
asc encryption declarations assign-builds \
--id "DECLARATION_ID" \
--build "BUILD_ID"
If the app truly uses only exempt transport encryption, prefer asc encryption declarations exempt-declare --plist "./Info.plist" and rebuild instead of creating a declaration that does not match the binary.
Required for all App Store submissions:
# Check current status
asc apps content-rights view --app "APP_ID"
# Set it for most apps
asc apps content-rights edit --app "APP_ID" --uses-third-party-content=false
Valid values:
DOES_NOT_USE_THIRD_PARTY_CONTENTUSES_THIRD_PARTY_CONTENT# Check version details
asc versions view --version-id "VERSION_ID" --include-build
# Verify copyright is set
asc versions update --version-id "VERSION_ID" --copyright "2026 Your Company"
# List version localizations
asc localizations list --version "VERSION_ID"
# Check required fields: description, keywords, whatsNew, supportUrl
Each locale needs screenshots for the target platform.
# List app info IDs (if multiple exist)
asc apps info list --app "APP_ID"
# Check privacy policy URL
asc localizations list --app "APP_ID" --type app-info --app-info "APP_INFO_ID"
asc can warn about App Privacy readiness, but the public App Store Connect API
cannot verify whether App Privacy is fully published. Before final submission:
asc submit preflight --app "APP_ID" --version "1.2.3" --platform IOS
asc validate --app "APP_ID" --version "1.2.3" --platform IOS
Prefer the version string form for top-level readiness checks in this skill so it stays aligned with asc submit preflight. Lower-level commands later in this guide still use VERSION_ID where the API requires it.
If either command reports an App Privacy advisory, the public API cannot verify publish state. Use the web-session privacy workflow if you rely on those endpoints:
asc web privacy pull --app "APP_ID" --out "./privacy.json"
asc web privacy plan --app "APP_ID" --file "./privacy.json"
asc web privacy apply --app "APP_ID" --file "./privacy.json"
asc web privacy publish --app "APP_ID" --confirm
If you do not want to use the experimental asc web privacy ... commands,
confirm App Privacy manually in App Store Connect:
https://appstoreconnect.apple.com/apps/APP_ID/appPrivacy
If the app sells subscriptions or in-app purchases, validate those separately before submit:
asc validate iap --app "APP_ID" --output table
asc validate subscriptions --app "APP_ID" --output table
In current asc, asc validate subscriptions expands MISSING_METADATA into a per-subscription diagnostics matrix. Use it to identify missing review screenshots, promotional images, pricing or availability coverage gaps, offer readiness, and app/build evidence before retrying submit or first-review attach.
Use --output json --pretty when you want exact territory gaps in machine-readable form.
# Create submission
asc review submissions-create --app "APP_ID" --platform IOS
# Add version to submission
asc review items-add \
--submission "SUBMISSION_ID" \
--item-type appStoreVersions \
--item-id "VERSION_ID"
# Submit for review
asc review submissions-submit --id "SUBMISSION_ID" --confirm
asc submit preflight --app "APP_ID" --version "1.2.3" --platform IOS
asc submit create --app "APP_ID" --version "1.2.3" --build "BUILD_ID" --confirm
Use --platform when multiple platforms exist.
# Check submission status
asc submit status --id "SUBMISSION_ID"
asc submit status --version-id "VERSION_ID"
# List all submissions
asc review submissions-list --app "APP_ID" --paginate
# Cancel submission
asc submit cancel --id "SUBMISSION_ID" --confirm
# Or via review API
asc review submissions-cancel --id "SUBMISSION_ID" --confirm
Fix issues, then re-submit.
Check:
The build has usesNonExemptEncryption: true. Either:
ITSAppUsesNonExemptEncryption = NO in Info.plistUse --app-info flag with the correct app info ID:
asc apps info list --app "APP_ID"
asc submit create uses the new reviewSubmissions API automatically.asc submit preflight can return non-blocking advisories; review them before submitting.asc apps content-rights view/edit over ad-hoc app JSON inspection.asc validate subscriptions now provides much richer per-subscription diagnostics for MISSING_METADATA cases.asc web privacy pull|plan|apply|publish is the CLI path for App Privacy.--output table when you want human-readable status.--platform MAC_OS.