Home Pricing Explore MCP Docs Create a project

Publishing to the App Store

Step-by-step videos from bundle ID to TestFlight and App Store review, plus fixes for failed deploys.

  • 9 min read
  • 17 videos
  • 11 sections
Start reading

Quick answer

To publish to the App Store, set your bundle ID in App identity (the gear at the right of the top bar) and register it with Apple. Then open Ship → Deploy, choose the App Store tab, connect a GitHub repository, add your six credentials, and click Deploy. GitHub Actions builds and uploads the app to App Store Connect for TestFlight and review. Store deploy needs Pro and costs 2.5 credits per App Store deploy.

Ship your FlutterGo app to TestFlight and the App Store. FlutterGo builds and signs your app with GitHub Actions on a cloud macOS runner, then uploads it to App Store Connect. You submit it for review yourself. Each step below has a short video.

Tip: If a deploy fails, FlutterGo links you straight to the matching step or fix below.

Google Play is a separate deploy on its own tab, built in FlutterGo's own cloud. See Publishing to Google Play.

Before you start#

  • Your app is open in FlutterGo and runs in preview.
  • An Apple Developer Program membership ($99/year) and a GitHub account. The build runs in your own repository on a macOS runner and uses your GitHub Actions minutes.
  • FlutterGo Pro or higher. Each App Store deploy costs 2.5 credits. Deploying the App Store again for the same project within 24 hours is free, and a deploy that never reaches App Store Connect is refunded. In a shared project, the owner's plan and credits pay.
  • A Mac for steps 6 to 8 (signing certificate). No Mac? You can create the signing request and .p12 with OpenSSL on Windows or Linux.
  • You can sign in to Apple Developer and App Store Connect.
  • You will collect six credentials: Key ID, Issuer ID, .p8 key, .p12 certificate, .p12 password, provisioning profile.

Part 1: App identity#

Step 1: Set your bundle ID in FlutterGo#

  1. In your project, click the gear at the right of the top bar (its tooltip says Supabase console). In the panel that opens, choose App identity. If the top bar is folded away, click Show toolbar first.
  2. Enter your bundle ID in iOS bundle ID, for example com.yourcompany.yourapp.
  3. Click Save to project, then copy the bundle ID.

The bundle ID must match exactly in FlutterGo, Apple Developer and App Store Connect.

Step 2: Register the bundle ID with Apple#

  1. In Apple Developer, open Certificates, Identifiers & Profiles → Identifiers and click +.
  2. Choose App IDs → App → Continue.
  3. Paste your bundle ID (Explicit) and add a description.
  4. Turn on only the capabilities your app uses.
  5. Click Continue → Register.

Part 2: Deploy setup in FlutterGo#

Step 3: Open Deploy and choose App Store#

Click Ship → Deploy and choose the App Store tab.

Step 4: Connect GitHub and choose a repository#

If GitHub is not connected yet, the wizard first asks you to click Connect GitHub and authorize the FlutterGo GitHub App. Once it is connected, this part is skipped.

  1. Choose Create a new repository (or pick an existing one).
  2. Create the empty repo on GitHub. Private is fine.
  3. Back in FlutterGo, click Verify repository → Continue.

FlutterGo builds your app with GitHub Actions in this repository.

Step 5: Set the version and build number#

Enter a version such as 1.0.0 and a build number such as 1. Every upload needs a higher build number than the last one. Leave it empty and FlutterGo uses one past your last deploy.

Part 3: Signing certificate#

Step 6: Create a signing request CSR#

  1. On your Mac, open Keychain Access → Certificate Assistant → Request a Certificate From a Certificate Authority.
  2. Enter your email and name, choose Saved to disk, and click Save.

Step 7: Create the distribution certificate#

  1. In Apple Developer, open Certificates and click +.
  2. Choose Apple Distribution → Continue.
  3. Upload your signing request and click Continue.
  4. Download the certificate and open it in Keychain Access (File → Import Items).

Step 8: Export the p12 and add it to FlutterGo#

  1. In Keychain Access, right-click the certificate and choose Export.
  2. Save as .p12 and set a password.
  3. In FlutterGo Credentials, upload the .p12 and type its password.

Keep the .p12 and its password safe. FlutterGo saves them encrypted for your next deploys, and each deploy sets them as encrypted GitHub Actions secrets in your repository.

Part 4: Provisioning profile#

Step 9: Create the provisioning profile and add it to FlutterGo#

  1. In Apple Developer, open Profiles and click +.
  2. Choose App Store Connect → Continue.
  3. Select your bundle ID, then your distribution certificate.
  4. Name the profile, click Generate and download it.
  5. In FlutterGo Credentials, upload the .mobileprovision file.

Part 5: App Store Connect#

Step 10: Create the app in App Store Connect#

  1. In App Store Connect, open Apps, click + → New App.
  2. Tick iOS, then fill in the name, language, bundle ID and SKU.
  3. Click Create.

Step 11: Create the API key and add Key ID, Issuer ID and p8#

  1. Open Users and Access → Integrations → Team Keys and click +.
  2. Name the key and choose App Manager access. Click Generate.
  3. Note the Key ID and download the .p8 file. You can only download it once.
  4. Copy the Issuer ID shown above the keys.
  5. In FlutterGo Credentials, paste the Key ID into ASC Key ID and the Issuer ID into ASC Issuer ID, upload the .p8 under App Store Connect API key (.p8) and click Continue.

Step 12: Check all credentials#

The bundle ID is filled in for you. Check that all six are added: Key ID, Issuer ID, .p8, .p12, .p12 password, provisioning profile. Then click Continue.

Part 6: Deploy and release#

Step 13: Make the app icon store ready#

Only if Review asks: open App identity (the gear at the right of the top bar, then App identity). Under App icon, click Replace image and pick a 1024 × 1024 PNG with no transparency. Click Save to project, then Push to GitHub.

Step 14: Review and deploy#

When all checks are green, click Deploy. FlutterGo pushes your code and starts the build. The line under the button says how many credits the deploy uses: 2.5, or no charge when this project already paid for an App Store deploy in the last 24 hours.

Step 15: Watch the build on GitHub Actions#

Click ▶ GitHub Actions run to open the run, then the iOS job. It builds, signs and uploads your app to App Store Connect. A first build takes about 10 to 20 minutes.

Step 16: Test with TestFlight#

  1. In App Store Connect, open TestFlight. Wait until the build finishes processing.
  2. Click + next to Internal Testing, name the group and click Create.
  3. Add yourself as a tester and install the build with the TestFlight app.

Step 17: Submit for App Store review#

  1. Open Distribution → iOS App 1.0.
  2. Add screenshots and app details.
  3. Select your build, click Add for Review, then Submit for review.

If your deploy fails#

FlutterGo shows the failed step and links here. Fix the item, then click Deploy again. Leave the build number empty and FlutterGo uses the next one. A deploy that never reaches App Store Connect gives its credits back.

Fix: Missing credentials#

A credential is missing from the GitHub repository. Open Ship → Deploy → App Store → Credentials and add what is marked missing:

Fix: iOS signing failed#

The certificate, profile and bundle ID do not match.

  • The profile must be App Store Connect type, for the same bundle ID and the same distribution certificate as your .p12. Recreate it in Step 9.
  • No signing certificate found: export the .p12 again with its private key (Step 8), or create a new certificate (Step 7).
  • Wrong .p12 password: upload the .p12 again and retype the password.

Fix: App Store Connect API key rejected#

The Key ID, Issuer ID or .p8 is wrong, or the key was revoked. Check the key in Users and Access → Integrations and add it again (Step 11). If the .p8 is lost, revoke the key and create a new one.

Fix: Bundle ID not found#

Apple has no app with this bundle ID. Register it (Step 2) and create the app record (Step 10). The bundle ID must match FlutterGo exactly (Step 1).

Fix: Build number already used#

Apple already has a build with this number. Raise the build number, or leave it empty so FlutterGo picks the next one (Step 5), and deploy again.

Fix: App icon rejected#

The icon has transparency or is the wrong size. Replace it with a 1024 × 1024 PNG with no transparency (Step 13).

Fix: Upload to App Store Connect failed#

Check that the app record exists (Step 10) and the API key has App Manager access (Step 11). Apple outages also cause this: wait a few minutes and deploy again.

Fix: GitHub repository or workflow#

FlutterGo cannot push or the workflow did not start. Verify the repository again (Step 4) and check that GitHub Actions is enabled in the repository settings.

Fix: Flutter build error#

The app does not compile in release mode. Click Fix with agent: FlutterGo hands the failure log from the run (Step 15) to the agent, which fixes the project. Like the Fix with AI button, this repair doesn't use a credit. Then click Deploy again.

TestFlight vs App Store#

TestFlightApp Store
PurposeBeta testing with real usersPublic release
Who gets itTesters you inviteEveryone on the App Store
ReviewLight beta review for external testersFull App Review
Ship here first?Yes, alwaysAfter TestFlight feedback

Important: FlutterGo uploads the build; it does not submit it for review. Keep your store listing (screenshots, description, privacy details) ready in App Store Connect before you submit.

FAQ#

Do I need a Mac? Not for the build: it runs on a GitHub-hosted macOS runner. You need a Mac (or OpenSSL) once, to create the signing certificate.

What is the .p8 file? The private key of your App Store Connect API key. Apple lets you download it only once, so store it safely. FlutterGo saves it encrypted and sets it as an encrypted GitHub Actions secret in your repository when you deploy.

Where are my credentials stored? FlutterGo saves them encrypted with your project, so the wizard is filled in next time; saved keys are never shown in your browser again. Each deploy also sets them as encrypted Actions secrets in your own GitHub repository, where the build reads them.

What does an App Store deploy cost? Apple charges $99 a year for the Developer Program. In FlutterGo, store deploy needs Pro or higher and costs 2.5 credits per App Store deploy. Deploying the App Store again for the same project within 24 hours is free, and a deploy that never reaches App Store Connect is refunded. The build itself uses your GitHub Actions minutes.

Can I ship iOS and Android together? Yes, as two deploys. In Ship → Deploy, each store has its own tab: Google Play and App Store. Start one, then switch tabs and start the other. They run at the same time, and one failing never stops the other. There is no single "both stores" deploy. See Publishing to Google Play.

Can I build on my own Mac instead of GitHub Actions? Not in the cloud studio at fluttergo.ai. App Store builds always run on GitHub Actions in your repository. The Native (this machine) method and its build hosts belonged to the FlutterGo desktop app, which is no longer offered.

Where to go next#

Did this page miss something? Tell us and we will fix it.