Releasing for iOS
Releasing an iOS Flutter application requires provisioning profiles, Apple Developer certificates, privacy manifests, and App Store Connect configuration.
Step 1: Configure bundle identifier and signing in Xcode
Section titled “Step 1: Configure bundle identifier and signing in Xcode”Open the ios directory in Xcode:
- Select the
Runnerproject in the sidebar. - Under the Signing & Capabilities tab, select your Team registered with the Apple Developer Program.
- Set a unique Bundle Identifier (e.g.,
com.example.myapp). - Choose Automatically manage signing (recommended for standard release flows) or configure custom provisioning profiles.
Step 2: Privacy manifests and permission descriptions
Section titled “Step 2: Privacy manifests and permission descriptions”Apple requires explicit usage descriptions in ios/Runner/Info.plist for any
hardware or sensitive APIs accessed by your app or third-party packages (see
Apple Info.plist Keys):
Starting in iOS 17 and macOS 14, Apple also mandates
Privacy Manifests
(PrivacyInfo.xcprivacy) declaring required reason APIs used by your
application or its dependencies.
Step 3: Build the iOS archive (IPA)
Section titled “Step 3: Build the iOS archive (IPA)”Generate the release archive using the Flutter CLI:
This command creates a .xcarchive under build/ios/archive/ and exports an
IPA package under build/ios/ipa/.
You can also pass custom export options using --export-options-plist:
If you are building on a CI machine where signing is handled in a later pipeline
stage (such as via Fastlane), build an unsigned archive with --no-codesign:
Step 4: Upload to App Store Connect
Section titled “Step 4: Upload to App Store Connect”Upload the .ipa package to App Store Connect using any of the following
methods:
- Open Xcode and select Window > Organizer (
Cmd + Option + Shift + O). - Select the latest build under the Archives tab.
- Click Distribute App and follow the prompts to validate and upload to App Store Connect.
- Download the Transporter app from the macOS App Store.
- Drag and drop the exported
.ipafile frombuild/ios/ipa/into Transporter. - Click Deliver to upload.
Upload using Apple’s command-line notarization and delivery tools:
Step 5: TestFlight and store submission
Section titled “Step 5: TestFlight and store submission”- TestFlight Internal Testing: Available immediately after processing for members of your App Store Connect team.
- TestFlight External Testing: Distribute builds to up to 10,000 external testers using TestFlight (requires a brief initial Beta App Review from Apple).
- App Store submission: Fill out App Store listing metadata, screenshots, age ratings, and privacy nutrition labels, then submit for App Review. Apple offers Phased Release for Automatic Updates (rolling out over 7 days).
Building with Shorebird Code Push
Section titled “Building with Shorebird Code Push”If you are using Shorebird to enable over-the-air updates for your iOS application, create your base release using the Shorebird CLI:
This builds the release archive and registers the release artifact with
Shorebird. Upload the resulting .ipa to App Store Connect as normal. When you
need to deploy Dart bug fixes later, use shorebird patch ios.