# 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。
>
> 在這種情況下，你可以透過將 scheme 的 `.xcscheme` 檔案中 `<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
```

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

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

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

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

要追蹤 CI 上的構建洞察，請確保 CI 已<.localized_link href="/guides/server/authentication#continuous-integration">通過驗證</.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> 所述重新啟動。此設定適用於每個受支援嘅項目；儀表板中並無相關設定。請喺你嘅 Scheme 後置動作或終端機所用嘅環境中，設定自託管 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=""` 以省略已配置嘅參與者聲明；已驗證憑證身份不受影響。


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

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

```bash
tuist setup insights
```

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

> [!TIP]
> **CI**
>
> 在建構之前，於你的 CI 機器上運行 `tuist setup insights`，以同時擷取那裡的機器指標。

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

```bash
tuist teardown insights
```

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


## 報告參與者聲明 {#report-actor-claim}

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

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

### Scheme 後續動作 {#actor-claim-post-actions}

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

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

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


## 自訂元數據 {#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"
```

