# Xcode 建置洞察 {#xcode-build-insights}

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

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

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

![用於檢查建置的 Post-action](/images/guides/features/build-insights/inspect-build-scheme-post-action.png)

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


> [!NOTE]
> 當建置失敗時，不會執行 post-scheme action。

>
> 在這種情況下，你可以在相關的 `project.pbxproj` `BuildAction` 中將 `runPostActionsOnFailure` 設為 `YES` 來執行它：
>
> ```diff
> <BuildAction
>    buildImplicitDependencies="YES"
>    parallelizeBuildables="YES"
> +  runPostActionsOnFailure="YES">
> ```

對於 [Mise](https://mise.jdx.dev/)，在 post-action 環境中啟用 `tuist`：

```sh
# -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
```

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

對於 [Homebrew](https://brew.sh/)，將 Homebrew 路徑加入至 post-action 環境：

```sh
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，請使用：

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

使用 Mise 時，在 Mise 載入其環境後覆寫該值：

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

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

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

> [!TIP]
> 若要快速存取儀表板，請從 CLI 執行 `tuist project show --web`。


![包含建置洞察的儀表板](/images/guides/features/build-insights/builds-dashboard.png)

## CI 中的建置洞察 {#continuous-integration}

若要在 CI 上追蹤建置洞察，請確保 CI 已<.localized_link href="/guides/integrations/continuous-integration#authentication">通過驗證</.localized_link>。

對於由 Xcodebuild 驅動的 CI，你需要：
- 在叫用 `xcodebuild` 動作時使用 <.localized_link href="/cli/xcodebuild#tuist-xcodebuild">`tuist xcodebuild`</.localized_link>。
- 將 `-resultBundlePath` 加入至你的 `xcodebuild` 指令。

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

## 在私有網路上進行免憑證報告 {#network-trusted-publishing}

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

```sh
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；已驗證的憑證身分不受影響。

## 機器指標 {#machine-metrics}

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

```bash
tuist setup insights
```

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

> [!TIP]
> **CI**
>
> 在建置前於你的 CI 機器上執行 `tuist setup insights`，以便也在那裡擷取機器指標。

若要停止收集機器指標，請執行：

```bash
tuist teardown insights
```

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


## 報告 actor claim {#report-actor-claim}

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

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

## 自訂中繼資料 {#custom-metadata}

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

### 環境變數

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

### 範例

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

```sh
export TUIST_BUILD_TAGS="nightly,ios-team,release-candidate"
```

```sh
export TUIST_BUILD_VALUE_TICKET="PROJ-1234"
export TUIST_BUILD_VALUE_PR_URL="https://github.com/myorg/myrepo/pull/123"
```
