The Flutter Kit logoThe Flutter Kit
Guide

Flutter for iOS 26: Complete Cupertino Migration Guide (2026)

The practical Flutter migration guide for iOS 26. Standalone Cupertino package, Swift Package Manager default, Liquid Glass readiness, and the pre-submission checklist.

Ahmed GaganAhmed Gagan
14 min read

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

ChangeEffectiveImpact on Flutter apps
iOS 26 SDK minimum for App Store submissionsApril 28, 2026Must build with Xcode 26 to submit new or updated apps
Liquid Glass design languageiOS 26 launchApps look dated against native SwiftUI on iOS 26 without Liquid Glass adoption
Swift Package Manager as default iOS plugin optionFlutter 3.32+Faster builds, SwiftPM-only packages start shipping
Cupertino package split (planned)Late 2026Imports migrate from flutter/cupertino to standalone cupertino package
Privacy manifest updatesiOS 18+ enforcedNew required-reason APIs for any bundled SDK
Sign in with Apple v2iOS 26Optional email relay extension changes
App Intents updates for FlutterExperimentalFlutter can now expose intents to Shortcuts via a native bridge
iOS 26 Reduce Transparency defaultiOS 26More 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 portal

Update 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-manager

Run 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 usingCupertinoNavigationBar directly in every screen, create aMyAppNavigationBar that internally uses CupertinoNavigationBartoday. 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 (reason CA92.1: app functionality)
  • NSPrivacyAccessedAPICategoryFileTimestamp (reason C617.1: app functionality)
  • NSPrivacyAccessedAPICategorySystemBootTime (reason 35F9.1: measuring time elapsed)
  • NSPrivacyAccessedAPICategoryDiskSpace (reason E174.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 BackdropFilter for 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 MinimumOSVersion to 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 NSUserNotificationsUsageDescription if 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.0

Test 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 @objc annotations 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 respectMediaQuery.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.dart deprecated 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.

Share this article

Ready to ship your Flutter app faster?

The Flutter Kit gives you a production-ready Flutter codebase with onboarding, paywalls, auth, AI integrations, and more. Stop building boilerplate. Start building your product.

Get The Flutter Kit