iOS老项目集成Flutter最新混编方案

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


创建flutter模块

创建完成后的目录结构应该是这样的:


目录结构

步骤二:在原生项目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文件


Podfile文件内容

添加完后运行pod install

步骤3:

因为flutter不支持bitcode,所以要关闭原生项目bitcode


关闭bitcode编码

至此,flutter已经集成进原生项目中,command+b编译项目。

我集成到这里,发现项目会报错,以及引入#import <Flutter/Flutter.h>头文件会提示文件路径无法找到,解决方案使用VSCode或者Android studio打开flutter模块项目运行一次,或者终端打开flutter模块路径下运行

flutter clean

flutter run

因为第一次运行项目,有时flutter.framework尚未生成,导致项目报错或者路径未找到,并不是必现,尚未找到具体原因,如果有人找到原因,请留言告知。


原生代码修改:

AppDelegate.h修改:

继承FlutterAppDelegate

AppDelegate.m修改:

初始化flutterEngine

flutter入口:


flutter入口

原生与flutter交互:


OC代码


flutter代码


flutter代码


flutter热更新:

终端打开flutter模块路径下运行flutter attach然后使用xcode运行项目


输入r更新页面

代码Demo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容