Appearance
flutter-host-fastlane-boundary-demo
1. 实验目标
这个实验不是“真的把 iOS 包上传 TestFlight”,而是解决当前仓库更现实的问题:在没有独立 iOS host、也不保证当前机器具备 Xcode 签名环境时,怎样把 Fastlane 的职责边界写清楚,并给出一个最小可落地的仓库内样板。
因此它只做两件事:
- 用
Fastfile把现有labs/flutter/host的构建命令收口成 lane。 - 把“哪些步骤能在当前仓库验证、哪些步骤必须依赖真实 macOS + Xcode + 签名”明确分层。
2. 工程要点
host_ios_build_dry_run只跑flutter build ios --simulator --debug --no-codesign:- 能验证 Fastlane 是否成功调起 Flutter host 构建链。
- 不能验证证书、Provisioning Profile、Archive、Export、TestFlight 上传。
host_android_debug作为同构对照:同一份Fastfile也能调起 Android 构建,说明 Fastlane 的价值是统一胶水层,不只服务 iOS。- 当前仓库没有专门的
ios host topics/build/...结构,所以这里不额外复制一套工程,只复用labs/flutter/host/ios/Runner。
3. 关键实现速览
3.1 iOS 边界收口 lane
为什么看这段:它体现了“仓库内可验证的最小 iOS/Fastlane 样板”到底该停在哪。
ruby
lane :host_ios_build_dry_run do
sh("flutter --version")
sh("flutter pub get", chdir: "../../flutter/host")
sh("flutter build ios --simulator --debug --no-codesign", chdir: "../../flutter/host")
end3.2 Android 同构 lane
为什么看这段:Fastlane 的价值是统一构建胶水,而不是 iOS 专属神秘工具。
ruby
lane :host_android_debug do
sh("flutter pub get", chdir: "../../flutter/host")
sh("flutter build apk --debug", chdir: "../../flutter/host")
end4. 运行方式
先准备 Ruby / bundler / fastlane(本仓库不代管 Ruby 环境):
bash
cd labs/ci/flutter-host-fastlane-boundary-demo
fastlane ios host_ios_build_dry_run如果只是看 lane 内容,不在当前机器执行真实构建,也可以直接阅读 Fastfile。
5. 预期现象
- 在有 Flutter+iOS 工具链的 macOS 机器上,lane 会复用
labs/flutter/host的 iOS Runner,完成 simulator debug no-codesign 构建。 - 在没有 Xcode / iOS SDK 的环境中,这条 lane 会失败;这不是 demo 失效,而是它显式暴露了 iOS host 的外部前置条件。
- Android lane 则可作为“Fastlane 统一胶水层”的对照样本。
6. 边界说明
| 能在仓库内表达/验证 | 当前不在仓库内伪造 |
|---|---|
| lane 组织方式 | 真实证书与 Provisioning Profile |
| Fastlane 如何调 Flutter host | gym archive / exportOptionsPlist |
| iOS 构建命令分层(debug/no-codesign) | TestFlight / App Store Connect 上传 |
| Android / iOS 共用一份构建胶水心智 | 独立 iOS host 工程 |
7. 对应知识库文档
- 理论主文档:CI/CD 流水线与 Fastlane 自动化分发
- iOS 构建专题:iOS 构建体系与 CocoaPods/SwiftPM 依赖管理