App Store (iOS)Flutter

How to Publish a Flutter App on the App Store

Flutter's cross-platform rendering engine means your iOS app is compiled to native ARM code — no JavaScript bridge involved. This gives Flutter apps excellent performance, but it also means you need to navigate Xcode's project settings, iOS code signing, and Apple's review process. This guide covers the Flutter-specific workflow from `flutter build` to App Store approval.

Prerequisites

  • A Mac with Xcode 15+ and Flutter SDK 3.16+ installed
  • An Apple Developer Program membership ($99/year)
  • CocoaPods installed (gem install cocoapods)
  • Flutter doctor passing all iOS checks (flutter doctor -v)
  • Your app tested on a physical iOS device

Step-by-Step Build Process

1

Update pubspec.yaml version

Set the version field in pubspec.yaml (e.g., `version: 1.0.0+1`). The part before '+' is the display version (CFBundleShortVersionString), and after '+' is the build number (CFBundleVersion). Increment the build number for each upload.

2

Run flutter build ios

Execute `flutter build ios --release`. This compiles your Dart code to native ARM64 machine code using AOT compilation. The build produces a Runner.app in build/ios/iphoneos/. Watch for any deprecation warnings from plugins.

3

Open in Xcode for final configuration

Open ios/Runner.xcworkspace in Xcode. Set the team, bundle identifier, and deployment target. Review the Info.plist for any plugin-required entries (camera, location, etc.).

4

Create the archive

In Xcode, select 'Any iOS Device' and go to Product > Archive. The Xcode Organizer opens with your archive. Validate the archive before distributing to catch signing issues early.

Code Signing & Certificates

Configure signing in Xcode

In Runner target > Signing & Capabilities, enable 'Automatically manage signing' and select your team. Xcode creates the necessary certificates and provisioning profiles. For Flutter, also check that any plugin targets have signing configured.

Handle plugin signing

Flutter plugins with native iOS code appear as separate targets in Xcode. Ensure each plugin target has the correct team and signing configuration. Missing plugin signing is a common cause of archive failures.

Store Submission Steps

1

Create the app in App Store Connect

Create a new app in App Store Connect with matching bundle ID. Flutter apps should be categorized appropriately — don't use 'Games' unless it's actually a game built with Flame or similar.

2

Upload via Xcode Organizer

Select the archive in Organizer and click 'Distribute App' > 'App Store Connect'. Upload the binary. This process validates the app, checks entitlements, and transfers the binary to Apple's servers.

3

Prepare store listing

Add screenshots for required device sizes. Flutter's pixel-perfect rendering means screenshots look identical across simulators, so capture on each device size for accurate dimensions. Write your description and keywords.

4

Submit for review

Select the uploaded build, complete all metadata sections, and submit. Include demo credentials in the review notes if your app requires authentication.

Common Rejection Reasons & Fixes

Guideline 4.0 - Design (Non-native UI feel)

Flutter uses its own rendering engine, so the UI doesn't use native UIKit components by default. Use the Cupertino widget library (CupertinoApp, CupertinoNavigationBar) to match iOS design conventions and avoid 'doesn't feel native' rejections.

Guideline 2.5.1 - Software Requirements

Ensure your Flutter SDK and all plugins are compatible with the latest iOS version. Apple frequently deprecates old APIs. Run `flutter pub outdated` and update plugins before building.

Guideline 5.1.1 - Privacy permissions

Every permission your Flutter plugins request must have a usage description in Info.plist. Missing NSCameraUsageDescription, NSPhotoLibraryUsageDescription, or NSLocationWhenInUseUsageDescription entries cause automatic rejection.

App uses deprecated APIs

Some older Flutter plugins use deprecated iOS APIs (e.g., UIWebView). Update to the latest plugin versions or find alternatives that use modern APIs (WKWebView).

Pro Tips

  • Use `flutter build ios --analyze-size` to understand your app's size breakdown and optimize
  • Enable bitcode only if all your plugins support it — otherwise disable it in Xcode build settings
  • Use flutter_launcher_icons package to generate app icons for all required sizes automatically
  • Consider using Fastlane with Flutter for CI/CD automation (fastlane deliver, fastlane pilot)
  • Test on older iOS devices — Flutter's Skia/Impeller renderer can behave differently on A-series chips

Skip the hassle. Let us handle it.

Publishing a Flutter app on the App Store (iOS) involves dozens of steps, certificates, and potential rejection pitfalls. Our team handles the entire process for you — from build configuration to store approval.

Related Guides