之前一直用 Fastlane 做 iOS 发布自动化,直到有次 CI 换成了 Linux 构建机,才发现这条链路的依赖比想象中重:Fastlane 要 ruby 环境,签名、打包、上传这些 lane 底层调的还是 Xcode 的 xcodebuild,macOS 之外跑不起来。Fastlane 之外的选择其实不少,这篇按依赖和场景盘点几条 iOS 发布自动化的路径,说清楚各自适合什么团队。

Fastlane 的依赖,问题出在哪

Fastlane 本身是个 ruby 工具集,把签名、编译、打包、上传、截图这些步骤封装成 lane。用起来确实省事,但三个前提:ruby 环境要维护(版本、bundle 依赖);核心步骤依赖 Xcode 工具链;执行环境基本锁定 macOS。团队规模小、人手一 Mac 的时候没感觉,一旦 CI 迁移、新同事环境搭建,这些依赖就开始制造成本。

官方命令自己编排:xcodebuild 脚本

最朴素的选择是回归官方命令:xcodebuild 编译打包,codesign 签名,altool 或 Transporter 上传,用 shell 脚本串起来。零第三方依赖,每一步都透明可控,出问题知道去哪查。代价是这些步骤的细节(签名参数、导出选项、上传凭据)要自己维护,脚本出问题排查成本不低,适合有专人维护基础设施的团队。

托管 CI 服务:Bitrise 和 Codemagic

Bitrise 是专门的移动端 CI 服务,证书、描述文件、签名、TestFlight 上传都有现成的 workflow 步骤,界面上拖一拖就能配好;Codemagic 主打 Flutter 生态,Flutter 项目的构建、测试、发布开箱即用。这类服务的共同点:不用自己维护构建环境,按构建分钟数计费,花钱买省事。缺点是脚本之外的定制灵活度受平台限制,出问题要跟平台支持沟通。

GitHub Actions:生态自带

仓库在 GitHub 的话,GitHub Actions 是最顺手的选项:macOS runner 预装 Xcode,workflow 用 YAML 写,签名证书和描述文件存进仓库 Secret,社区里现成的 action 很多。Free 额度对个人项目够用,团队项目按分钟计费。依赖的网络环境、runner 的预装版本变动,偶尔会踩到更新导致的坑。

本地一键出包:KXApp 的路径

如果团队没有 macOS 基础设施,也不想为发布维护一套脚本或托管服务,还有一种本地方法:KXApp(快蝎) 在 Windows、Linux 或 Mac 上免 Xcode 完成整个开发闭环——内置编译工具套装编译项目,连 iPhone 真机调试,开发完一键生成安装包,产物交给跨平台的上传工具提交 App Store。发布链路里"构建出包"这一环不再依赖 macOS 和 ruby 环境,剩下的签名、上传用配套工具补齐。

按场景选

Fastlane 之外的选择按场景对号入座:有 macOS 基础设施、专人维护脚本,xcodebuild 编排够用且最透明;仓库在 GitHub 想少维护一套东西,GitHub Actions 顺手;团队没有运维人力,Bitrise/Codemagic 这类托管服务买省事;没有 Mac、CI 也不是 macOS 的团队,KXApp 本地一键出包加上传工具,是最短的发布路径。发布自动化的本质是把"签名、打包、上传"这串动作稳定重复,工具怎么选,取决于你手上有哪台机器、愿意维护多少环境。