在iOS项目中依赖Flutter Module-⑤远程依赖构建脚本(编译+发布)

431 阅读2分钟

在上篇# 在iOS项目中依赖Flutter Module-③本地podspec中转依赖远程Flutter编译产物介绍了如何通过本地podspec中转依赖远程Flutter编译产物,整个流程操作起来其实有点繁琐费时,所以我又写了构建脚本来代替人工操作。

脚本的代码详见flutter_build_script.sh 源码

提示:Github上的方案和我在掘金介绍的方案有点小差别,但主体流程是一样的。掘金介绍的方案是把几个`.xcframework`都放在`FlutterModuleSDK`库,而Github上是拆分了2个SDK,个人实践后觉得还是没必要拆。

脚本的大致流程

image.png

实现功能

  • 校验git是否有未提交的更新
  • git commit, git tag ,git push等一系列git操作和校验
  • 校验.ios/Runner.xcworkspace
  • 编译Flutter module,导出xcframework
  • 版本号自增 或 手动输入
  • 修改podspec版本号
  • 钉钉通知
  • 杂七杂八的结果校验
  • xcframework黑名单,过滤掉重复依赖的framwork,用来解决问题:内嵌依赖的xcframework和pod依赖的第三方库出现重复构建,新版Xcode编译失败
  • 可选择debug / profile / release 单个编译模式,我还没找到解决方案

使用

1.脚本里面如果有FlutterAppSDKFlutterPluginSDK2个库以及对应的2个Git仓库,用FlutterModuleSDK替换掉这2个SDK,再删掉相关代码。

截止2021.8.24,脚本里面有FlutterAppSDKFlutterPluginSDK这2个SDK,如果之后只有FlutterModuleSDK,则说明我改了)

2.修改这几个本地仓库的路径,包括相关本地源码仓库路径、导出路径等等。

readonly workspace_root_path="$HOME/Desktop/workspace"
readonly flutter_module_path="${workspace_root_path}/flutter_notes/flutter_module"
readonly flutter_build_output_path="${workspace_root_path}/futter_build_tmp"
readonly flutter_module_sdk_podspec_path="${workspace_root_path}/flutter_module_sdk_podspec"
readonly flutter_app_sdk_path="${workspace_root_path}/flutter_app_sdk"
readonly flutter_plugin_sdk_path="${workspace_root_path}/flutter_plugin_sdk"

readonly app_sdk_podspec_path="$flutter_module_sdk_podspec_path/FlutterAppSDK.podspec"
readonly plugin_sdk_podspec_path="$flutter_module_sdk_podspec_path/FlutterPluginSDK.podspec"

3.按需要设置黑名单,可以解决编译阶段重复构建的问题

blacklist=(
"FMDB.xcframework"
"MMKV.xcframework"
"MMKVCore.xcframework"
"Sentry.xcframework"
)

# 如果不需要加黑名单,则保持空数组即可
blacklist=(
)

4.执行脚本,按提示输入选项即可

参考 & 致谢