Flutter升级到1.8.3版本之后,网上查到一些混编方案已经不能再使用,经过两天的采坑,整理出最新混编方案。
网上有两种混编方案,一种官方提供的方案 传送门:
1. 官方方案的优缺点
(1)优点:
不需要每次 Run 起来之后,先进行 同步flutter代码(组件化Flutter后,因为组件化后flutter代码已经变为framework,所以每次进来需要先热更新同步代码)
不需要单独搞一个组件进行集成,管理组件的版本,发布等。
(2)缺点:
会非常耦合工程,需要修改工程配置,添加 BUILD PHASE 调用 flutter 中xcode_backend.sh脚本去编译Flutter。(最新官方方案已解决)
如果使用pod管理,那么还需修改xcconfig配置。(最新官方方案已解决)
因为需要调用 Flutter 的编译脚本,所以这种方式集成后,团队内所有组员电脑和打包机,都必须安装Flutter环境才能编译成功。
2.咸鱼大神提供的一种方案 传送门:
(1)优点:
不需修改 原有 xcconfig 配置。
不需要添加 Run Script 脚本。
运行不需要依赖 Flutter 环境。
(2)缺点
需要单独管理一个 flutter私有索引库。
开发加载 Flutter 页面 首次需要热更新 进行刷新同步 Flutter 代码。
ps:官方提供的方案更加适合单独人员开发,咸鱼大神提供的方案更加适合团队协作,本人是单独开发,所以这里具体介绍官方最新的方案.
准备工作:需要flutter1.8.3以上环境以及pod,如果flutter低于1.8.3终端运行flutter grade升级flutter
步骤1:
终端打开需要集成flutter的iOS项目同级目录运行 flutter create -t module flutter_module
创建完成后的目录结构应该是这样的:
步骤二:在原生项目Podfile中添加
flutter_application_path = '../flutter_module/'
load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb')
install_all_flutter_pods(flutter_application_path)
如果之前没有使用过pod,在原生项目目录下终端运行pod init指令自动生成Podfile文件
添加完后运行pod install
步骤3:
因为flutter不支持bitcode,所以要关闭原生项目bitcode
至此,flutter已经集成进原生项目中,command+b编译项目。
我集成到这里,发现项目会报错,以及引入#import <Flutter/Flutter.h>头文件会提示文件路径无法找到,解决方案使用VSCode或者Android studio打开flutter模块项目运行一次,或者终端打开flutter模块路径下运行
flutter clean
flutter run
因为第一次运行项目,有时flutter.framework尚未生成,导致项目报错或者路径未找到,并不是必现,尚未找到具体原因,如果有人找到原因,请留言告知。
原生代码修改:
AppDelegate.h修改:
AppDelegate.m修改:
flutter入口:
原生与flutter交互:
flutter热更新:
终端打开flutter模块路径下运行flutter attach然后使用xcode运行项目