app-store-submission
Purpose
Take a verified build from "ready to ship" to "uploaded to store with reviewer credentials, metadata, screenshots, and policy URLs filled out." Stop at the human-required final tap.
When to trigger
Trigger on these user phrases. Match loosely.
- "submit to App Store"
- "publish my app"
- "release to TestFlight"
- "push to Apple"
- "Google Play submission"
- "EAS submit"
- "ship it"
Pre-flight refusals
The skill refuses to start unless:
TEST_RESULTS.md shows tier one, two, and three PASS within the last seventy-two hours.
SECURITY_AUDIT.md shows a GREEN verdict within the last seven days.
app.json has a valid bundle ID, version, and icon path.
eas.json has a production profile.
If any check fails, the skill names the failed item and exits.
Inputs to collect
- Target platform:
ios, android, or both.
- Distribution channel:
testflight or production (iOS), internal or production (Android).
- App Store Connect metadata YAML path (defaults to
store/app-store-metadata.yaml).
- Privacy policy URL slug (defaults to project slug).
- Test reviewer credentials (existing or generate new).
Behavior
Step 1: privacy policy
- Read or generate
store/privacy-policy.md from the template.
- Push it to
contact.aigniteconsulting.ai/privacy/<slug>.html.
- Record the URL in metadata.
Step 2: support page
- Read or generate
store/support.md from the template.
- Push it to
contact.aigniteconsulting.ai/support/<slug>.html.
- Record the URL in metadata.
Step 3: build
- Run
eas build --profile production --platform <target>.
- Wait for the build to finish.
- Cache the build artifact URL.
Step 4: screenshots
- Run the running app on iPhone Mirroring (or the Android emulator).
- Capture screenshots in every required size:
- iOS: 6.7" (1290x2796), 6.5" (1284x2778), 5.5" (1242x2208), iPad 12.9" (2048x2732)
- Android: phone (1080x1920) and tablet (1200x1920)
- Save to
store/screenshots/<platform>/<size>/<screen-name>.png.
- Annotate each with a short caption matching the metadata YAML.
Step 5: metadata
- Read
store/app-store-metadata.yaml.
- Required fields: name, subtitle, description (4000 chars max iOS, 4000 Android), keywords (100 chars iOS), category, age rating, contact email, support URL, privacy URL.
Step 6: test reviewer account
- Check if a reviewer user exists in Supabase. If not, create one with a known email and password.
- Add the credentials to the App Review Information block.
Step 7: submit
- Run
eas submit --platform <target>.
- Wait for the upload to complete.
- Print the App Store Connect or Google Play Console deep link.
- Prompt the user to log in and tap the final submit button.
Hard constraints
- Refuse to submit without a recent three-tier test PASS.
- Refuse to submit without a recent security audit GREEN.
- Privacy policy and support URLs must resolve to 200 before submission.
- Reviewer credentials must work against the production Supabase project.
Composes with
- Runs after
three-tier-test and security-audit.
- Final step in the
mcp-to-mobile pipeline.
References
- references/apple-checklist.md - Apple submission requirements.
- references/google-checklist.md - Google Play requirements.
- references/privacy-policy-template.md - AiGNITE standard privacy language.
1---2name: app-store-submission3description: Runs the AiGNITE EAS Submit pipeline end to end. Generates privacy policies hosted on contact.aigniteconsulting.ai, produces required screenshots, fills App Store Connect or Google Play metadata from a YAML config, creates the test-reviewer account, and submits to TestFlight or Internal Track. Use this skill whenever the user mentions submitting to the App Store, publishing an app, releasing to TestFlight, pushing to Apple, Google Play submission, or EAS submit, even if they do not name the skill by name.4---56# app-store-submission78## Purpose910Take a verified build from "ready to ship" to "uploaded to store with reviewer credentials, metadata, screenshots, and policy URLs filled out." Stop at the human-required final tap.1112## When to trigger1314Trigger on these user phrases. Match loosely.1516- "submit to App Store"17- "publish my app"18- "release to TestFlight"19- "push to Apple"20- "Google Play submission"21- "EAS submit"22- "ship it"2324## Pre-flight refusals2526The skill refuses to start unless:2728- `TEST_RESULTS.md` shows tier one, two, and three PASS within the last seventy-two hours.29- `SECURITY_AUDIT.md` shows a GREEN verdict within the last seven days.30- `app.json` has a valid bundle ID, version, and icon path.31- `eas.json` has a production profile.3233If any check fails, the skill names the failed item and exits.3435## Inputs to collect36371. Target platform: `ios`, `android`, or `both`.382. Distribution channel: `testflight` or `production` (iOS), `internal` or `production` (Android).393. App Store Connect metadata YAML path (defaults to `store/app-store-metadata.yaml`).404. Privacy policy URL slug (defaults to project slug).415. Test reviewer credentials (existing or generate new).4243## Behavior4445### Step 1: privacy policy4647- Read or generate `store/privacy-policy.md` from the template.48- Push it to `contact.aigniteconsulting.ai/privacy/<slug>.html`.49- Record the URL in metadata.5051### Step 2: support page5253- Read or generate `store/support.md` from the template.54- Push it to `contact.aigniteconsulting.ai/support/<slug>.html`.55- Record the URL in metadata.5657### Step 3: build5859- Run `eas build --profile production --platform <target>`.60- Wait for the build to finish.61- Cache the build artifact URL.6263### Step 4: screenshots6465- Run the running app on iPhone Mirroring (or the Android emulator).66- Capture screenshots in every required size:67 - iOS: 6.7" (1290x2796), 6.5" (1284x2778), 5.5" (1242x2208), iPad 12.9" (2048x2732)68 - Android: phone (1080x1920) and tablet (1200x1920)69- Save to `store/screenshots/<platform>/<size>/<screen-name>.png`.70- Annotate each with a short caption matching the metadata YAML.7172### Step 5: metadata7374- Read `store/app-store-metadata.yaml`.75- Required fields: name, subtitle, description (4000 chars max iOS, 4000 Android), keywords (100 chars iOS), category, age rating, contact email, support URL, privacy URL.7677### Step 6: test reviewer account7879- Check if a reviewer user exists in Supabase. If not, create one with a known email and password.80- Add the credentials to the App Review Information block.8182### Step 7: submit8384- Run `eas submit --platform <target>`.85- Wait for the upload to complete.86- Print the App Store Connect or Google Play Console deep link.87- Prompt the user to log in and tap the final submit button.8889## Hard constraints9091- Refuse to submit without a recent three-tier test PASS.92- Refuse to submit without a recent security audit GREEN.93- Privacy policy and support URLs must resolve to 200 before submission.94- Reviewer credentials must work against the production Supabase project.9596## Composes with9798- Runs after `three-tier-test` and `security-audit`.99- Final step in the `mcp-to-mobile` pipeline.100101## References102103- [references/apple-checklist.md](references/apple-checklist.md) - Apple submission requirements.104- [references/google-checklist.md](references/google-checklist.md) - Google Play requirements.105- [references/privacy-policy-template.md](references/privacy-policy-template.md) - AiGNITE standard privacy language.