swiftship/internal/skills/data/features/asc-manual-actions/SKILL.md
Guide users through App Store Connect actions that require manual browser interaction. Use when agreements, tax/banking, privacy policies, or other dashboard-only tasks need attention.
npx skillsauth add abdullah4ai/apple-developer-toolkit asc-manual-actionsInstall 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.
Some App Store Connect tasks cannot be completed via CLI or API. When these come up, guide the user through the required browser action with the exact URL and clear instructions.
Developer program agreements must be accepted in the browser.
When agreements are not active (pre-flight reports AgreementsOK: false):
Your developer agreements need attention before submission can proceed.
[OPTIONS]
- Open agreements page | Opens https://appstoreconnect.apple.com/agreements
- I've already accepted | Re-check agreement status
- Skip for now | Continue (submission may fail)
[/OPTIONS]
After the user says they've accepted, verify by re-running:
asc agreements list --output json
Required before receiving payments for paid apps or in-app purchases. Cannot be set via API.
Tax and banking information must be configured before paid app submission.
[OPTIONS]
- Open tax/banking page | Opens https://appstoreconnect.apple.com/agreements
- Already configured | Continue with submission
- Not applicable | This is a free app with no IAP
[/OPTIONS]
Apple requires a privacy policy URL for apps that:
The AI cannot generate a hosted URL — the user must provide one they control.
A Privacy Policy URL is required. Do you have one?
[OPTIONS]
- Enter URL | [INPUT] Enter your privacy policy URL
- Generate policy | Create a privacy policy document I can host
- Not required | My app does not collect any user data
[/OPTIONS]
If the user selects "Generate policy":
PRIVACY_POLICY.mdApple requires a support URL for all apps. The AI cannot create a hosted page.
A Support URL is required. Do you have one?
[OPTIONS]
- Enter URL | [INPUT] Enter your support page URL
- Use GitHub profile | [INPUT] Enter your GitHub username
- Use email link | [INPUT] Enter your email address
[/OPTIONS]
If the user selects "Use GitHub profile", ask for their GitHub username and construct the URL.
Required for all App Store submissions. Can be set via API but needs user confirmation:
Does your app use third-party content (images, audio, video, or text not created by you)?
[OPTIONS]
- No third-party content | My app only uses original content
- Uses third-party content | My app includes licensed or third-party content
[/OPTIONS]
Then set via:
asc apps update --id "APP_ID" --content-rights "DOES_NOT_USE_THIRD_PARTY_CONTENT"
# or
asc apps update --id "APP_ID" --content-rights "USES_THIRD_PARTY_CONTENT"
Required when a build uses non-exempt encryption:
Does your app use encryption beyond standard HTTPS/TLS?
[OPTIONS]
- No (standard HTTPS only) | Most apps — just uses HTTPS for network calls
- Yes, proprietary encryption | App implements custom encryption algorithms
- Yes, third-party encryption | App uses third-party encryption libraries
[/OPTIONS]
Better approach: Add ITSAppUsesNonExemptEncryption = NO to Info.plist and rebuild, avoiding this question entirely on future submissions.
The privacy nutrition label cannot be set via CLI — it must be completed in the 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.
If data collection IS detected:
The pre-flight scan found data collection patterns. Guide the user:
Data collection patterns were detected in your project. The App Privacy nutrition label must declare what data your app collects.
[OPTIONS]
- Already configured | Privacy labels are set up in the dashboard
- Open dashboard | Open App Store Connect to configure privacy labels
- Help me identify | Help figure out what data my app collects
[/OPTIONS]
If the user selects "Help me identify", use the detected patterns to provide a specific checklist of data types to declare. See asc-submission-prereqs skill for the complete data types reference.
URL: https://appstoreconnect.apple.com/apps (select app > App Privacy)
Effective November 2025. If the app sends ANY personal data to a third-party AI (OpenAI, Anthropic, Google, etc.):
This is a hard rejection reason — apps sharing data with AI without disclosure will be rejected.
Does your app send user data to any third-party AI service?
[OPTIONS]
- Yes, it uses AI APIs | App sends data to external AI services
- No AI services | App does not use external AI
- On-device AI only | All AI processing happens on device
[/OPTIONS]
If yes, verify the app code includes a consent mechanism before the first API call to the AI provider.
Required for App Store submission. Can be set via CLI.
Fields:
When sign-in is detected in the project:
Your app has sign-in functionality. Apple reviewers need demo account credentials to test your app.
[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:
# Check if review details already exist for this version
asc review details-for-version --version-id "VERSION_ID" --output json
# Create 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 review details
asc review details-update --id "DETAIL_ID" \
--demo-account-required \
--demo-account-name "USERNAME" \
--demo-account-password "PASSWORD"
When no sign-in is 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."
Quick reference for manual actions:
| Action | URL | |---|---| | Agreements | https://appstoreconnect.apple.com/agreements | | Tax/Banking | https://appstoreconnect.apple.com/agreements | | API Keys | https://appstoreconnect.apple.com/access/integrations/api | | Certificates | https://developer.apple.com/account/resources/certificates | | App Privacy | https://appstoreconnect.apple.com/apps (select app > App Privacy) | | App Review Info | https://appstoreconnect.apple.com/apps (select app > version > App Review) | | Pricing | https://appstoreconnect.apple.com/apps (select app > Pricing and Availability) |
When the user selects "AI decides all", these manual-action items are exceptions — you MUST still ask about them because AI cannot resolve them autonomously:
For everything else (description, keywords, age rating, copyright, what's new, category, promotional text), auto-fill without asking.
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.