欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

iOS Flutter混编环境配置(最新)

程序员文章站 2022-06-01 17:53:22
...


flutter是什么就不多做介绍了,目前使用纯flutter进行开发的大型项目还比较少,多数试水的还是打算和现有的原生代码进行混编,即将flutter页面嵌入到原生app中。而网上大部分都是讲安卓和flutter混编的经验,有iOS和flutter混编的也是比较老的方法,现在已经不再适用。这时这几天混编配置的方法记录。

一、创建flutter module

都需要保证创建的flutter工程和原生应用在同一目录下。
假如你在some/path/MyApp存在一个iOS原生应用,要创建flutter工程:

$ cd some/path/
$ flutter create -t module my_flutter

这会创建在这个位置**some/path/my_flutter/创建一个flutter module,里面包含基础的dart代码,以及一个.ios/**的隐藏文件,其中包含Cocoapods和helper Ruby script。

二、添加原生app对flutter的依赖

如果你的项目中已经在使用CocoaPods,可以直接按照以下的步骤进行配置,如果没有使用CocoaPods,则需要先初始化一个Podfile文件(在工程目录,执行pod init)。
1.添加以下内容到Podfile中:
注意:需要添加到文件顶部的位置

flutter_application_path = 'path/to/my_flutter/'
load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')

iOS Flutter混编环境配置(最新)
2.每一个Xcode target都需要绑定flutter,调用install_all_flutter_pods(flutter_application_path)

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

flutter_application_path = 'my_flutter/'
load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')

target 'hello' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!
install_all_flutter_pods(flutter_application_path)
  # Pods for hello

  target 'helloTests' do
    inherit! :search_paths
    # Pods for testing
install_all_flutter_pods(flutter_application_path)
  end

  target 'helloUITests' do
    # Pods for testing
install_all_flutter_pods(flutter_application_path)
  end

end

3.命令行执行 pod install
任何时候,如果你修改了flutter工程中some/path/my_flutter/pubspec.yaml中的三方依赖,在flutter工程所在目录,都需要执行flutter packages get来更新从podhelper.rb脚本中读取的plugins列表,然后在app所在目录执行 pod install 。
4.由于flutter工程不支持bitcode,所以需要在xcode中设置Build Settings->Build Options->Enable Bitcode为NO。

使用

打开
iOS Flutter混编环境配置(最新)
iOS Flutter混编环境配置(最新)

#import <Flutter/Flutter.h>
- (void)jumpToFlutterVC {
    FlutterViewController *flutterVC = [[FlutterViewController alloc] init];
   // flutterVC.title = @"flutterVC";//这里没起作用?
    [flutterVC setInitialRoute:@"route2"];//这里没起作用?
    flutterVC.view.backgroundColor = [UIColor redColor];
    
    [self presentViewController:flutterVC animated:YES completion:nil];
}

iOS Flutter混编环境配置(最新)

注意

以前,需要将构建阶段添加到现有Xcode项目中,现在已经不需要了

"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" build
"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" embed

重新生成podhelper.rb

如何点击运行报错:
Dart Error: Can’t load Kernel binary: Invalid kernel binary format version.
iOS Flutter混编环境配置(最新)
执行:

cd 'path/to/my_flutter/'
rm .ios/Flutter/podhelper.rb
flutter build ios

实践用VScode编写flutter_module

iOS Flutter混编环境配置(最新)
iOS Flutter混编环境配置(最新)
iOS Flutter混编环境配置(最新)
iOS Flutter混编环境配置(最新)
修改后Xcode 中
iOS Flutter混编环境配置(最新)
iOS Flutter混编环境配置(最新)