
**THIS IS A BREAKING CHANGE.** See below for migration steps for existing projects. Previously, Flutter app code was built as a raw dylib on iOS. Dynamic libraries outside of a framework bundle are not supported on iOS, except for the system Swift libraries provided by Xcode. See: https://developer.apple.com/library/content/technotes/tn2435/_index.html#//apple_ref/doc/uid/DTS40017543-CH1-TROUBLESHOOTING_BUNDLE_ERRORS-EMBEDDED__DYLIB_FILES * Migrates Xcode build from app.dylib to App.framework * Migrates flutter create template * Migrates example projects Migration steps for existing projects ===================================== The following steps should be taken from the root of your Flutter project: 1. Edit `ios/.gitignore`: add `/Flutter/App.framework` on a new line. 2. In the Xcode project navigator, remove `app.dylib` from the Flutter folder. Delete this file from the `ios/Flutter` directory in your project. 3. Run a build to generate `ios/Flutter/App.framework`. From the command line, run `flutter build ios`. If you have not configured app signing in Xcode, an alternative method is to open the simulator, then run `flutter run -d iP`. 4. In the Xcode project navigator, select the `Runner` project. In the project settings that are displayed in the main view, ensure that the `Runner` target is selected. You can verify this by exposing the sidebar using the [| ] icon in the upper-left corner of the main view. 5. Select the *General* tab in the project settings. Under the *Embedded Binaries* section, click '+' to add `App.framework`. In the sheet that drops down, click the *Add Other...* button. Navigate to the `ios/Flutter` directory and select `App.framework`. Click *Open*. In the sheet that drops down, select *Create folder references*, then click *Finish*. 6. In the project settings, verify that `App.framework` has been added to the *Embedded Binaries* and *Linked Frameworks and Libraries* lists. 7. In the Xcode project navigator, drag `App.framework` under the Flutter folder. 8. In the Xcode project navigator, select `Flutter` then from the *File* menu, select *Add Files to "Runner"...*. Navigate to the `ios/Flutter` directory, select `AppFrameworkInfo.plist` and click the *Add* button. 9. From the command line, in your project directory, run `flutter build clean`, then `flutter run`. At this point your project should be fully migrated.
Example of embedding Flutter using FlutterView
This project demonstrates how to embed Flutter within an iOS or Android application. On iOS, the iOS and Flutter components are built with Xcode. On Android, the Android and Flutter components are built with Android Studio or gradle.
You can read more about accessing platform and third-party services in Flutter.
iOS
Configure
Create an ios/Flutter/Generated.xcconfig
file with this entry:
FLUTTER_ROOT=[absolute path to the Flutter SDK]
There are a number of other parameters you can control with this file:
FLUTTER_APPLICATION_PATH
: The path to the directory that contains yourpubspec.yaml
file relative to yourxcodeproj
file.FLUTTER_BUILD_MODE
: Whether to build fordebug
,profile
, orrelease
. Defaults torelease
.FLUTTER_TARGET
: The path to yourmain.dart
relative to yourpubspec.yaml
. Defaults tolib/main.dart
.FLUTTER_FRAMEWORK_DIR
: The absolute path to the directory that containsFlutter.framework
. Defaults to theios-release
version ofFlutter.framework
in thebin/cache
directory of the Flutter SDK.
Build
Once you've configured your project, you can open ios/HelloServices.xcodeproj
in Xcode and build the project as usual.
Android
Configure
Create an android/local.properties
file with these entries:
sdk.dir=[path to the Android SDK]
flutter.sdk=[path to the Flutter SDK]
There are a number of other parameters you can control with this file:
flutter.buildMode
: Whether to build fordebug
,profile
, orrelease
. Defaults torelease
.flutter.jar
: The path toflutter.jar
. Defaults to theandroid-arm-release
version offlutter.jar
in thebin/cache
directory of the Flutter SDK.
See android/app/build.gradle
for project specific settings, including:
source
: The path to the directory that contains yourpubspec.yaml
file relative to yourbuild.gradle
file.target
: The path to yourmain.dart
relative to yourpubspec.yaml
. Defaults tolib/main.dart
.
Build
To build directly with gradle
, use the following commands:
cd android
gradle wrapper
./gradlew build
To build with Android Studio, open the android
folder in Android Studio and
build the project as usual.