Skip to content

Latest commit

 

History

History
94 lines (65 loc) · 3.33 KB

File metadata and controls

94 lines (65 loc) · 3.33 KB

App Store Connect Release Pipeline

This repository now has a two-stage pipeline:

  1. testflight-auto.yml automatically uploads signed iOS builds to TestFlight after each published GitHub release.
  2. appstore-submit.yml runs preflight checks and submits production versions to App Review after a manual environment approval gate.

Stage 1: TestFlight Auto Upload

Workflow: .github/workflows/testflight-auto.yml

Triggers:

  • release.published
  • workflow_dispatch

Behavior:

  • Checks out release tag.
  • Builds signed archive for generic/platform=iOS.
  • Exports .ipa using auto-generated ExportOptions.plist (method=app-store-connect).
  • Uploads with xcrun iTMSTransporter using API key auth.
  • Polls App Store Connect build processing state until VALID.
  • Upserts TestFlight What to Test from release body or dispatch input.
  • Dispatches appstore-submit-ready event for non-prerelease releases.

Dry-run mode:

  • workflow_dispatch supports dry_run=true to validate signing, export, and JWT generation without upload/API mutations.

Stage 1 requirements (internal testing):

  • Does not require ASC_SUPPORT_URL or ASC_PRIVACY_POLICY_URL.
  • Does not require App Review checklist fields.

Stage 2: App Store Submit (Manual Gate)

Workflow: .github/workflows/appstore-submit.yml

Triggers:

  • repository_dispatch type appstore-submit-ready (from stage 1)
  • workflow_dispatch

Behavior:

  • Validates appstore-assets/review/submission-checklist.json and review-notes.md.
  • Ensures target appStoreVersion exists.
  • Resolves a VALID build for the selected version/build number.
  • Optional asset sync (sync_assets=true) for screenshots/previews.
  • Requires environment approval on appstore-production before final submission.
  • Attaches build to app store version, sets release type to MANUAL, and submits for review.

Stage 2 requirements (submission):

  • Requires valid appstore-assets/review/submission-checklist.json.
  • Requires non-empty supportUrl and privacyPolicyUrl in that checklist.
  • ASC_SUPPORT_URL and ASC_PRIVACY_POLICY_URL vars are optional, but if set they must match checklist values.

Required App Review Checklist Artifact

appstore-assets/review/submission-checklist.json must include:

  • privacyPolicyUrl
  • supportUrl
  • description
  • subtitle
  • keywords
  • ageRatingConfirmed: true
  • exportComplianceConfirmed: true
  • reviewNotesPath

Asset Automation Scope

Asset type Can automate Should automate now Status
App Store screenshots Yes Yes (deterministic folder naming) Implemented (opt-in)
App previews Yes Partial Implemented (opt-in)
In-App Event media Yes Not now Deferred
In-App Purchase media Yes Not now Deferred
Review attachments Yes Partial/manual Manual template only

Asset Generation vs Upload

  • Screenshots and previews are not auto-generated by this pipeline.
  • You create screenshots/previews manually (or with your own capture tooling).
  • The pipeline only uploads files that already exist under appstore-assets/ when sync_assets=true in appstore-submit.yml.

Folder Contracts

  • appstore-assets/screenshots/<locale>/<display-family>/...
  • appstore-assets/previews/<locale>/<display-family>/...
  • appstore-assets/review/review-notes.md
  • appstore-assets/review/submission-checklist.json