可重複使用的建置參考架構

掌握雲端 Mac 在各交付流程中的角色

以下流程並非客戶案例,也不代表未經驗證的成效承諾。我們將觸發來源、獨享實體機上的工作、簽章責任、日誌位置與產物去向分別說明,方便團隊依照自己的儲存庫與權限模式複製使用。

5 套流程 涵蓋建置、交付與實驗工作
1 台獨享節點 工作負載依序執行
4 類界線 程式碼、憑證、日誌與產物分開管理
BUILD PASSPORT iOS Release / Main
RUN-042
01
程式碼提交 由儲存庫事件觸發工作
已接收
02
相依項目與快取 依鎖定檔還原並記錄命中狀態
已完成
03
Xcode Archive 在獨享實體機上封存
執行中
04
檢查與交接 驗證簽章後匯出受控產物
待處理
批次佇列 MAIN → RELEASE → HOTFIX 每項工作使用獨立工作目錄
簽章健康檢查 設定相符 敏感資料由團隊自行管理
範例使用方式

先釐清責任界線,再複製自動化步驟

參考架構只說明工作如何流轉。儲存庫權限、簽章資料、開發者帳號、發布審核與產物保留期限,仍由使用團隊自行定義。

環境可重現

固定 Xcode、Command Line Tools、相依項目鎖定檔與清理指令。若要變更版本,先在獨立工作目錄驗證,再切換至正式佇列。

版本與鎖定檔

憑證勿存入儲存庫

透過受控注入方式提供權杖、憑證與描述檔。日誌僅保留排查問題所需資訊,輸出前移除路徑、權杖與私有儲存庫網址。

最小權限

明確管理產物去向

Archive、匯出套件、符號檔與測試報告分別命名,並附上提交識別碼。交接完成後,依團隊政策清除節點上的暫存副本。

受控匯出
App 自動化打包

從提交事件到可供審核產物的五段交接流程

這條流程適合將 CDNMac M4 註冊為 self-hosted runner,由儲存庫事件啟動工作,再將最終產物交由團隊審核或後續發佈系統處理。

01
程式碼提交 觸發來源:開發者或合併流程

由主要分支或發布標籤觸發佇列。工作開始時會記錄提交雜湊、分支、觸發者與目標 Scheme,不會將敏感變數輸出至日誌。

去向:獨享實體機上的隔離工作目錄
02
還原相依項目 觸發來源:執行指令碼

依據鎖定檔還原 Swift Package、CocoaPods 或其他相依項目。快取鍵至少包含鎖定檔摘要與工具版本,避免舊快取跨版本造成污染。

去向:版本化快取目錄與相依項目日誌
03
Xcode Archive 觸發來源:建置工作

使用明確指定的 workspace、scheme、configuration 與 destination 執行封存。若失敗,保留結束代碼、關鍵日誌與結果套件。

去向:附有提交識別碼的 Archive 目錄
04
簽章檢查 觸發來源:發布工作

核對 Bundle Identifier、團隊、憑證有效性與描述檔是否相符。開發者帳號與簽章資產一律由使用者團隊管理。

去向:審核清單,不輸出明文憑證
05
產物封存 觸發來源:交接指令碼

匯出安裝套件、符號檔、建置摘要與校驗值,再複製到團隊控制的儲存位置。確認交接完成後,清除暫存目錄。

去向:受控儲存空間與團隊審核佇列
多分支佇列

一台獨享實體機,依規則安排三類分支

獨享不代表所有工作都能平行執行。對單台 CDNMac M4 而言,較穩妥的做法是明確設定優先順序、工作目錄與清理界線,避免發布工作與日常驗證互相影響。

MAIN 持續驗證

主要分支

合併後執行單元測試、靜態檢查與基本 Archive。快取可重複使用,但 DerivedData 需依專案與 Xcode 版本隔離。

優先順序
一般
工作目錄
work/main
結束時清理
刪除未追蹤檔案
RELEASE 候選版本

發布分支

進入佇列後,暫停同一儲存庫中非必要的工作,使用獨立的簽章檢查與匯出設定,並由團隊審核產物摘要。

優先順序
高
工作目錄
work/release
結束時清理
刪除暫存鑰匙圈
HOTFIX 人工核准

修補分支

由負責人確認後加入佇列。只還原解決問題所需的快取,建置完成後清除暫存變數並記錄復原基準。

優先順序
人工確認
工作目錄
work/hotfix
結束時清理
還原佇列與基準
佇列策略

發布工作不會中斷正在寫入產物的工作;失敗的工作先收集日誌,再釋出工作目錄;每項工作結束時都會執行冪等清理。

MAIN RELEASE HOTFIX CLEAN
FLUTTER IOS

分開記錄跨平台相依項目與 Xcode 階段

Flutter iOS 的等待時間往往分散在相依項目還原、CocoaPods 與 Xcode 建置各階段。拆分階段後,團隊才能判斷快取是否有效,以及問題出在哪一層。

階段界線

每個階段各自輸出日誌與結束代碼。只有前一階段成功,下一階段才會讀取其產物,避免將相依項目問題誤判為 Xcode 編譯問題。

  • 先確認 Flutter SDK 版本符合專案需求。
  • 將鎖定檔摘要納入快取鍵。
  • Pods 與 Dart 快取分開失效。
  • 匯出套件與符號檔分開交接。
01
還原相依項目

還原專案相依項目,並記錄 SDK 版本與鎖定檔摘要。

快取:Dart 套件目錄
02
CocoaPods

依據 Podfile.lock 安裝 iOS 原生相依項目,不重複使用不相符的 Pods。

日誌:Pods 安裝輸出
03
Xcode 建置

使用明確指定的 workspace、scheme 與 configuration 執行 Archive。

產物:Archive 與結果套件
04
匯出產物

完成簽章檢查後匯出,並產生提交識別碼與校驗摘要。

去向:團隊控制的儲存空間

快取命中只代表對應目錄與鍵值可重複使用,不表示整體建置一定會更快。升級 Flutter、CocoaPods、Xcode 或鎖定檔後,應重新驗證快取界線。

TESTFLIGHT 交付

建置產物先交由團隊審核,再進入發佈流程

雲端 Mac 負責產生與檢查建置產物,但不會取代團隊的發布審核。開發者帳號、簽章資產、版本資料與發佈決策皆由使用者管理。

  1. 01

    產生候選產物

    發布分支完成 Archive 與匯出,並附上提交雜湊、版本號、建置號、符號檔與校驗摘要。

  2. 02

    執行團隊審核

    負責人核對變更範圍、簽章是否相符、隱私資料、權限用途與測試結果。若未通過,回到對應提交重新建置。

  3. 03

    進入發佈流程

    審核通過後,由團隊控制的發布工作使用受限憑證處理上傳;敏感資料不會存放在儲存庫或一般建置日誌中。

  4. 04

    記錄交接結果

    保存產物識別碼、審核結論與必要日誌。交接完成後,清除節點上的暫存匯出檔案與暫存憑證。

CDNMac 節點負責 建置、封存、簽章相符檢查、產物匯出
使用者團隊負責 帳號管理、簽章資產、發布審核、發佈資料與合規判斷
APPLE SILICON AI 實驗

驗證模型相容性,不將實驗結果描述為效能承諾

CDNMac M4 配備 M4、16GB RAM 與 256GB SSD,適合進行本機模型相容性驗證與原型測試;團隊仍應先確認模型、上下文、資料與記憶體需求。

A

準備資料

只同步實驗所需的資料子集,並記錄來源與版本。敏感資料須先去識別化,並為原始資料、中間處理資料與輸出結果設定不同目錄。

輸入
版本化樣本
復原點
唯讀原始資料副本
B

驗證執行環境

記錄 macOS、執行階段、框架與模型格式。先用小型樣本驗證載入、推論與記憶體使用量,再決定是否擴大實驗範圍。

檢查項目
版本與可用記憶體
復原點
固定相依項目清單
C

匯出結果

輸出實驗參數、結果摘要與必要日誌,避免在報告中寫入完整敏感資料。租用期間結束前,將必要結果複製到受控儲存空間。

輸出
參數、摘要與日誌
界線
不承諾特定處理量
設定評估

若模型、上下文與中間資料無法在 16GB RAM 內穩定執行,或需要未列出的晶片與記憶體規格,請先聯絡服務團隊確認。原型測試通過不代表已驗證正式環境所需容量。

洽詢實驗配置
團隊回顧用語

以可查證的工程事實說明工作流程的價值

以下內容為適用於內部回顧的角色對話範例,不代表特定客戶評價、評分或公司背書。

「我更在意佇列是否只供目前團隊使用,以及失敗後能否留下方便排查的日誌。比起泛泛地談建置速度,把工作目錄和產物去向說清楚更有幫助。」

行動端負責人

「多個分支工作共用同一台實體機時,真正需要設計的是優先順序、快取鍵與清理策略。獨享資源提供了隔離基礎,但工作流程仍要由我們自行定義。」

CI 平台工程師

「跨時區連線時,我希望遠端存取、背景建置與產物匯出彼此獨立。如此一來,即使本地網路短暫中斷,也不會影響正在執行的建置工作。」

獨立開發者
複製工作流程

準備事項、環境變數與失敗復原點

開始複製前,先建立最小可執行版本。環境變數名稱可依團隊規範調整,但敏感值不應提交至儲存庫,也不應直接輸出到建置日誌。

五套參考工作流程實作清單
工作流程 準備事項 環境變數清單 失敗復原點
App 自動化打包 儲存庫存取權、Xcode 版本、Scheme、相依項目鎖定檔、匯出設定 REPO_REF
BUILD_SCHEME
EXPORT_PATH
保留結果套件與提交識別碼,清除暫存鑰匙圈,回到上一個可成功建置的提交
多分支建置 分支優先順序、獨立工作目錄、平行數限制、冪等清理指令碼 BRANCH_NAME
RUN_PRIORITY
WORK_ROOT
停止後續佇列、保存目前日誌,還原乾淨的工作樹與原始佇列順序
Flutter iOS Flutter 版本、Podfile.lock、Xcode workspace、快取鍵規則 FLUTTER_ROOT
PODS_CACHE_KEY
IOS_SCHEME
依階段讓快取失效,不刪除可重複使用的日誌,從最近成功的階段重新執行
TestFlight 交付 發布審核、版本資料、簽章相符檢查、產物校驗與團隊控制的憑證 RELEASE_VERSION
BUILD_NUMBER
ARTIFACT_PATH
停止發佈工作、撤銷暫存憑證、返回審核清單並重新產生候選產物
AI 實驗 模型格式、小型樣本資料、執行階段版本、記憶體監測與匯出目錄 MODEL_PATH
DATASET_PATH
RESULT_PATH
保留參數清單與結果摘要,還原固定相依項目,回到唯讀原始資料副本
01 先執行最小工作

只設定一個儲存庫、一個 Scheme 和一個輸出目標,確認節點能完成整個流程。

02 再加入敏感變數

透過受控方式注入最小權限憑證,並驗證日誌遮蔽、到期與輪替流程。

03 最後擴充佇列

新增更多分支前,先設定優先順序、逾時時間、失敗回收與工作目錄清理規則。

將參考流程套用到一台獨享雲端 Mac

先選擇租用期間與節點,再依指南驗證連線、Xcode 環境、儲存庫權限與第一次 Archive。實際可用狀態與交付資訊以控制台即時回傳為準。