App Store

TestFlight to App Store review, guided.

When a project targets iOS, the Deploy pane → iOS section builds and ships the native app through three lanes: Local, TestFlight, and Production. Android is an export path you build yourself, covered at the end.

Signed lanes (TestFlight and Production) need a connected Apple Developer account. Verify your account is ready first, then connect it.

Signed builds also bake in a production backend, so they need a live web deploy to point at. Run Publish before you build for TestFlight or the App Store, or the build stops with deploy web first.

Verify your Apple Developer account

Apple handles enrollment, agreements, and payouts on its own side. Confirm all of the following in App Store Connect before you connect Apple, or signed builds and submissions will fail later:

  • Active membership. Your Apple Developer Program membership is paid and active ($99/year).
  • The right role. Your Apple ID has the Admin or Account Holder role on the team. Lower roles cannot create app records or submit builds.
  • Paid Apps agreement. Accept the Paid Applications agreement under Business > Agreements, even for a free app.
  • Banking and tax. Complete banking and tax details under Business > Agreements. Apple blocks submission until they are filled in.

Contrast does not enforce these for you. They are Apple’s prerequisites, so check them directly in App Store Connect.

Connect Apple

Signed lanes are gated behind Launch with Apple. Open it from the iOS section and pick one of two paths.

  • Sign in with Apple (default). Enter your Apple ID, password, and 2FA code, then choose your team. Contrast creates the App Store Connect app record, generates a signing key, and binds the team in one pass. Give it the bundle id (for example com.example.myapp) and app name (for example My App).
  • Advanced: App Store Connect key. Paste the .p8 key contents, Key ID, and Issuer ID from App Store Connect > Users and Access > Keys, plus your 10-character Team ID from your Apple Developer membership page.

Then set your app identity, icon, and store listing in Project Settings → iOS/App Store. The App Store icon must be a 1024 by 1024 PNG with no transparency. Contrast uses a default icon until you upload one.

The iOS section shows a readiness card with a status dot. When it reads Ready for TestFlight, signed builds are unlocked.

Local builds

The Local lane builds for testing on your own machine, with no upload to Apple:

  • Simulator preview. An unsigned build for fast local preview.
  • Install on device. Builds and installs on a connected iPhone.

Neither needs an Apple account, so use them to iterate before you ship a signed build.

TestFlight

The TestFlight lane distributes beta builds. It runs in two steps.

Internal testing. Ship a signed build to the TestFlight lane. Once Apple finishes processing it and marks it valid, Contrast assigns it to your internal beta group automatically. Internal testers can install it right away.

External testing. To open a build to anyone with a public link, press Submit for external testing. Fill in the beta-review contact (first name, last name, email, phone) and review notes in Project Settings → iOS/App Store first. Apple runs a one-time beta review before the public link goes live, so external testing is not instant. When the review passes, the lane shows a copyable https://testflight.apple.com/join/... link.

While a signed build is building, the lane shows its queue position, for example waiting for a build slot (2 ahead), since signed builds run one at a time.

Submit to the App Store

The Production lane submits your app for App Store review. Apple reviews the build and the store listing together, so finish the listing before you submit.

Submission checklist

The Production lane shows a submission checklist. Fill each item in Project Settings → iOS/App Store:

  • Metadata fields. Subtitle, description, keywords, primary category, support URL, and privacy policy URL.
  • Required screenshots. The 6.7-inch iPhone screenshots.
  • App icon. The 1024 by 1024 PNG with no transparency.
  • Privacy policy. A reachable privacy policy URL.
  • Demo account for review. Add review notes with demo credentials, or mark that no demo account is needed. Apple’s reviewers use them to sign in.

Submit

When the checklist is green, build the Production tier and press Submit to App Store review. Contrast uploads the signed build, waits for Apple to process it, then submits the version and its listing for review.

After you submit

Watch the iOS section for Apple’s state. It moves through processing, then review:

  • Apple processing the build. Apple validates the uploaded binary. A bad binary shows rejected during Apple processing; fix the issue and start a new signed build.
  • Waiting for review, then in App Store review. Apple review typically takes 1 to 3 business days.
  • Approved, awaiting release, then live on the App Store once released.

If Apple rejects the app:

  • Metadata or app rejected. Update the listing or screenshots in Project Settings → iOS/App Store, then resubmit the build.
  • Developer rejected (you pulled it back). Make your changes, approve the submission again, then resubmit.

Contrast surfaces the exact rejection state and the next action on the iOS card, so you always know what Apple is waiting on.

Android

Android is export-first today. From Project Settings → Export project you get a native Android project and an EJECT.md. One command generates the android/ folder, then Gradle or EAS produces an installable APK. Managed Android builds with downloadable APKs are on the roadmap.

For the native preview engine and React Native compatibility, see the rnx docs.

Ready?

Create a web, iOS, and Android app in minutes with agents working alongside you.