App — iOS Deployment

Installing & Releasing Flutter App on App Store

A complete, up-to-date guide for building, signing, and publishing your Flutter app to the Apple App Store — updated for 2025–26 requirements including Xcode 16+, Privacy Manifest, and TestFlight-first workflow.

Flutter 3.xXcode 16+iOS 17+ SDKPrivacy ManifestTestFlightApp Store Connect
⚠️

2025–26 Breaking Changes — Read Before You Start

Xcode 16+ is now mandatory
for all App Store submissions — apps built with Xcode 15 or earlier are rejected.
Privacy Manifest (PrivacyInfo.xcprivacy)
is required since November 2024 and must be included in your app. Additionally, Apple now requires
macOS 14+
to run Xcode 16. iOS deployment is impossible without a Mac.

1

Prerequisites

Everything required before starting iOS deployment

Xcode Version16+ (Mandatory)
macOS14 Sonoma+
iOS SDK17+ (Min)
Flutter SDK3.22+ (Stable)
Apple Dev Fee$99/year
CocoaPodsRequired

Account Requirements

  • Active Apple Developer Program ($99/year)
  • Individual or Organization enrollment
  • Apple ID with 2-factor authentication
  • Unique Bundle ID (reverse-domain format)

Asset Requirements

  • App icon — 1024×1024px PNG (no alpha)
  • Screenshots for all required device sizes
  • Privacy Policy URL (hosted web page)
  • App description, keywords, support URL
⚠️

macOS is mandatory.iOS app deployment requires Xcode, which only runs on macOS. Windows or Linux users cannot build or submit iOS apps directly. You must have a Mac with macOS 14 Sonoma or later.

Verify your environment is correctly set up before proceeding:

bash — Verify Environment

# Check Flutter and Xcode setup

flutter doctor -v

# Configure Xcode command-line tools

sudo sh -c 'xcode-select -s /Applications/Xcode.app/Contents/Developer && xcodebuild -runFirstLaunch'

# Accept Xcode license

sudo xcodebuild -license accept

# Install / update CocoaPods

sudo gem install cocoapods

2

Register Bundle ID on Apple Developer Portal

Create a unique App ID — this cannot be changed after publishing

1

Log in to Apple Developer Account

Go to developer.apple.com → Sign in → Navigate to
Certificates, Identifiers & Profiles
.

2

Open App IDs

In the left sidebar, click
Identifiers
. Then click the
+
button to register a new identifier.

3

Create an Explicit App ID

Select
App IDs

App
. Fill in a Description and set the Bundle ID in reverse-domain format (e.g. com.yourcompany.appname).
Use
Explicit
(not Wildcard) for most apps.

4

Enable Required Capabilities

Select any capabilities your app needs (e.g. Push Notifications, In-App Purchase, Sign in with Apple).
Click
Continue

Register
.

🔒

Bundle ID is permanent. Once your app is published on the App Store, the Bundle ID (applicationId) cannot be changed. Choose carefully using a format like com.yourcompany.appname.

3

Create App on App Store Connect

Set up your app record and complete the required metadata

1

Go to App Store Connect

Open appstoreconnect.apple.com → Sign in with your Apple Developer account → Click
My Apps
.

2

Create a New App

Click the
+
button →
New App
. Select
iOS
platform. Fill in: App Name, Primary Language, Bundle ID (select the one you registered), and SKU (an internal unique identifier, not visible to users).

3

Fill in App Information

From the sidebar, select
App Information
. Set the Category, Age Rating, and ensure the Bundle ID matches what you registered. Add your Privacy Policy URL — this is required for all apps.

4

Complete App Privacy (Data Safety)

Under
App Privacy
, declare all data your app collects. Apple generates privacy labels from this — they appear on your App Store listing. This section is mandatory and must match your Privacy Manifest.

5

Set Pricing and Availability

Under
Pricing and Availability
, set your pricing tier (Free or paid), choose the territories where your app will be available, and set release date options (manual or automatic after approval).

4

Configure Xcode Project Settings

Open Runner.xcworkspace and configure signing, version, and capabilities

ℹ️

Always openios/Runner.xcworkspace(not.xcodeproj) — the workspace includes Cocoa Pods dependencies required for Flutter plugins.

bash — Open Xcode Workspace

# Check Flutter and Xcode setup

open ios/Runner.xcworkspace

In Xcode, select the Runner target from the project navigator, then verify these settings on the General tab:

SettingWhereValue / Action
Display NameGeneral → IdentityYour app's visible name on the home screen
Bundle IdentifierGeneral → IdentityMust match the Bundle ID registered on App Store Connect
VersionGeneral → IdentityUser-facing version (e.g. 1.0.0)
BuildGeneral → IdentityUnique build number — must increment for each upload
Automatically manage signingSigning & CapabilitiesEnable (recommended for most apps)
TeamSigning & CapabilitiesSelect your Apple Developer account team
Minimum DeploymentsGeneral → DeploymentiOS 12.0 or higher (set based on your target audience)

You can also set version and build number from the command line instead of Xcode:

bash — Open Xcode Workspace

# Format: versionName+buildNumber in pubspec.yaml

# version: 1.0.0+1

# Or override at build time:

flutter build ipa --build-name= 1.0.0 --build-number= 1

Update your app icon by selecting Assets.xcassets in the Runner folder from Xcode's project navigator. Replace the placeholder icons with your own (1024×1024px PNG, no alpha channel for App Store).

5

Add Privacy Manifest

🆕 Required Since Nov 2024

PrivacyInfo.xcprivacy must be included — apps without it are rejected

Apple requires a Privacy Manifest file ( PrivacyInfo.xcprivacy ) in all app submissions since November 12, 2024. This file documents your app's data collection practices and API usage.

1

Create the Privacy Manifest

In Xcode, right-click the
Runner
folder →
New File from Template
→ scroll to
Resource
→ select
App Privacy
→ click
Next
. Keep the default name PrivacyInfo and click
Create
.

2

Configure the Manifest

The file will be created at ios/Runner/PrivacyInfo.xcprivacy. Open it and fill in the required keys based on your app's data practices.

xml — ios/Runner/PrivacyInfo .xcprivacy (Example)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<!-- Does your app use tracking? -->
<key>NSPrivacyTracking</key>
<false/>
<!-- Domains used for tracking (if NSPrivacyTracking is true) -->
<key>NSPrivacyTrackingDomains</key>
<array/>
<!-- Types of data collected -->
<key>NSPrivacyCollectedDataTypes</key>
<array/>
<!-- APIs accessed and the reason -->
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string><!-- Local storage for app functionality -->
</array>
</dict>
</array>
</dict>
</plist>
ℹ️

The data types and API reasons in yourPrivacyInfo.xcprivacymust match exactly what you declared in the App Privacy section of App Store Connect. Mismatches will cause rejection.

💡

To skip encryption documentation for apps that don't use non-exempt encryption (most apps), add this key to yourios/Runner/Info.plist: <key>ITSAppUsesNonExemptEncryption</key><false/>

6

Build & Archive for App Store

Create a release IPA archive and upload to App Store Connect

There are two methods to build and upload: via flutter build ipa + Xcode Organizer, or using the newer flutter build ipa with direct upload. Method A (Xcode Organizer) is recommended for first-time submissions.

Method A — Build IPA via Flutter, then Archive in Xcode:

bash — Step 1: Clean & Install Dependencies
# Clean previous build artifacts
flutter clean
flutter pub get
# Install iOS dependencies via CocoaPods (required before building)
cd ios && pod install
cd ..
# If pod install fails, try updating first:
# cd ios && pod install --repo-update && cd ..
⚠️

pod install must be run before flutter build ios.Skipping this step causes missing dependency errors during the build. Always run it afterflutter pub getor whenever you add/update a Flutter plugin.

bash — Step 2: Build iOS Release
# Build iOS release (without code signing — Xcode handles it)
flutter build ios --release
# Or build a signed IPA directly (if signing is configured):
flutter build ipa --release
# IPA output: build/ios/ipa/<AppName>.ipa

Step 2 — Archive in Xcode Organizer:

1

Reopen Xcode Workspace

After running flutter build ios , reopen ios/Runner.xcworkspace in Xcode to refresh the release configuration.

2

Select Correct Scheme and Destination

In the top toolbar, select
Product → Scheme → Runner
. Then set the destination to
Any iOS Device (arm64)
— not a simulator.

3

Create Archive

Select
Product → Archive
. Xcode will build and archive the app. This may take several minutes. The Xcode Organizer window opens automatically when done.

4

Validate the Archive

In the Xcode Organizer, select your app and the archive you just created. Click
Validate App
. Fix any reported issues before proceeding.

5

Upload to App Store Connect

After successful validation, click
Distribute App

App Store Connect

Upload
. Follow the prompts. The build will appear in App Store Connect within a few minutes.

Once uploaded, your build will appear in App Store Connect under TestFlight within 5–15 minutes. Apple runs an initial automated check before making it available to testers.

7

TestFlight — Test Before PublishingBest Practice

Always test via TestFlight before submitting to production review

TestFlight is Apple's official beta testing platform. Testing through TestFlight before submitting to the App Store is strongly recommended — it simulates the exact install experience and catches issues early.

TrackTestersReview RequiredWhen to Use
Internal TestingUp to 100 (by role)InstantCore team validation, QA testing
External TestingUp to 10,000 (by invite link)Beta App Review (~1 day)Wider beta feedback before production
App Store (Production)All usersFull Review (1–7 days)Public release
1

Go to TestFlight in App Store Connect

In App Store Connect, select your app → Click the
TestFlight
tab.

2

Add Internal Testers

Under
Internal Testing
, click
+
to add testers by their App Store Connect role (Admin, Developer, etc.). They receive an email invite to install via TestFlight.

3

Create External Testing Group (Optional)

For broader beta testing, click
+
under
External Testing
→ create a group → add testers by email or share an invite link. This requires a Beta App Review.

8

Submit App for Review

Complete the App Store listing and submit for Apple's review process

1

Go to App Store Tab

In App Store Connect, select your app → click the
App Store
tab → Click the version you want to submit (or create a new version).

2

Upload Screenshots

Under the
App Store
section, upload screenshots for all required device sizes. Required sizes include iPhone 6.9" (1320×2868 or 1290×2796px) and iPad Pro 13" (2064×2752px). Screenshots must comply with Apple's content and dimension guidelines.

3

Fill in App Metadata

Complete the
App Information
section: App Name (max 30 characters), Subtitle (max 30 characters), Description (up to 4,000 characters), Keywords (max 100 characters — comma-separated for ASO), and Support URL.

4

Select the Build

Scroll to the
Build
section and click
+
to select the TestFlight build you want to submit. Make sure it's the validated, signed release build.

5

Set Release Options

Choose whether to release
manually
after approval (you click release) or
automatically
as soon as approved. You can also schedule a specific release date.

6

Submit for Review

Review all required sections — if anything is incomplete, App Store Connect shows a warning. Once everything is filled in, click
Add for Review

Submit to App Review
.

⚠️

During the review process, Apple's App Review team may request additional information or flag issues. Respond promptly to any feedback. Typical review time is 1–3 days for established accounts, 3–7 days for first-time submissions.

9

Release & Monitor Your App

Go live and track performance through App Store Connect analytics

1

Release After Approval

Once approved, if you chose manual release, click the
Release
button in the App Store section of your app's dashboard. Your app goes live on the App Store within a few hours.

2

Monitor Crashes via Xcode Organizer

Open Xcode →
Window → Organizer → Crashes
. Crash reports from App Store users appear here automatically. Alternatively, integrate Firebase Crashlytics for real-time crash reporting.

3

Track Analytics in App Store Connect

Under
Analytics
, monitor: impressions, product page views, downloads, sales, retention, and conversion rate. Use this data to improve your App Store listing (ASO).

4

Respond to User Reviews

Under
Ratings and Reviews
, respond to user feedback. Prompt, helpful responses improve your rating and demonstrate active maintenance to Apple and users.

5

Submit Updates

For every update, increment the
Build Number
in Xcode (each upload must have a unique build number). Create a new version in App Store Connect, upload the new build, add release notes, and submit for review again.

ℹ️

Keep up with Apple's annual iOS SDK updates. Apps that don't update to target the latest SDK within Apple's deadlines can be removed from App Store search results or delisted entirely.


Common Issues & Fixes

IssueLikely CauseFix
Build rejected — Xcode versionBuilt with Xcode 15 or olderUpdate to Xcode 16+, rebuild and resubmit
Missing Privacy ManifestPrivacyInfo.xcprivacy not includedAdd the file in Xcode Runner folder (Step 5)
Code signing errorTeam not selected or certificate expiredIn Xcode → Signing & Capabilities → select correct Team
Bundle ID mismatchXcode ID ≠ App Store Connect IDEnsure identical Bundle Identifier in both places
Build not appearing in App Store ConnectProcessing delay or automated check failedWait 15–30 minutes; check email for Apple processing errors
Screenshot rejectedWrong dimensions or content violationUpload correct sizes — required: 6.9" iPhone and 13" iPad
App crashes after store installMissing entitlements or release config issueTest on real device with Xcode release scheme before archiving

Conclusion

By following these steps, you can successfully build and publish your Flutter app to the Apple App Store. Remember to always useXcode 16+ , include the required Privacy Manifest , test thoroughly via TestFlight before submitting, and respond promptly to Apple's review team feedback. Keep your app updated with the latest iOS SDK targets to ensure it remains visible and available to all users on the App Store.