在上篇# 在iOS项目中依赖Flutter Module-③本地podspec中转依赖远程Flutter编译产物介绍了如何通过本地podspec中转依赖远程Flutter编译产物,整个流程操作起来其实有点繁琐费时,所以我又写了构建脚本来代替人工操作。
脚本的代码详见flutter_build_script.sh 源码。
提示:Github上的方案和我在掘金介绍的方案有点小差别,但主体流程是一样的。掘金介绍的方案是把几个`.xcframework`都放在`FlutterModuleSDK`库,而Github上是拆分了2个SDK,个人实践后觉得还是没必要拆。
脚本的大致流程
实现功能
- 校验git是否有未提交的更新
- git commit, git tag ,git push等一系列git操作和校验
- 校验.ios/Runner.xcworkspace
- 编译Flutter module,导出xcframework
- 版本号自增 或 手动输入
- 修改podspec版本号
- 钉钉通知
- 杂七杂八的结果校验
- xcframework黑名单,过滤掉重复依赖的framwork,用来解决问题:内嵌依赖的xcframework和pod依赖的第三方库出现重复构建,新版Xcode编译失败
- 可选择debug / profile / release 单个编译模式,我还没找到解决方案
使用
1.脚本里面如果有FlutterAppSDK和FlutterPluginSDK2个库以及对应的2个Git仓库,用FlutterModuleSDK替换掉这2个SDK,再删掉相关代码。
截止2021.8.24,脚本里面有
FlutterAppSDK和FlutterPluginSDK这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.执行脚本,按提示输入选项即可