跳至內容

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。

在這種情況下,你可以透過將 scheme 的 .xcscheme 檔案中 <BuildAction> 元素的 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

登入後,系統會追蹤本地建置,並可在 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,並按照 自託管指南 所述重新啟動。此設定適用於每個受支援嘅項目;儀表板中並無相關設定。請喺你嘅 Scheme 後置動作或終端機所用嘅環境中,設定自託管 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="" 以省略已配置嘅參與者聲明;已驗證憑證身份不受影響。

機器指標#

建構洞察可以包含在建構期間擷取的機器層級效能指標(CPU、記憶體、網絡和磁碟使用量)。要啟用此功能,請設定一個輕量級的後台守護程序,持續採樣系統指標:

bash
tuist setup insights

這會運行一個本地守護程序,在後台採樣指標。數據會由 tuist inspect build 自動收集並隨建構報告上傳。

CI

在建構之前,於你的 CI 機器上運行 tuist setup insights,以同時擷取那裡的機器指標。

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

bash
tuist teardown insights

這會卸載守護程序的 LaunchAgent,移除其 plist,並從 ~/.local/state 刪除已採樣的指標和守護程序日誌,確保沒有東西在後台繼續運行。

報告參與者聲明#

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

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

Scheme 後續動作#

參與者聲明預設為停用狀態。若要為 scheme 後續動作進行設定,請在該腳本中設定 TUIST_ACTOR_ID,而不要依賴 shell 匯出變數。從 Dock 啟動的 Xcode 不會繼承 ~/.zshrc 中的變數。若要使用 Homebrew 明確抑制已設定的聲明,請使用:

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_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"