iOS 26 is the most significant iOS release for Flutter developers since iOS 13 introduced dark mode. The new minimum SDK mandate landed in April 2026, the Cupertino package is being split into a standalone package:cupertino, and Swift Package Manager becomes the default iOS plugin option. If you ship a Flutter app to the App Store in 2026, you have migration work to do. This guide walks through every change and shows exactly what to update.
Short version: upgrade to Flutter 3.32+ for Xcode 26 support, enable Swift Package Manager in your iOS Podfile, audit your Cupertino widget usage for the upcoming standalone package, make sure your privacy manifest reflects iOS 26 additions, and ship a build that passes the App Store review for the new minimum SDK. Total migration cost for a typical Flutter indie app is 4 to 12 hours, mostly mechanical.
What changed for Flutter in iOS 26
| Change | Effective | Impact on Flutter apps |
|---|---|---|
| iOS 26 SDK minimum for App Store submissions | April 28, 2026 | Must build with Xcode 26 to submit new or updated apps |
| Liquid Glass design language | iOS 26 launch | Apps look dated against native SwiftUI on iOS 26 without Liquid Glass adoption |
| Swift Package Manager as default iOS plugin option | Flutter 3.32+ | Faster builds, SwiftPM-only packages start shipping |
| Cupertino package split (planned) | Late 2026 | Imports migrate from flutter/cupertino to standalone cupertino package |
| Privacy manifest updates | iOS 18+ enforced | New required-reason APIs for any bundled SDK |
| Sign in with Apple v2 | iOS 26 | Optional email relay extension changes |
| App Intents updates for Flutter | Experimental | Flutter can now expose intents to Shortcuts via a native bridge |
| iOS 26 Reduce Transparency default | iOS 26 | More users have it on; Liquid Glass components must fall back cleanly |
Step 1: Upgrade to Flutter 3.32 and Xcode 26
Flutter 3.32 is the minimum version with full Xcode 26 support. Earlier versions may compile but will hit edge cases in the iOS 26 SDK around Swift concurrency and privacy manifests.
# Upgrade Flutter
flutter upgrade
# Verify
flutter --version # expect 3.32.x or newer
flutter doctor -v # should pass Xcode 26 check
# Xcode 26 from the Mac App Store, not the developer portalUpdate your CI to Xcode 26. Codemagic, Bitrise, and GitHub Actions macOS runners all have Xcode 26 images available as of April 2026.
Step 2: Enable Swift Package Manager in your Podfile
Flutter 3.32 supports SwiftPM as an iOS plugin option. The default is still CocoaPods for existing apps; new apps created with flutter create in 3.32+ use SwiftPM.
To migrate your existing app:
# ios/Podfile.properties.json or via CLI
flutter config --enable-swift-package-managerRun flutter clean and rebuild. Flutter generates a Package.swiftalongside the Podfile. Plugins that ship a Package.swift are now resolved via SwiftPM; those that don't still use CocoaPods. The two systems coexist.
Build time improvements:
- Clean build roughly 25-40 percent faster.
- Incremental build marginally faster.
- No Podfile.lock thrash when contributors use different CocoaPods versions.
- Smaller repo footprint (no Pods directory if all plugins are SwiftPM).
Step 3: Audit Cupertino widget usage
The standalone Cupertino package is still in flight (flutter/flutter#170310roadmap tracks it) but the shape is clear. Your existing imports ofpackage:flutter/cupertino.dart will need to migrate to package:cupertinowhen the package ships.
To prepare now:
- Wrap Cupertino widgets behind your own abstraction. Instead of using
CupertinoNavigationBardirectly in every screen, create aMyAppNavigationBarthat internally usesCupertinoNavigationBartoday. When the package splits, you change the import in one file. - Avoid custom subclasses of Cupertino widgets. Subclasses will likely break during the package migration. Compose instead of subclass.
- Pin Flutter to a known-good version until the migration lands. Don't live on master.
Step 4: Update the privacy manifest
iOS 18 introduced required-reason APIs for privacy-sensitive categories. iOS 26 expanded the enforcement. Every Flutter app must ship a PrivacyInfo.xcprivacy file atios/Runner/PrivacyInfo.xcprivacy.
For a typical Flutter app with Firebase, RevenueCat, and a few utility packages, your manifest declares approximately these categories:
NSPrivacyAccessedAPICategoryUserDefaults(reasonCA92.1: app functionality)NSPrivacyAccessedAPICategoryFileTimestamp(reasonC617.1: app functionality)NSPrivacyAccessedAPICategorySystemBootTime(reason35F9.1: measuring time elapsed)NSPrivacyAccessedAPICategoryDiskSpace(reasonE174.1: optimizing user-visible free space)- Collected data types for Firebase Auth, Firestore, Crashlytics, and Analytics if used
Every third-party package must also ship its own privacy manifest. Audit yourpubspec.yaml against the list at privacymanifests.pub.dev (community- maintained tracker) to ensure compliance.
Step 5: Test with the iOS 26 simulator
Once you upgrade Xcode 26, the iOS 26 simulator is available by default. Test these flows:
- Dark mode + light mode at every screen
- Reduce Transparency enabled (Settings, Accessibility, Display & Text Size)
- Reduce Motion enabled
- Dynamic Type at the largest size
- Deep links from Messages and Safari
- Push notifications (iOS 26 ships new notification grouping)
- Sign in with Apple v2 if you use it
Flutter's rendering on the iOS 26 simulator is solid but a few subtle bugs exist around safe-area handling on the new Dynamic Island variants. Worth manual testing.
Step 6: Add Liquid Glass readiness
You don't have to ship Liquid Glass widgets today, but your app should not look obviously dated against iOS 26 native apps. Three minimal upgrades:
- Use
BackdropFilterfor blurred navigation bars and sheets. Even a simple 20 sigma blur modernizes the app significantly. - Bump surface material opacity to match the 2026 Apple design: around 85 percent instead of fully opaque.
- Add a subtle 1-pixel inner border stroke to cards for the cut-glass feel.
For full Liquid Glass implementation, see our separate Flutter Liquid Glass guide.
Step 7: Update Info.plist for iOS 26 features
- Set
MinimumOSVersionto 15.0 (iOS 15 is the 2026 sensible minimum; drop 14 if you haven't already). - Review
NSCameraUsageDescription,NSPhotoLibraryUsageDescriptionand other usage-string keys. iOS 26 enforces them more strictly and rejects apps with placeholder text. - Add
NSUserNotificationsUsageDescriptionif you use local notifications. The iOS 26 notification refresh requires this. - Enable new entitlements:
com.apple.developer.weatherkit,com.apple.developer.appintents-app-hosting, etc., if your app uses them.
Step 8: Handle new Sign in with Apple v2
iOS 26 updates Sign in with Apple with improved private email relay and new revocation callbacks. The sign_in_with_apple Flutter package handles most of this automatically in version 6.x. Upgrade if you're on an older version.
# pubspec.yaml
dependencies:
sign_in_with_apple: ^6.2.0Test the revocation callback: users can now revoke Sign in with Apple from Settings, and your app must handle the resulting token invalidation on next launch.
Step 9: App Intents for Flutter (experimental but worth trying)
iOS 26 pushed App Intents deeper into the system. A Flutter app can now expose a native App Intent that shows up in Shortcuts, Spotlight, and Siri. The flutter_intentscommunity package wraps the native bridge.
This is optional but a nice 2026 feature to ship. Examples: a habit-tracker intent that marks a habit complete via Siri, a note-taking intent that captures voice memos, a quick-add expense intent from a finance app.
Step 10: Pre-submission checklist
Before you submit your first iOS 26 build to App Store Connect:
- Flutter 3.32 or newer
- Xcode 26 locally and on CI
- Swift Package Manager enabled in Flutter config
- Cupertino widget usage audited and behind wrapper interfaces
- Privacy manifest (
PrivacyInfo.xcprivacy) includes all required-reason API categories - Every third-party package ships its own privacy manifest (check against pub.dev)
- Info.plist usage strings are real sentences, not placeholders
- iOS 26 simulator test covered dark/light, reduce transparency, reduce motion, dynamic type
- Sign in with Apple revocation callback tested if used
- Deep links tested from Messages and Safari
- Build size checked with
--analyze-size(see our size optimization guide) - App Store Connect screenshots refreshed with Dynamic Island aware layouts
- Release notes reference iOS 26 features you added (Liquid Glass, App Intents, etc.)
Common migration gotchas
- CocoaPods and SwiftPM coexistence confusion. If a plugin ships both Package.swift and podspec, Flutter picks SwiftPM. If only podspec, Flutter uses CocoaPods. Check your build log to see which is active.
- Custom iOS platform channels break. Objective-C channel code sometimes needs
@objcannotations for Swift 5.9+ interop. Run in Xcode 26 and fix warnings. - Firebase version bump required. Older Firebase versions do not declare iOS 26 SDK compatibility in their podspec. Bump to the latest.
- App icons get rejected. iOS 26 has tighter icon guidelines around Dynamic Island visibility. Re-export icons through Xcode 26's icon editor.
- Reduce Transparency feels broken. Your custom blur widgets must respect
MediaQuery.accessibleNavigation. Cover this in testing or App Review rejects.
Timeline for the standalone Cupertino package
Realistic expectation for package:cupertino as a standalone Flutter package:
- Q2 2026: API design finalized, early experimental builds in master
- Q3 2026: Beta release on pub.dev, community feedback cycle
- Q4 2026: Stable release, migration guide from flutter.dev
- Q1 2027:
flutter/cupertino.dartdeprecated with a migration period - Q2-Q3 2027: Full removal from
flutter/flutter
If you wrap your Cupertino usage behind app-level abstractions now, the migration in Q4 2026 is a one-hour import change.
What The Flutter Kit ships
The Flutter Kit is iOS 26-ready out of the box. Flutter 3.32+, Xcode 26 compatible, Swift Package Manager enabled by default, Cupertino widgets wrapped behind app- level interfaces for clean future migration, a complete PrivacyInfo.xcprivacycovering the common indie-app SDK surface, Liquid Glass-ready materials, and Sign in with Apple v2 configured. Clone, run flutter pub get, and submit.
$69 one-time, unlimited commercial projects. See every integration on the features page or jump to checkout.
Final recommendation
Don't wait on iOS 26 migration. Spend the 4 to 12 hours now to upgrade Flutter, enable SwiftPM, audit Cupertino usage, and update the privacy manifest. Your submissions pass App Review cleanly, your app looks current on iOS 26 devices, and you're positioned for the easy Cupertino package migration later in the year.