Flutter 套装 【集成Flutter到现有iOS项目中】

139 阅读2分钟

官方提供三种集成思路。flutter.cn/docs/develo…

  1. 使用Cocoapods + FlutterSDK的方式进行集成。
  2. 通过将Flutter的代码和依赖打成 xcframework,在xcode中进行链接,内嵌框架。
  3. 使用Cocoapods 引用 Flutter的xcframework 产物。
  • 第一种方案需要每个人都安装相同的 Flutter SDK 环境,否则无法编译项目,在多人开发且并行迭代的情况下,显得非常的繁琐,所以直接摒弃。

  • 第二种方案是将 Flutter 的xcframework 内嵌到Xcode的项目中,解决了第一种方案的问题。我们项目前期Flutter覆盖率较低的情况下就是使用这种方案。
    随着Flutter的覆盖率越来越大,Flutter 框架引用的三方框架也越来越多,以及更多的Plugins,非常难以维护。需要不断的增加新的Plugin,且存在版本控制风险,每个xcframework的版本无法直观检测,给排查问题带来了极大的难度,所以替换了该方案。Embed frameworks in Xcode

  • 第三种方案是使用Cocoapods管理Flutter的build产物。解决了第一第二种方案带来的问题。

pod 'Flutter', :podspec => 'some/path/MyApp/Flutter/[build mode]/Flutter.podspec'

但是由于Flutter SDK非常大,达到600M左右,打包的产物如果放在gitlab中,将会是个严重的内存消耗和带宽消耗,可能存在半天无法拉下代码的问题。

我们的最终解决方案是:

  1. 将 Flutter Module build 成 xcframework,然后将所有的 xcframework 压缩,存储到我们的共享服务器中 share.dxy.net/ioslib/ 目录下
  2. 创建一个 podspec.json 文件,resource指向 share.xx.net/ioslib/aspirin_flutter,
  3. 只需要将 podspec.json文件进行版本管理,就可以达到拉取不同的 module 产物。

image.png

最后将会 zip 成

image.png

由 podspec文件进行指向:

image.png

最终项目中的引用为:

image.png

好处:

  1. 不需要所有的开发者都安装Flutter环境,也能将项目run起来。
  2. Flutter作为一个framework集成进来,和原生代码进行隔离,起到了真正的专注作用。

以上不解的可以私信,大家一起交流~