Special Year-End Offer: AI Review Toolkit $29.99 $49.99 Get it now →

iOS Submission Guide

Framework Guide Flutter

Flutter App Store Submission Guide 2025

Everything you need to deploy your Flutter app to the Apple App Store—from Xcode configuration to avoiding common Flutter-specific rejection pitfalls.

How to Submit a Flutter App to the App Store

To submit a Flutter app: 1) Run flutter build ios --release, 2) Open the Xcode workspace and configure signing, 3) Archive via Product → Archive, 4) Upload to App Store Connect, 5) Fill metadata and submit for review. Most Flutter apps are reviewed within 24-48 hours.

Build time: ~5-10 minutes | Review: 24-48 hours

Prerequisites

1 Development Environment

  • Mac with latest Xcode (15.0+)
  • Flutter SDK 3.16+ (latest stable)
  • CocoaPods installed

2 Apple Developer Account

  • Enrolled in Apple Developer Program ($99/year)
  • App ID created in Developer Portal
  • Distribution certificate ready

3 App Assets Ready

  • 1024x1024 app icon (no transparency)
  • Screenshots for required device sizes
  • Privacy policy URL

4 Verify Flutter Setup

# Run Flutter doctor to verify
flutter doctor

# Should show all green checkmarks for iOS

Xcode Project Setup

Step 1: Open the Xcode Workspace

# From your Flutter project root
cd ios
open Runner.xcworkspace

Important: Always open .xcworkspace, not .xcodeproj. The workspace includes CocoaPods dependencies that Flutter needs.

Step 2: Configure Bundle Identifier

In Xcode, select the Runner target and go to "Signing & Capabilities":

  1. 1. Set your Bundle Identifier (e.g., com.yourcompany.yourapp)
  2. 2. Select your Team from the dropdown
  3. 3. Enable "Automatically manage signing" (recommended for beginners)

Tip: The Bundle ID must match what you registered in App Store Connect. It cannot be changed after your first submission.

Step 3: Update iOS Deployment Target

Flutter defaults to iOS 12.0, but you may want to update this:

  • iOS 12.0 - Maximum compatibility (Flutter default)
  • iOS 13.0 - Required for SwiftUI, Sign in with Apple
  • iOS 14.0 - Required for App Clips, widgets

Update in both:

  • Xcode → Runner → General → Deployment Info
  • ios/Podfile - change platform :ios, '12.0'

Step 4: Configure App Icons

Flutter's default icon won't pass review. Update your icons:

# Install flutter_launcher_icons package
flutter pub add flutter_launcher_icons --dev

# Add to pubspec.yaml:
flutter_launcher_icons:
  ios: true
  image_path: "assets/icon/icon.png"
  remove_alpha_ios: true  # Critical - removes transparency

# Generate icons
dart run flutter_launcher_icons

Common Rejection: iOS app icons cannot have transparency (alpha channel). Use remove_alpha_ios: true or manually flatten your icon.

Code Signing

Automatic Signing (Recommended)

  1. 1 Check "Automatically manage signing" in Xcode
  2. 2 Select your Team from the dropdown
  3. 3 Xcode creates certificates and profiles automatically

Manual Signing (CI/CD)

  1. 1 Create Distribution Certificate in Developer Portal
  2. 2 Create App Store Provisioning Profile
  3. 3 Download and select in Xcode

Common Signing Errors

  • "No signing certificate" - Your certificate is missing or expired. Regenerate in Developer Portal.
  • "Profile doesn't match" - Bundle ID mismatch. Verify it matches exactly.
  • "Provisioning profile expired" - Profiles expire yearly. Regenerate and download.

Building for Release

Step 1: Build the Flutter Release

# Clean previous builds
flutter clean

# Get dependencies
flutter pub get

# Build iOS release
flutter build ios --release

# Or build IPA directly (requires Xcode config)
flutter build ipa --release

Step 2: Archive in Xcode

  1. 1. Open ios/Runner.xcworkspace in Xcode
  2. 2. Select "Any iOS Device (arm64)" as the destination (not a simulator)
  3. 3. Go to Product → Archive
  4. 4. Wait for the build to complete (5-10 minutes)
  5. 5. The Organizer window opens with your archive

Step 3: Upload to App Store Connect

  1. 1. In Organizer, select your archive and click "Distribute App"
  2. 2. Choose "App Store Connect""Upload"
  3. 3. Select distribution options (usually keep defaults)
  4. 4. Review and click "Upload"
  5. 5. Wait for processing (10-30 minutes)

Alternative: Use flutter build ipa and upload via Transporter app or xcrun altool for CI/CD pipelines.

App Store Connect Setup

Required Metadata

App Information

  • • App name (30 characters max)
  • • Subtitle (30 characters max)
  • • Primary category
  • • Privacy policy URL

Version Information

  • • Description (4000 characters max)
  • • Keywords (100 characters total)
  • • Support URL
  • • What's New (for updates)

Screenshot Requirements

iPhone (Required)

  • • 6.7" - 1290 × 2796px
  • • 6.5" - 1284 × 2778px
  • • 5.5" - 1242 × 2208px

iPad (If Supporting)

  • • 12.9" - 2048 × 2732px
  • • 11" - 1668 × 2388px

Flutter-Specific Rejection Reasons

1 App Icon Has Transparency

iOS rejects icons with alpha channels. Flutter's default icon handling may not strip transparency.

Fix:

# In pubspec.yaml with flutter_launcher_icons
flutter_launcher_icons:
  remove_alpha_ios: true

2 Missing Purpose Strings

Many Flutter plugins require iOS permissions. If you don't add purpose strings, your app is auto-rejected.

Fix in ios/Runner/Info.plist:

<key>NSCameraUsageDescription</key>
<string>We need camera access to take photos for your profile</string>

<key>NSPhotoLibraryUsageDescription</key>
<string>We need photo access to let you select images</string>

3 iPad Layout Issues

Flutter apps run on iPad by default. If your layout isn't responsive, it looks broken and gets rejected.

Fix options:

  • • Make your UI responsive with LayoutBuilder or MediaQuery
  • • Or disable iPad: In Xcode → Runner → General → Deployment Info → uncheck iPad

4 Guideline 4.2 - Minimum Functionality

If your Flutter app is too simple or just wraps a website, it will be rejected.

Fix:

Add native features like push notifications, offline mode, or device APIs. Read our complete Guideline 4.2 guide.

5 Debug Banner Visible

If you take screenshots with the debug banner showing, your app will be rejected.

Fix in main.dart:

MaterialApp(
  debugShowCheckedModeBanner: false,
  // ...
)

Performance Optimization

Build Optimization

  • • Use --release mode (not debug)
  • • Enable tree shaking (automatic in release)
  • • Use --split-debug-info for smaller builds
  • • Consider --obfuscate for code protection

Runtime Performance

  • • Use const widgets where possible
  • • Implement ListView.builder for long lists
  • • Cache images with cached_network_image
  • • Profile with Flutter DevTools

Reducing App Size

Flutter apps can be large. Here's how to minimize size:

# Build with size optimization
flutter build ios --release \
  --split-debug-info=build/debug-info \
  --obfuscate

# Analyze what's taking space
flutter build ios --analyze-size

Size Reduction Tips

  • • Remove unused packages from pubspec.yaml
  • • Use WebP instead of PNG for images
  • • Use vector graphics (SVG) when possible
  • • Lazy load features with deferred components

Typical Flutter iOS Sizes

  • • Minimal app: ~15-20 MB
  • • Typical app: 25-40 MB
  • • Feature-rich: 50-100 MB
  • • App Store limit: 4 GB

Troubleshooting

"Module 'flutter' not found" error
cd ios
rm -rf Pods Podfile.lock
pod install --repo-update
cd ..
flutter clean && flutter pub get
Archive fails with signing error
  • Verify your Apple Developer membership is active
  • Check that Bundle ID matches App Store Connect
  • Regenerate provisioning profiles in Developer Portal
  • In Xcode: Product → Clean Build Folder, then try again
App crashes on release but works in debug
  • Release mode has different optimizations - test with flutter run --release
  • Check for reflection-based code (JSON serialization) - may need build_runner
  • Verify all assets are included in pubspec.yaml
  • Check for platform-specific code issues
Upload to App Store Connect fails
  • Increment build number (must be unique for each upload)
  • Check version in pubspec.yaml matches App Store Connect
  • Verify app icon has no transparency
  • Try using Transporter app instead of Xcode

Pre-Submission Checklist

Build & Configuration

  • flutter build ios --release succeeds
  • Bundle ID matches App Store Connect
  • Version and build number incremented
  • App icon has no transparency
  • Debug banner disabled

Permissions & Privacy

  • All Info.plist purpose strings added
  • Privacy policy URL works
  • App privacy questionnaire completed
  • Tested on physical device

App Store Assets

  • Screenshots for all required sizes
  • App description written
  • Keywords optimized (100 char limit)
  • Support URL works

Testing

  • Tested in release mode
  • iPad layout acceptable (if supporting)
  • No crashes or major bugs
  • Demo account provided (if needed)

Frequently Asked Questions

How long does it take to review a Flutter app?

Flutter apps are reviewed the same as native apps—typically 24-48 hours. Apple doesn't distinguish based on framework. First submissions may take slightly longer.

Can Apple tell if an app is built with Flutter?

Yes, Apple can identify Flutter apps, but this doesn't affect approval. What matters is app quality, performance, and guideline compliance—not the technology used.

Do I need a Mac to submit a Flutter app to the App Store?

Yes. iOS apps must be built and archived using Xcode, which only runs on macOS. There's no way to submit to the App Store without a Mac. Services like Codemagic can build in the cloud, but you still need an Apple Developer account.

Why is my Flutter iOS app so large?

Flutter includes its rendering engine (~15MB base). To reduce size: use --split-debug-info, remove unused packages, compress images, and use deferred components for large features. The App Store also applies App Thinning which reduces download size for users.

Related Guides

Ship Your Flutter App with Confidence

Our AI-powered review tool checks your Flutter app against all App Store guidelines before you submit, catching issues that could cause rejection.

Try AI Review

Want AI to audit your app before submission?

Get our AI Review Toolkit with prompts that catch guideline violations automatically.

Get the AI Toolkit