swiftship/internal/skills/data/features/asc-submission-prereqs/SKILL.md
Complete App Store submission prerequisites checklist including privacy, data collection, AI disclosure, screenshots, and metadata requirements. Use when preparing an app for App Store review or diagnosing submission failures.
npx skillsauth add abdullah4ai/apple-developer-toolkit asc-submission-prereqsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Complete checklist of everything required before asc submit can succeed. Work through each section in order. Use pre-flight context to skip items already verified.
VALID processing stateCheck: asc builds list --app APP_ID --sort -uploadedDate --limit 1 --output json
All fields must be set for each localization:
| Field | Max | Required | Notes | |---|---|---|---| | Description | 4000 chars | Yes | First 3 lines visible before "more" | | Keywords | 100 chars | Yes | Comma-separated, no spaces after commas | | What's New | 4000 chars | Yes (updates) | Release notes | | Support URL | URL | Yes | Must be live and accessible | | Copyright | text | Yes | e.g. "2026 Company Name" |
Check: asc localizations list --version VERSION_ID --output json
Required for ALL apps. Must be:
Ask user:
A Privacy Policy URL is required for App Store submission. Do you have one?
[OPTIONS]
- Enter URL | [INPUT] Enter your privacy policy URL
- Help me create one | Generate a policy document I can host
- Not sure | Help me determine if I need one
[/OPTIONS]
Cannot be set via CLI — must be completed in App Store Connect dashboard.
Check pre-flight context for Data collection: detected or not detected.
If data collection is NOT detected:
Tell the user:
Your app doesn't appear to collect user data. Go to App Store Connect > your app > App Privacy > Get Started, and select "No, we do not collect data from this app", then click Publish.
Navigation: https://appstoreconnect.apple.com/apps (select app > App Privacy)
If data collection IS detected:
The pre-flight scan found data collection patterns in the project code. Guide the user through the privacy nutrition label declaration:
See references/privacy-data-types.md for the complete data types list.
Categories include: Contact Info, Health & Fitness, Financial Info, Location, Sensitive Info, Contacts, User Content, Browsing/Search History, Identifiers, Purchases, Usage Data, Diagnostics.
The App Privacy nutrition label must be configured in App Store Connect.
[OPTIONS]
- Already configured | I've set up privacy labels in the dashboard
- Open dashboard | Open App Store Connect to configure privacy labels
- Help me identify | Help me figure out what data my app collects
[/OPTIONS]
URL: https://appstoreconnect.apple.com/apps (select app > App Privacy)
If the app sends ANY user data to a third-party AI service (OpenAI, Anthropic, Google, etc.):
Ask user:
Does your app send any user data to a third-party AI service (OpenAI, Claude, Gemini, etc.)?
[OPTIONS]
- Yes, it uses AI APIs | App sends data to external AI services
- No AI services | App does not communicate with external AI
- Uses on-device AI only | AI processing happens entirely on device
[/OPTIONS]
If yes, verify the app includes:
Common patterns that require privacy disclosure:
| Pattern | Data Types to Declare | |---|---| | Text sent to LLM API | User Content (Other), Usage Data | | Images sent to AI vision | Photos or Videos, User Content | | Voice/audio to speech API | Audio Data, User Content | | Analytics SDK (Firebase, etc.) | Usage Data, Diagnostics, Device ID | | Crash reporting (Sentry, etc.) | Diagnostics (Crash Data, Performance) | | User accounts/auth | Contact Info, Identifiers | | Push notifications | Identifiers (Device ID) | | Location features | Location (Precise or Coarse) | | In-app purchases | Purchases, Financial Info | | Backend API with user data | Depends on what's transmitted |
Can be set via CLI using asc review commands.
Required fields:
Check pre-flight context for Project sign-in: detected/not detected.
If sign-in detected:
Your app has sign-in functionality. Apple requires demo account credentials for the review team.
[OPTIONS]
- Enter credentials | [INPUT] Enter demo username and password (format: username / password)
- Not ready yet | I need to create a test account first
- Skip for now | Continue without (submission may be rejected)
[/OPTIONS]
After receiving credentials, set them via CLI:
# First check if review details exist
asc review details-for-version --version-id "VERSION_ID" --output json
# Create or update review details with demo credentials
asc review details-create --version-id "VERSION_ID" \
--demo-account-required \
--demo-account-name "USERNAME" \
--demo-account-password "PASSWORD" \
--contact-email "EMAIL" \
--contact-first-name "FIRST" \
--contact-last-name "LAST" \
--contact-phone "PHONE"
# Or update existing details
asc review details-update --id "DETAIL_ID" \
--demo-account-required \
--demo-account-name "USERNAME" \
--demo-account-password "PASSWORD"
If no sign-in detected:
Set review details without demo credentials:
asc review details-create --version-id "VERSION_ID" \
--contact-email "EMAIL" \
--contact-first-name "FIRST" \
--contact-last-name "LAST" \
--contact-phone "PHONE" \
--notes "No sign-in required"
Tell the user: "Your app doesn't require sign-in, so demo credentials aren't needed."
Must be set. Ask if not configured:
What age rating fits your app?
[OPTIONS]
- 4+ | No objectionable content
- 9+ | Mild cartoon or fantasy violence
- 12+ | Infrequent mild language, simulated gambling
- 17+ | Frequent intense violence, mature themes
[/OPTIONS]
Check: asc apps get --id APP_ID --output json (look for contentRightsDeclaration)
Required for all submissions:
Does your app use third-party content (images, audio, video, or text not created by you)?
[OPTIONS]
- No third-party content | Only original content
- Uses third-party content | Includes licensed or third-party material
[/OPTIONS]
Set: asc apps update --id APP_ID --content-rights DOES_NOT_USE_THIRD_PARTY_CONTENT
Required if app uses encryption beyond standard HTTPS:
Does your app use encryption beyond standard HTTPS/TLS?
[OPTIONS]
- No, standard HTTPS only | Most apps — just uses HTTPS for networking
- Yes, custom encryption | App implements custom or third-party encryption
[/OPTIONS]
Best approach: Add ITSAppUsesNonExemptEncryption = NO to Info.plist before building.
Required per device type the app supports. Minimum 1, maximum 10 per locale.
For iPhone apps, required sizes (most common):
See references/screenshot-sizes.md for all device sizes.
Check: asc screenshots list --version-localization LOC_ID --output table
If missing, use OPTIONS:
Screenshots are required. How would you like to provide them?
[OPTIONS]
- Upload screenshots | Open browser to drag-and-drop images
- Capture from simulator | Auto-capture from the running app
- Skip for now | Continue without (submission will fail)
[/OPTIONS]
IconReady flagPrimary category required. Ask if not set:
What category best fits your app?
[OPTIONS]
- Utilities | Tools and utilities
- Productivity | Work and task management
- Finance | Banking, payments, budgeting
- Health & Fitness | Health tracking, workouts
- Education | Learning and teaching
- Entertainment | Fun and leisure
- Social Networking | Communication and social
- Games | Interactive games
- Other | I'll specify
[/OPTIONS]
Only after ALL items pass: show preview, then submit.
tools
Apple platform skill for docs, WWDC lookup, App Store Connect work, and SwiftUI app generation. Use repo-local `node cli.js` for Apple docs and WWDC search, `appledev store` for App Store Connect workflows, and `appledev build` for app scaffolding or fix loops on macOS. USE WHEN: Apple APIs, WWDC sessions, TestFlight/App Store tasks, or building/fixing Apple-platform apps. DON'T USE WHEN: non-Apple platforms, generic backend work, or general web research. EDGE CASES: docs-only queries use `node cli.js` in this repo, not `appledev`; release workflows use `appledev store`; app scaffolding uses `appledev build`; rules-only requests can read `references/ios-rules/` or `references/swiftui-guides/` progressively without invoking binaries.
tools
All-in-one Apple developer skill with three integrated tools shipped as a single unified binary. (1) Documentation search across Apple frameworks, symbols, and 1,267 WWDC sessions from 2014-2025. No credentials needed. (2) App Store Connect CLI with 120+ commands covering builds (find/wait/upload), TestFlight, pre-submission validate, submissions, signing, subscriptions (family-sharable), IAP, analytics, Xcode Cloud, metadata workflows, release pipeline dashboard, insights, win-back offers, promoted purchases, product pages, nominations, accessibility declarations, pre-orders, pricing filters, localizations update, diff, webhooks with local receiver, workflow automation, and more. Requires App Store Connect API key. (3) Multi-platform app builder (iOS/watchOS/tvOS/iPad/macOS/visionOS) that generates complete Swift/SwiftUI apps from natural language with auto-fix, simulator launch, interactive chat mode, and open-in-Xcode. Requires an LLM API key and Xcode. Includes 38 iOS development rules and 12 SwiftUI best practice guides for Liquid Glass, navigation, state management, and modern APIs. All three tools ship as one binary (appledev). USE WHEN: Apple API docs, App Store Connect management, WWDC lookup, or building iOS/watchOS/tvOS/macOS/visionOS apps from scratch. DON'T USE WHEN: non-Apple platforms or general coding.
testing
watchOS complications: WidgetKit complication families, accessory sizes, timeline providers for watch face. Use when implementing watchOS-specific patterns related to widgets.
development
watchOS haptic feedback: WKInterfaceDevice preset haptic types for wrist-based feedback. Use when implementing watchOS-specific patterns related to haptics.