Flutter iOS TestFlight
本文档描述如何使用 GitHub Actions 自动构建 Flutter iOS 应用、递增构建号,并上传到 TestFlight。
備註
簽發憑證需要用 KeyChain, 但在 /Applications/Utilities/ 中找不到 KeyChain, 可以在 Finder 中搜尋
KeyChain
來找到。打開會提示請使用`密碼`取代`鑰匙串`,但新的`密碼`就真的只有儲存密碼的功能,憑證還是要由`鑰匙串`導出 p12 憑證時,需選擇
登入
裡面的憑證
Tab,選擇對應的憑證,右鍵選擇導出
,選擇p12
格式,並設定密碼。直接在 `登入` 裡面選憑證是不會有導出選項的,一定要切到 `憑證` Tab 才會有。雖然 Github 可以做 CI/CD,但是憑證還是需要有一台 Mac 才有辦法產生,所以這邊的 CI/CD 只是用來自動化流程,不是完全不需要 Mac。
p12 無法直接打開並複製到 Github Action Secrets,需要先轉成 base64 格式,再複製到 Github Secrets。
cedvdb/action-flutter-build-ios@v1
會去吃pubspec.yaml
裡面的 environment > flutter > sdk 版本,所以要確保這個版本是正確的。environment: sdk: ">=3.5.0 <4.0.0" flutter: 3.24.3ipa 上傳後,Apple 會自動檢查,需要依照檢查後的指示,到
ios/Runner/Info.plist
裡面增加對應的聲明設定值,例如:
需要在 Mac 先 Build 一次,然後把
build/ios/ipa/ExportOptions.plist
複製到ios/GithubActionsExportOptions.plist
,並且把signingStyle
改成manual
,這樣才能上傳到 TestFlight。com.myapp.app.dev
是你的 Bundle ID{{ YOUR PROFIL NAME }}
是你的 Provisioning Profile 名稱 profiles- <key>signingStyle</key> <string>manual</string> <key>provisioningProfiles</key> <dict> <key>com.myapp.app.dev</key> <string>{{ YOUR PROFIL NAME }}</string> </dict>
工作流程概览
此工作流程适用于推送到 feature/testFlight
分支时触发,并包含以下步骤:
自动递增构建号 :确保每次上传到 TestFlight 时构建号都递增,避免重复上传错误。
构建 Flutter iOS 应用 :使用 Flutter 构建命令生成
.ipa
文件。上传至 TestFlight :通过 App Store Connect API 上传构建到 TestFlight。
先决条件
1. 设置 GitHub Secrets
为了使工作流成功运行,你需要在 GitHub 仓库中配置以下 Secrets:
CERTIFICATE_P12 :iOS Distribution 证书的
.p12
文件内容,使用 base64 编码。CERTIFICATE_PASSWORD :导出
.p12
文件时设置的密码。PROVISIONING_PROFILE :iOS Distribution 的 provisioning profile 文件内容,使用 base64 编码。
APP_STORE_CONNECT_ISSUER_ID :从 App Store Connect 获取的
Issuer ID
。APP_STORE_CONNECT_KEY_ID :App Store Connect 的
Key ID
。APP_STORE_CONNECT_PRIVATE_KEY :App Store Connect API 的私钥内容。
2. 初始化构建号工具 agvtool
在本地的 iOS 项目中启用 agvtool
来自动递增构建号:
3. 添加 GithubActionsExportOptions.plist
在 ios
目录中创建 GithubActionsExportOptions.plist
文件,内容如下:
4. 工作流程 YAML
以下是 .github/workflows/testflight.yml 文件的完整内容:
5. 关键步骤说明
自动递增构建号 我们通过使用 agvtool next-version -all 来递增 Xcode 项目的构建号(CFBundleVersion),确保每次上传的构建号都高于之前的版本。
构建 Flutter iOS 应用 此步骤调用 Flutter 命令构建 .ipa 文件,使用 ios/GithubActionsExportOptions.plist 配置签名选项。
上传至 TestFlight 在生成 .ipa 文件后,使用 henrik1/upload-testflight@v2 上传到 TestFlight。
注意事项
确保所有的密钥和证书已正确配置在 GitHub Secrets 中。
每次构建的应用版本号(CFBundleVersion)都需要递增,否则上传到 TestFlight 会失败。