How to Integrate Flutter into an Existing iOS App (Step-by-Step Guide)
How to Integrate Flutter into an Existing iOS App (Step-by-Step Guide)
Integrating Flutter into an Existing iOS Native App
Integrating Flutter into an existing iOS native app is a powerful way to add new features without rewriting your entire codebase. One of the cleanest approaches is packaging your Flutter module as an iOS framework and embedding it in your native project.
In this step-by-step guide, you’ll learn exactly how to integrate Flutter into your existing iOS app.

✨ Benefits of Adding Flutter into an Existing iOS App
- Faster Feature Development: Add new features without rewriting existing native code.
- Cross-Platform Compatibility: Reuse the Flutter module for Android.
- Access to Flutter Ecosystem: Use thousands of Flutter packages and plugins.
- Incremental Migration: Gradually migrate parts of your app while keeping stable native code.
📝 Use Case
Maintaining a large native iOS app can be challenging, and rewriting it from scratch is often risky. By integrating Flutter, you can keep your existing native code and start adding new features in Flutter. This approach lets you enhance your app, use Flutter’s UI components and packages, and gradually modernize it without breaking your current app or losing the work you’ve already done.
1. Create the Flutter Module
From the command line:
flutter create --template module flutter_module
This creates a reusable Flutter module with the following structure:
flutter_module/ .android/ .ios/ lib/ pubspec.yaml
2. Build the Flutter iOS Framework
cd flutter_module flutter build ios-framework --output=/path/to/MyApp/Flutter/
💡 Run this command every time you change code in your Flutter module.
The output folder should look like this:
/path/to/MyApp/
└── Flutter/
├── Debug/
│ ├── Flutter.xcframework
│ ├── App.xcframework
│ ├── FlutterPluginRegistrant.xcframework
│ └── example_plugin.xcframework
├── Profile/
│ ├── Flutter.xcframework
│ ├── App.xcframework
│ ├── FlutterPluginRegistrant.xcframework
│ └── example_plugin.xcframework
└── Release/
├── Flutter.xcframework
├── App.xcframework
├── FlutterPluginRegistrant.xcframework
└── example_plugin.xcframework
3. Link All Frameworks in Xcode
- Open your iOS project in Xcode.
- Go to Build Phases → Link Binary With Libraries.
- Click + → Add Other… → Add Files…
- Navigate to:
/path/to/MyApp/Flutter/Release/ - Select all
.xcframeworkfiles (⌘ + click) and press Open
4. Make Framework Paths Dynamic
Ensure Xcode loads the correct framework for each build mode (Debug / Profile / Release).
- In Finder, open:
/path/to/MyApp - Right-click MyApp.xcodeproj → Show Package Contents
- Open project.pbxproj in Xcode
- Find entries like:
path = Flutter/Release/Flutter.xcframework; - Update the path to:
"Flutter/$(CONFIGURATION)/Flutter.xcframework"
⚡ Important: Include the double quotes exactly as shown. Missing quotes will cause build errors.
💡 Repeat this step for all frameworks.
5. Update Framework Search Paths
In Xcode:
- Go to Build Settings → Framework Search Paths
- Add:
$(PROJECT_DIR)/Flutter/$(CONFIGURATION)/
6. Embed the Dynamic Frameworks
- Go to General → Frameworks, Libraries, and Embedded Content
- For each dynamic Flutter framework, set Embed & Sign
- Verify under Build Phases → Embed Frameworks that only dynamic frameworks are listed
⚠️ Do not embed static frameworks (e.g., FlutterPluginRegistrant.xcframework)
7. Build the Project
- Open MyApp.xcworkspace in Xcode
- Select Product → Build or press Cmd + B
✅ Conclusion
Integrating Flutter into an existing iOS app allows you to modernize your application without starting from scratch. You can continue using your native code while taking advantage of Flutter’s fast development, flexible UI system, and cross-platform capabilities. By gradually building new features in Flutter, you gain both stability and speed, reducing development risk and saving time.
📚 References
- Flutter Official Docs – iOS Add-to-App Setup:
https://docs.flutter.dev/add-to-app/ios/project-setup
Looking For Professional App development Services?
Our innovative approach blends aesthetics and functionality, creating bespoke online experiences that resonate. We tailor every pixel to showcase your uniqueness.