美文网首页
iOS老项目集成Flutter最新混编方案

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

作者: 毕小强 | 来源:发表于2019-08-22 17:13 被阅读0次

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

相关文章

网友评论

      本文标题:iOS老项目集成Flutter最新混编方案

      本文链接:https://www.haomeiwen.com/subject/aexosctx.html