相信很多使用原生+Flutter的iOS项目都会遇到混合开发的集成问题,也有大神写了一些解决方案,下面就记录一下我的心路历程:
前期准备
开始之前,我先拜读了一些大神的文章(这里只挑出对我帮助最大的):
方案筛选
经过探索,结合项目的实际情况(我司的项目采用模块化开发,pods方式集成),有下面的两个方案:
使用google的集成方案
将flutter编译后的产物打包到一个新的子模块中,并在其中实现对应的接口和交互逻辑。
无论是从使用方便的角度还是对代码的侵入程度来看,采用方案2都是顺理成章的。
实现方式
写脚本之前,先来看看打包步骤(其实就是收集编译产物)
打包步骤
打包的步骤如下:
1、flutter build ios。
2、进入对应flutter项目的../ios(或者.ios)/Flutter/文件夹,找到App.framwork和Flutter.framework以及FlutterPluginRegistrant文件夹,拷贝到子模块中。
3、进入对应flutter项目的build/ios/Debug-iphoneos(或者Release-iphoneos),拷贝各个依赖库的.a文件到子模块中。
4、如果项目有依赖到第三方的插件(一般来说都会有),需要根据.flutter-plugins文件中的路径到对应模块的源代码的ios/Classes中拷贝各个依赖库的.h文件(这一步可以说是相当繁琐了)。
使用自动化脚本执行上面的操作
以下代码均在flutter工程的目录下操作:
首先是打包: