This guide walks you through publishing your Flutter app to the Apple App Store. It covers everything from configuring Xcode to submitting for review.

Before you start, refer to the official Flutter iOS deployment docs for the most up-to-date steps.

Prerequisites

  • A Mac with Xcode installed (you cannot build iOS apps on Windows or Linux)
  • An Apple Developer account ($99/year) — enroll here
  • Your Flutter app building and running on the iOS Simulator

1. App Icon

Use the flutter_launcher_icons package to generate all required icon sizes automatically. Prepare a 1024x1024 PNG file for your icon and put it in your assets folder.

Configure it for iOS in your pubspec.yaml. iOS icons cannot have transparency, so set remove_alpha_ios: true to fill transparent pixels with white.

yaml
flutter_launcher_icons:
  android: false
  ios: true
  image_path: "assets/icon.png"
  remove_alpha_ios: true

Run the generator, then verify your icon appears on the simulator:

bash
dart run flutter_launcher_icons

2. Bundle Identifier

Open ios/Runner.xcworkspace in Xcode. Select the Runner project in the sidebar, then the Runner target. Under the General tab, set the Bundle Identifier to something unique using reverse domain format. This is the permanent unique ID for your app on the App Store.

bash
app.yourname.yourapp

3. Signing

Apple requires all apps to be digitally signed with a certificate that proves you are the developer. In Xcode, go to the Signing & Capabilities tab, check Automatically manage signing, and select your team (your Apple Developer account). Xcode will create the certificates and provisioning profiles for you automatically.

If you see a signing error, go to Xcode → Settings → Accounts and make sure you are logged in with the same Apple ID that has the Developer Program membership.

4. Deployment Target

In Xcode under the General tab, set the Minimum Deployments iOS version. This determines the oldest iOS version your app supports. Flutter supports iOS 12+, but most apps target 15 or 16+ so you can use modern APIs without worrying about backwards compatibility. Supporting older versions means more users can install your app, but you lose access to newer APIs.

5. Build the Archive

Build the release version of your app. This compiles your Dart code, bundles assets, and creates an Xcode archive ready for upload.

bash
flutter build ipa --release

The output tells you where the .xcarchive file is located. You can also build directly from Xcode with Product → Archive.

6. App Store Connect

Go to App Store Connect and click the + button to create a new app. Fill in:

  • Platform: iOS
  • Name: your app name as it will appear on the store
  • Bundle ID: select the one matching your Xcode project
  • SKU: a unique internal reference for your records (e.g., yourapp-001)

7. Upload the Build

Open the archive in Xcode (Window → Organizer), select it, and click Distribute App → App Store Connect → Upload. Alternatively, download the Transporter app from the Mac App Store and drag in the .ipa file to upload.

Wait a few minutes for Apple to process the build. It will appear in App Store Connect under your app → TestFlight tab once processing is complete.

8. Store Listing

In App Store Connect, go to your app → App Store tab and fill in the required metadata:

  • Screenshots:at minimum, provide 6.7" (iPhone 15 Pro Max) and 5.5" (iPhone 8 Plus) screenshots. Use the iOS Simulator to capture these at the right resolution.
  • Description: what your app does.
  • Keywords: comma-separated search terms (100 char limit).
  • Support URL: a link to a support page or email.
  • Privacy Policy URL: required for all apps.
  • Category: pick the most relevant one.

Under App Review Information, provide any login credentials or special instructions the review team needs to test your app. If your app requires an account, create a test account for them.

9. Submit for Review

Select your uploaded build in the App Store tab, then click Submit for Review. Apple typically reviews new apps within 24-48 hours. You will receive an email when your app is approved (or if changes are needed).

Common rejection reasons: missing privacy policy, unclear app purpose, broken features, login required without test credentials provided, or UI that does not follow Apple's App Store Review Guidelines.