跳至內容

Xcode 建置洞察

處理大型專案不應需要重複建置相同的程式碼。Tuist Build Insights 讓你追蹤建置分析,以便在本機與 CI 建置時間成為瓶頸之前識別趨勢。

建置洞察由 tuist inspect build 指令驅動,通常會加入至你的 Scheme 的 post-action。

要開始追蹤本機建置時間,你可以將 tuist inspect build 指令加入至你的 Scheme 的 post-action:

用於檢查建置的 Post-action

Note

將「Provide build settings from」欄位設為可執行檔或你的主要建置目標,以擷取建置設定。

Note

當建置失敗時,不會執行 post-scheme action。

在這種情況下,你可以在相關的 project.pbxprojBuildAction 中將 runPostActionsOnFailure 設為 YES 來執行它:

diff
<BuildAction
buildImplicitDependencies="YES"
parallelizeBuildables="YES"
+ runPostActionsOnFailure="YES">

對於 Mise,在 post-action 環境中啟用 tuist:

bash
# -C ensures that Mise loads the configuration from the Mise configuration
# file in the project's root directory.
$HOME/.local/bin/mise x -C $SRCROOT -- tuist inspect build
Mise 路徑解析

你的環境的 PATH 不會被 scheme post action 繼承,因此請使用 Mise 的絕對路徑。這取決於你如何安裝 Mise。建置設定應從目標繼承,以便 mise 可以從 $SRCROOT 執行。

對於 Homebrew,將 Homebrew 路徑加入至 post-action 環境:

bash
export PATH="/opt/homebrew/bin:/usr/local/bin:$PATH"
tuist inspect build

Actor claims 預設為停用。若要為 scheme post-action 設定一個,請在該腳本中設定 TUIST_ACTOR_ID,而不是依賴 shell exports。從 Dock 啟動的 Xcode 不會繼承來自 ~/.zshrc 的變數。若要明確抑制使用 Homebrew 設定的 claim,請使用:

bash
export PATH="/opt/homebrew/bin:/usr/local/bin:$PATH"
export TUIST_ACTOR_ID=""
tuist inspect build

使用 Mise 時,在 Mise 載入其環境後覆寫該值:

bash
$HOME/.local/bin/mise x -C "$SRCROOT" -- env TUIST_ACTOR_ID="" tuist inspect build

使用明確的標籤而非空值來選擇加入。

登入後,系統會追蹤本機建置,並可在 Tuist 儀表板中查看:

Tip

若要快速存取儀表板,請從 CLI 執行 tuist project show --web。

包含建置洞察的儀表板

CI 中的建置洞察#

若要在 CI 上追蹤建置洞察,請確保 CI 已通過驗證。

對於由 Xcodebuild 驅動的 CI,你需要:

  • 在叫用 xcodebuild 動作時使用 tuist xcodebuild。
  • 將 -resultBundlePath 加入至你的 xcodebuild 指令。

如果沒有 -resultBundlePath,就不會產生所需的活動記錄與結果套件,且 tuist inspect build 無法分析建置。

在私有網路上進行免憑證報告#

自行託管的部署可讓開發人員無需登入即可發布完成的報告。營運人員必須在實例上設定 TUIST_NETWORK_TRUSTED_INSIGHTS_ACCESS=true,並按照自行託管指南中的說明重新啟動。這適用於每個受支援的專案;儀表板中沒有相關設定。請在您的方案後動作或終端機所使用的環境中,設定自行託管的 URL 和專案。當缺少憑證時,CLI 會自動探索實例政策:

bash
export TUIST_URL="https://tuist.internal.example"
tuist inspect build
# To publish local test results:
tuist inspect test

在確實缺少憑證的情況下,活動記錄與 XCResult 套件會在本地解析並作為結構化報告傳送。不會提交原始封存、附件、涵蓋率/歷史記錄上傳、遠端處理器、分片參考或選擇性執行證據。報告仍然可見,但無法更新已驗證的測試案例狀態或驅動隔離/失敗自動化。儀表板與其他特權指令仍需要登入。除非實例另行啟用網路信任的快取存取或已提供憑證,否則請保持快取整合停用。

現有憑證仍維持已驗證狀態。無效、損毀、空白或被拒絕刷新的憑證會以安全方式失敗並保留在磁碟上,因此後續指令不會靜默變成未簽署狀態。請重新登入或明確登出作為刻意恢復動作。在升級免憑證用戶端之前,請將每個伺服器副本升級至支援探索的版本,並設定最終伺服器 URL 而不使用重新導向。不支援探索的舊版伺服器、停用的實例以及探索失敗的情況仍需要驗證。不需要用戶端選擇加入。獨立設定 TUIST_ACTOR_ID="" 以省略設定的 actor claim;已驗證的憑證身分不受影響。

機器指標#

建置洞察可以包含在建置期間擷取的機器層級效能指標(CPU、記憶體、網路與磁碟使用量)。若要啟用此功能,請設定一個輕量級的背景常駐程式,持續採樣系統指標:

bash
tuist setup insights

這會執行一個在背景採樣指標的本機常駐程式。資料會由 tuist inspect build 自動擷取並隨建置報告上傳。

CI

在建置前於你的 CI 機器上執行 tuist setup insights,以便也在那裡擷取機器指標。

若要停止收集機器指標,請執行:

bash
tuist teardown insights

這會卸載常駐程式的 LaunchAgent、移除其 plist,並從 ~/.local/state 刪除採樣的指標與常駐程式記錄,因此不會有任何程序在背景繼續執行。

報告 actor claim#

只有在將 TUIST_ACTOR_ID 明確設為組織範圍的標籤時,建立報告的請求才會包含可選的 x-tuist-actor-id 標頭,例如 TUIST_ACTOR_ID=employee-123 tuist inspect build。預設不會傳送任何標籤,且 Tuist 不會偵測作業系統使用者名稱。空的 TUIST_ACTOR_ID 會省略報告的識別碼,但不會移除基於憑證的已驗證身分。識別碼必須是 1–128 位元組的非空格可列印 ASCII;無效的覆寫會被省略且不回退。如果自訂代理伺服器拒絕不熟悉的標頭,請使用空環境覆寫來選擇退出。

已驗證的個人憑證具有優先權;否則,用戶端報告的識別碼會顯示為未驗證,且永遠不會授予權限或自動連結至使用者。任何可以檢視專案報告的人都能看到識別碼,包括專案公開時的公眾檢視者,並且會包含在資料匯出中,因此請勿包含機密資訊。這適用於建置、測試與命令事件報告。舊版伺服器會忽略可選標頭,而新版伺服器會接受沒有該標頭的舊版用戶端。沒有識別碼的新共用令牌報告會顯示未知,而非發布組織;歷史報告會保留其先前的歸屬。建置與測試清單會區分已驗證使用者與未驗證的報告識別碼。除非自行託管的實例明確啟用免憑證報告且用戶端探索到該政策,否則仍需要驗證。

自訂中繼資料#

你可以透過環境變數將中繼資料附加到建置,以改善篩選功能。

環境變數#

變數格式說明
TUIST_BUILD_TAGS逗號分隔在單一變數中包含多個標籤。
TUIST_BUILD_VALUE_*單一值鍵值組,其中後綴為鍵。

範例#

在叫用建置前,於 CI 或你的 Shell 中設定這些值:

bash
export TUIST_BUILD_TAGS="nightly,ios-team,release-candidate"
bash
export TUIST_BUILD_VALUE_TICKET="PROJ-1234"
export TUIST_BUILD_VALUE_PR_URL="https://github.com/myorg/myrepo/pull/123"