App Store 提交自動化工具
精通透過 Fastlane、螢幕截圖生成、中繼資料管理與審查最佳化,自動化處理 App Store 與 Google Play 提交作業。
決策點
何時使用階段性上線 vs 全面上線
如果是第一個應用程式版本或有重大功能變更:
└── 使用階段性上線:10% → 50% → 100% 為期 7 天
└── 在各階段監控當機率與使用者回饋
否則如果為熱修復或次要更新:
└── 如果是關鍵安全性修復:
└── 立即全面上線
否則:
└── 使用 50% → 100% 為期 2-3 天
憑證更新決策矩陣
| 情境 | 到期前天數 | 動作 |
|---|---|---|
| 發布憑證 | < 30 天 | 執行 fastlane match nuke distribution,然後重新產生 |
| 開發憑證 | < 30 天 | 執行 fastlane match nuke development |
| 佈建設定檔 | < 14 天 | 使用 force_for_new_devices: true 參數執行 match |
| 推播憑證 | < 30 天 | 在 Apple Developer Portal 重新產生,更新伺服器 |
提交類型選擇
├── iOS:使用 TestFlight 外部群組(最多 10,000 名測試者)
└── Android:使用內部軌道(最多 100 名測試者)
否則如果需要公開 Beta 測試:
├── iOS:使用 TestFlight 公開連結
└── Android:使用附帶選擇加入 URL 的封閉軌道
否則如果已準備好正式發布:
├── 檢查是否滿足所有商店要求(參見品質閘門)
└── 使用正式發布/發布軌道
失敗模式
Match 憑證不符
- 症狀:「找不到憑證」或「佈建設定檔與憑證不符」
- 診斷: Git 儲存庫不同步,或團隊成員手動產生了憑證
- 修復: 執行
fastlane match nuke,重新產生所有憑證,並提交至 match 儲存庫
App Review 拒絕 - 資訊不足
- 症狀:「我們需要更多資訊才能審查您的應用程式」
- 診斷: 缺少示範帳號憑證、聯絡資訊或審查備註
- 修復: 在
fastlane/metadata/review_information/中加入demo_user.txt、demo_password.txt和詳細的notes.txt
大型應用程式建置逾時
- 症狀: Fastlane 在
build_app步驟期間逾時 - 診斷: 應用程式大小 > 2GB 或建置過程複雜
- 修復: 在
build_app動作中加入build_timeout: 7200,啟用增量建置
螢幕截圖生成失敗
- 症狀: snapshot/screengrab 產生空白或不正確的螢幕截圖
- 診斷: UI 測試未等待動畫完成,或使用了錯誤的模擬器
- 修復: 在 UI 測試中加入明確的等待,確認模擬器名稱與 Snapfile 裝置清單相符
中繼資料字元數超過限制
- 症狀: 上傳失敗,出現「描述太長」錯誤
- 診斷: 本地化中繼資料超過平台限制(App Store:4000 字元,Play Store:4000 字元)
- 修復: 在提交前執行
fastlane precheck,將描述修剪至平台限制內
完整範例
**情境:**為一個同時支援 iOS 與 Android 的 React Native 應用程式設定自動化提交
初步評估:
- 應用程式已有手動提交流程
- 一個 4 人開發團隊需要共享程式碼簽署
- 需要階段性上線與螢幕截圖自動化功能
步驟 1:設定決策
# 在專案根目錄
fastlane init
# 選擇選項 4(手動設定)
**遇到決策點:**憑證管理策略
- **新手選擇:**使用 Xcode 自動簽署(在 CI 中會失敗)
- **專家選擇:**設定 match 以實現團隊共享憑證
步驟 2:設定 Match
# fastlane/Matchfile
git_url("https://github.com/company/certificates")
storage_mode("git")
type("appstore") # 也支援:development, adhoc
步驟 3:建立 Lane(關鍵決策:Beta vs 正式發布)
# fastlane/Fastfile
desc "TestFlight 提交並增加建置編號"
lane :beta do
setup_ci if ENV['CI']
match(type: "appstore", readonly: true)
# 決策:始終增加建置編號,版本號僅在發布時增加
increment_build_number(build_number: ENV['BUILD_NUMBER'])
build_app(workspace: "ios/MyApp.xcworkspace", scheme: "MyApp")
upload_to_testflight(skip_waiting_for_build_processing: true)
end
**專家見解:**在 CI 環境中始終使用 skip_waiting_for_build_processing: true 以避免逾時
步驟 4:首次執行前的驗證
- 執行
fastlane precheck驗證中繼資料 - 在單一裝置上進行測試,然後再進行完整的螢幕截圖自動化
- 確認 CI 環境安裝了正確的 Xcode 版本
**結果:**自動化流程將提交時間從 45 分鐘縮短至 8 分鐘
品質閘門
執行正式發布 Lane 前必須通過的提交前檢查清單:
-
fastlane precheck執行無警告 - 所有必要的中繼資料檔案存在於
fastlane/metadata/[locale]/中 - 已為所有必要的裝置尺寸(iPhone 6.9 吋、6.3 吋、iPad 13 吋)產生螢幕截圖
- 版本號已從上一個發布版本遞增
- 建置編號是唯一的,且高於 TestFlight 的最新編號
- 程式碼簽署憑證有效期 > 30 天
- 如果應用程式需要登入,已在
review_information/中提供示範帳號憑證 - 已設定階段性上線百分比(建議從 10% 開始)
- 已設定 CI 環境變數:
FASTLANE_USER、MATCH_PASSWORD、FASTLANE_SESSION - 已完成目標市場的所有本地化作業
- 應用程式圖示和必要資源已以正確格式提供
不適用範圍
請勿將此技能用於:
-
CI/CD 管線設定 → 請改用
github-actions-pipeline-builder- 此技能假設 CI 環境已存在,不會建立工作流程/管線
-
應用程式架構決策 → 請改用
react-native-architect- 此技能處理部署作業,不處理程式碼結構或導航
-
分析與當機回報 → 請改用
mobile-analytics-crash-reporting-expert- 此技能專注於商店提交,不處理發布後監控
-
App Store 最佳化 (ASO) → 請諮詢專屬的 ASO 專家
- 此技能處理技術性提交,不處理關鍵字最佳化或轉換率
-
後端 API 開發 → 請改用
api-architect- 此技能假設您的應用程式後端已準備好上線
何時應委派:
- 對於建置設定問題 →
react-native-architect - 對於從頭開始設定 CI/CD →
github-actions-pipeline-builder - 對於應用程式效能監控 →
mobile-analytics-crash-reporting-expert