内容提要
本文介绍如何为Flutter应用搭建自动化CI/CD流水线,使用GitHub Actions和Fastlane实现一键分发。推送代码到dev分支自动构建并分发至Firebase App Distribution和TestFlight;推送到prod分支则分发至Google Play和App Store。文章详细说明凭据生成、密钥配置、Fastlane设置及工作流编写,旨在消除手动构建上传流程,提升发布效率。
延伸解读
为什么需要自动化分发
手动构建和分发移动应用不仅耗时,而且容易出错。每次发布都需要处理代码签名、证书和配置文件,这些步骤在不同机器上可能产生不一致的结果。自动化通过版本控制的配置文件确保每次构建环境一致,减少人为错误,并释放开发者的时间,让他们专注于产品开发。
凭据安全与密钥管理
自动化流水线需要处理敏感凭据,如密钥库、API密钥和服务账户文件。文章强调将这些文件转换为Base64字符串并存储在GitHub Secrets中,避免直接提交到代码库。同时,Fastlane Match使用加密的私有仓库管理iOS证书,确保证书安全且可跨机器使用。
分支策略与发布流程
通过GitHub Actions的触发条件,推送代码到不同分支可以自动触发不同的分发流程。例如,推送到dev分支会分发到Firebase和TestFlight,而推送到prod分支则分发到Google Play和App Store。这种分支策略简化了发布管理,但需要确保分支保护规则和构建号策略得当,避免冲突。
常见陷阱与注意事项
文章列举了多个常见错误,如使用Xcode项目而非工作区、未设置setup_ci、Match只读模式、忘记递增构建号等。这些错误可能导致构建失败或分发异常。遵循最佳实践,如保持证书仓库私有、监控运行时间和成本,可以避免这些问题,确保流水线稳定运行。
Q&A
如何使用Fastlane和GitHub Actions自动化Flutter应用的发布流程?
通过配置GitHub Actions工作流,在推送代码到dev或prod分支时触发自动化构建和分发。工作流使用Fastlane处理构建、签名和上传,分别将dev分支的构建分发到Firebase App Distribution和TestFlight,将prod分支的构建分发到Google Play和App Store Connect。
为什么移动应用需要CI/CD自动化?
因为移动构建涉及代码签名、证书、配置文件等复杂步骤,手动操作容易出错且耗时。自动化可以确保构建的一致性和可重复性,减少人为错误,并释放开发者的时间。
在设置自动化之前需要准备哪些前提条件?
需要:一个能在本地成功构建的Flutter项目(flutter build apk --release和flutter build ios --release --no-codesign均成功)、Apple Developer账号(Admin或Account Holder角色)、Google Play Console账号(应用至少处于草稿状态)、Firebase项目(启用App Distribution)、本地安装Ruby和Fastlane、macOS上安装Homebrew。
如何生成并配置Firebase、Apple和Google Play的凭据?
Firebase:在Firebase控制台获取App ID,并生成服务账户JSON文件。Apple:在App Store Connect生成API密钥(.p8文件),记录Issuer ID和Key ID。Google Play:在Google Cloud Console创建服务账户并下载JSON文件,然后在Play Console授予Release manager权限。
如何将二进制凭据文件(如keystore、p8)配置为GitHub Actions Secrets?
使用base64命令将二进制文件编码为Base64字符串,然后将字符串保存为GitHub仓库的Secret。例如:base64 -i release-keystore.jks > release-keystore-base64.txt,然后复制内容到Secret。对于JSON文件,可以直接粘贴原始内容。
Android和iOS的Fastlane配置有哪些主要文件?
Android:Gemfile、gradle.properties、Appfile、Pluginfile、Fastfile。iOS:Gemfile、Appfile、Matchfile、Pluginfile、Fastfile。这些文件定义了依赖、应用标识、证书管理和构建分发lane。
GitHub Actions工作流如何区分dev和prod分支的构建分发?
工作流通过if条件判断github.ref_name是否为'prod'或'dev'。例如,Android工作流中,如果分支是prod则构建App Bundle并上传到Google Play,否则构建APK并分发到Firebase。iOS工作流类似,dev分支运行firebase和beta lane,prod分支运行prod lane。
使用Fastlane Match管理iOS证书时需要注意什么?
需要创建私有证书仓库,并配置MATCH_PASSWORD和MATCH_GIT_BASIC_AUTHORIZATION。在Fastfile中,使用match action下载证书,并设置readonly: false以允许首次创建。同时,在CI中需要运行setup_ci来配置临时钥匙串,避免交互式提示。
常见的自动化配置错误有哪些?
常见错误包括:使用Xcode项目而非工作区、未设置setup_ci、Match只读模式导致新项目失败、忘记递增构建号、编码文件带尾随换行、使用错误的Firebase分发类型、Google Play服务账户权限不足。
有哪些最佳实践可以优化自动化发布流程?
最佳实践包括:保持证书仓库私有并控制访问、设置最小构建号策略、添加分支保护规则、监控工作流运行时间和成本、将发布说明存储在文件中而非仅作为输入。