likes
comments
collection
share

在iOS项目中依赖Flutter Module-②远程依赖Git资源

作者站长头像
站长
· 阅读数 0

目前我找到4种远程依赖方案,这篇介绍第1种方案,如果想提前看其它方案,请进传送门🚪

  1. 远程依赖Git上的.xcframework和.podspec
  2. 本地.podspec中转依赖远程Git上的.xcframework
  3. 本地.podspec中转依赖远程文件服务器上的.xcframework.zip压缩文件
  4. 本地.podspec中转依赖远程文件服务器上的Flutter.xcframework.zip + Git上的其它.xcframework

远程依赖Git上的.xcframework和.podspec

准备阶段

跟上篇一样,先创建一个Flutter Module;

cd some/path/
flutter create --template module flutter_module

flutter_module目录的结构如下,.../flutter_module/lib/里面放到的就是我们写的dart文件。

some/path/
├── flutter_module
│   ├── README.md
│   ├── build
│   ├── flutter_module.iml
│   ├── flutter_module_android.iml
│   ├── lib
│   ├── pubspec.lock
│   ├── pubspec.yaml
│   └── test

建好flutter_module后,随便加点flutter代码和第三方组件(比如flutter_boost)。

要把编译产物放到远程Git,咱还得建一个Git仓库,比如叫FlutterModuleSDK.git,建好git之后克隆到本机,这个本地目录就用来接收编译产物。

开工

先编译flutter_module,指定导出路径为本地FlutterModuleSDK.git根目录,这里用的是相对路径../../FlutterModuleSDK/

cd flutter_module/
flutter build ios-framework --xcframework --no-universal --output=../../FlutterModuleSDK/

编译完成后会在FlutterModuleSDK目录增加下面这些文件,为了减少文件大小,只需要用Release下面的4个.xcframework即可,把这4个.xcframework移动到FlutterModuleSDK根目录,然后删除Debug/Profile/Release3个文件夹,不需要用了。

在iOS项目中依赖Flutter Module-②远程依赖Git资源

Flutter.xcfromework可以通过上面的编译指令直接得到,还可以通过下面的指令编译后下载zip文件得到,中间多了一个--cocoapods选项,我个人测试的时候就是这个编译指令,然后下载zip解压得到Flutter.xcfromework

flutter build ios-framework --cocoapods --xcframework --no-universal --output=../../FlutterModuleSDK/

到这一步,FlutterModuleSDK根目录下面除了.git就只有几个*.xcfromework文件。

Flutter.xcfromework
App.xcframework
FlutterPluginRegistrant.xcframework
其它第三方库 比如 flutter_boost.xcframework

为了通过CocoaPods远程依赖,还需要创建.podspec文件。在FlutterModuleSDK根目录下创建FlutterModuleSDK.podspec,描述文件的大致主要内容如下,具体的配置项跟发布CocoaPods组件库是一样的,核心区别就是s.vendored_frameworks = '*.xcframework',这个库里面只有.xcframework文件,没有其它的代码文件。

Pod::Spec.new do |s|
  s.name                  = 'FlutterModuleSDK'
  s.version               = '1.0.2'
  s.summary               = 'Flutter Module SDK'
  s.source                = { :git => 'https://a.gitlab.cn/flutter/FlutterModuleSDK.git', :tag => "#{s.version}" }
  s.platform              = :ios, '8.0'
  s.requires_arc          = true
  s.vendored_frameworks   = '*.xcframework'
end

然后提交git,并打上对应的版本标签,push到远程仓库FlutterModuleSDK.git

经过漫长等待...       # Flutter.xcfromework文件非常大,上传到Git会很慢

如果push成功,就完成了将产物推到云端的步骤,后面的操作就轮到iOS端来执行。

Podfile中添加依赖

pod 'FlutterModuleSDK', :git => 'https://a.gitlab.cn/flutter/FlutterModuleSDK.git', :tag => '1.0.1'

拉取组件库,pod install or update,即可运行项目。

小结

除了准备阶段,这个方案主要步骤可以分3步,麻烦一点就是提取产物,然后上传、下载都会很慢。

[1.编译]:编译FlutterModule [2.发布] 收集产物推到云端Git [3.更新代码] iOS端更新CocoaPods

优点:所有Flutter编译出来的framework都放到了git,方便统一进行版本管理,Flutter开发可以和iOS开发相互独立,也不用所有iOS开发人员都安装Flutter开发环境,也避免了iOS侧因Flutter版本不一致出现问题。

缺点Flutter.xcframework文件太大,没有压缩,上传到git / 从git克隆下载下来很费时。如果Git有单个文件大小限制,那还Push不了。

后面的文章会介绍本地podspec中转依赖远程资源的方案,来避免`.xcframework`文件太大影响上传下载的问题。