原生 iOS · 夜間建置
讓 Git 推送觸發封存,並交由 fastlane 上傳。
將雲端 Mac 註冊為 GitHub Actions self-hosted runner、GitLab Runner 或 Jenkins agent。推送至發布分支後,先簽出固定提交,再產生 Release 封存檔與 IPA。TestFlight 上傳是獨立步驟,方便將建置失敗與上傳失敗分開重試。
請先準備以下三項
- 設定
WORKSPACE、SCHEME和EXPORT_OPTIONS,分別指向工作區、共用 scheme 與匯出設定。 - 請在目前的建置使用者帳戶中設定簽署憑證與描述檔;可使用 fastlane match 管理,並透過 CI 密鑰注入解密所需的憑證。
- 設定
ASC_API_KEY_JSON,指向 fastlane 使用的 App Store Connect API 金鑰 JSON 檔。請勿將金鑰放入程式碼儲存庫。
驗收時要檢查什麼
封存檔 build/App.xcarchive、匯出的 IPA、提交識別碼與 Xcode 版本。請確認 TestFlight 已收到對應版本;建置指令成功結束,不代表上傳已完成。
機型建議:Host M4 Plus 的 24GB 統一記憶體適合日常多 target 建置。先以序列方式確認流程順利,再依記憶體壓力與 DerivedData 用量,決定是否提高並行數。
set -euo pipefail
: "${WORKSPACE:?Set WORKSPACE}"
: "${SCHEME:?Set SCHEME}"
: "${EXPORT_OPTIONS:?Set EXPORT_OPTIONS}"
: "${ASC_API_KEY_JSON:?Set ASC_API_KEY_JSON}"
mkdir -p build
xcodebuild -version
xcodebuild \
-workspace "$WORKSPACE" -scheme "$SCHEME" \
-configuration Release \
-destination 'generic/platform=iOS' \
-archivePath build/App.xcarchive archive
xcodebuild -exportArchive \
-archivePath build/App.xcarchive \
-exportPath build/export \
-exportOptionsPlist "$EXPORT_OPTIONS"
IPA_PATH="$(find build/export -type f -name '*.ipa' -print -quit)"
test -n "$IPA_PATH"
bundle exec fastlane pilot upload \
--ipa "$IPA_PATH" \
--api_key_path "$ASC_API_KEY_JSON"