Skip to content

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")
end

3.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")
end

4. 运行方式 ​

先准备 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 hostgym archive / exportOptionsPlist
iOS 构建命令分层(debug/no-codesign)TestFlight / App Store Connect 上传
Android / iOS 共用一份构建胶水心智独立 iOS host 工程

7. 对应知识库文档 ​

8. 完整源码 ​

站点构建时间:2026/8/24 23:43:17