How to Publish Your Flutter App on the Apple App Store

Publishing your first app to the Apple App Store is a milestone moment for any developer. It’s also, honestly, one of the more complex processes you’ll encounter. Having published several Flutter apps on the App Store, I want to share everything I’ve learned to help you navigate the process smoothly.

Enrolling in the Apple Developer Program

Before you can publish anything, you need to join the Apple Developer Program. It costs $99 USD per year. Here’s the process:

  1. Go to developer.apple.com and sign in with your Apple ID.
  2. Click “Enroll” and follow the enrollment steps.
  3. If you’re enrolling as an individual, you’ll need to verify your identity. Apple may use your device’s ID verification or ask for government-issued identification.
  4. Once approved (which can take 24-48 hours), you’ll have full access to App Store Connect and the developer portal.

One thing that caught me off guard was the identity verification step. Apple has tightened this process over the years, so make sure the name on your Apple ID matches your official documents exactly.

Understanding Certificates and Provisioning Profiles

This is the part that confuses most developers. Apple uses a certificate-based system to ensure only authorized developers can build and distribute apps.

Distribution Certificate

You need a distribution certificate to sign your app for the App Store. In Xcode:

  1. Open Xcode > Settings > Accounts.
  2. Select your Apple ID and your team.
  3. Click Manage Certificates.
  4. Click the + button and select Apple Distribution.

Xcode will create and download the certificate automatically. You can also do this manually through the Apple Developer portal, but Xcode’s automatic signing handles most cases.

Provisioning Profiles

A provisioning profile links your app’s Bundle ID to your distribution certificate. With automatic signing enabled in Xcode, this is handled for you. I strongly recommend using automatic signing unless you have a specific reason not to.

In your Flutter project, open ios/Runner.xcworkspace in Xcode, select the Runner target, and under Signing & Capabilities, check “Automatically manage signing” and select your team.

Configuring Your Flutter Project for Release

Bundle Identifier

Your Bundle ID uniquely identifies your app. Set it in ios/Runner.xcodeproj/project.pbxproj or through Xcode’s target settings. It typically follows the format com.yourcompany.appname. For my apps, I use com.atlantiskid.appname.

Version and Build Number

Update your version in pubspec.yaml:

version: 1.0.0+1

The part before + is the version name (displayed to users), and the part after is the build number (must increment with each upload). Every build you upload to App Store Connect must have a unique build number.

App Icons

Apple requires app icons in very specific sizes. I use a 1024x1024 source image and generate all required sizes. The easiest approach is to use the flutter_launcher_icons package:

dev_dependencies:
  flutter_launcher_icons: ^0.14.3

flutter_launcher_icons:
  ios: true
  image_path: "assets/icon/app_icon.png"
  remove_alpha_ios: true

Run dart run flutter_launcher_icons to generate all icon sizes. Note the remove_alpha_ios: true flag — App Store rejects icons with alpha channels (transparency).

Launch Screen

Configure your launch screen in ios/Runner/Base.lproj/LaunchScreen.storyboard. A simple approach is to use a centered logo on a solid background color. Avoid putting version numbers or text that needs frequent updates on the launch screen.

Building the Release IPA

Build your Flutter app for iOS release:

flutter build ios --release

This generates the release build. To create the archive for submission, open Xcode:

  1. Open ios/Runner.xcworkspace in Xcode.
  2. Select Product > Destination > Any iOS Device.
  3. Select Product > Archive.
  4. Once archiving completes, the Organizer window opens.
  5. Select your archive and click Distribute App.
  6. Choose App Store Connect and follow the prompts.

Alternatively, you can use the command line:

flutter build ipa

This generates an .ipa file in build/ios/ipa/ that you can upload using the Transporter app or xcrun altool.

Setting Up App Store Connect

Creating Your App

  1. Log in to App Store Connect.
  2. Go to My Apps and click the + button.
  3. Select New App.
  4. Fill in the required fields:
    • Platform: iOS
    • Name: Your app’s display name on the App Store
    • Primary Language: Choose your app’s primary language
    • Bundle ID: Select the Bundle ID you configured
    • SKU: A unique identifier (I usually match the Bundle ID)

App Information

Fill out the following sections:

  • Privacy Policy URL: Required for all apps. I host mine on my developer website (e.g., https://atlantiskid.com/privacy/app-name.html).
  • Category: Choose the most appropriate primary and secondary categories.
  • Content Rights: Declare whether your app contains third-party content.
  • Age Rating: Complete the age rating questionnaire honestly. If your app shows ads, answer “Yes” to the advertising question.

Preparing Screenshots

App Store screenshots are critical for conversion. Apple requires screenshots for specific device sizes:

  • 6.9" display (iPhone 16 Pro Max): 1320 x 2868 pixels
  • 6.7" display (iPhone 16 Plus): 1290 x 2796 pixels
  • 6.5" display (iPhone 14 Plus): 1284 x 2778 pixels
  • 5.5" display (iPhone 8 Plus): 1242 x 2208 pixels
  • iPad Pro 13": 2064 x 2752 pixels
  • iPad Pro 11": 1668 x 2388 pixels

You need at least screenshots for the 6.7" and 5.5" sizes. You can provide up to 10 screenshots per size. I typically create 5-6 screenshots that showcase the app’s key features with short descriptive text overlays.

A time-saving tip: create screenshots for the largest size first, then use App Store Connect’s media manager to apply the same screenshots to smaller sizes. In many cases, Apple can automatically scale them.

Writing Your App Description

Write a compelling description that clearly explains what your app does. The first few lines are critical since that’s what users see before tapping “more.” Structure it as:

  1. Hook: One sentence that captures the app’s value.
  2. Key Features: Bullet-pointed list of main features.
  3. Details: Additional information about the app.

Keep it concise and focus on benefits, not technical details.

The Submission Process

Once your build is uploaded and your metadata is complete:

  1. Select your uploaded build in the App Store Connect listing.
  2. Answer the Export Compliance questions (most Flutter apps without custom encryption can answer “No”).
  3. If your app uses the IDFA (Identifier for Advertisers), declare it in the Advertising Identifier section. If you’re using AdMob, you do use the IDFA.
  4. Click Submit for Review.

Apple’s review process typically takes 24-48 hours, though it can be faster. Here are some tips to avoid rejection:

Common Rejection Reasons

  1. Crashes and bugs: Test thoroughly on real devices before submitting. The review team tests on the latest hardware and OS versions.
  2. Incomplete metadata: Make sure all required fields are filled, especially the privacy policy URL.
  3. Guideline 4.3 (Spam): If your app is too similar to existing apps, Apple may reject it. Make sure your app offers unique value.
  4. Guideline 2.1 (Performance): Your app must work as described. If a feature is listed but doesn’t function, it will be rejected.
  5. Guideline 5.1.1 (Data Collection): You must accurately disclose what data your app collects in the App Privacy section.

If Your App Gets Rejected

Don’t panic. Read the rejection reason carefully, fix the issue, and resubmit. You can also reply to the reviewer through the Resolution Center in App Store Connect if you think the rejection is a mistake. Be polite and provide clear explanations.

I’ve had apps rejected for minor issues like a missing screenshot size or an unclear privacy policy. These are easy fixes once you understand what the reviewer is looking for.

App Privacy Labels

Since December 2020, Apple requires privacy nutrition labels for all apps. You need to declare:

  • What data your app collects
  • How the data is used (tracking, analytics, advertising, etc.)
  • Whether the data is linked to the user’s identity

If you’re using AdMob, you’ll need to declare that you collect advertising data. Be thorough and honest — Apple does verify these declarations.

Post-Submission

After your app is approved and live:

  1. Monitor crash reports in App Store Connect and Firebase Crashlytics.
  2. Respond to user reviews — this helps with App Store ranking and user trust.
  3. Plan your update cycle — regular updates signal to Apple that your app is actively maintained.
  4. Set up App Analytics in App Store Connect to track impressions, downloads, and usage.

Lessons Learned

After publishing several apps, here are my key takeaways:

  • Start the enrollment process early. Apple’s identity verification can take time.
  • Use automatic signing. Manual certificate management is error-prone and rarely necessary for indie developers.
  • Invest in great screenshots. They’re the single biggest factor in conversion from the App Store listing.
  • Test on real devices. The simulator doesn’t catch everything, especially performance issues and ad integration behavior.
  • Read the Human Interface Guidelines. Apple takes design seriously, and following their guidelines increases your chances of approval.

Publishing to the App Store may seem daunting the first time, but it becomes routine after your first successful submission. Take it step by step, and don’t hesitate to consult Apple’s documentation when you’re unsure about something. Good luck with your app launch!