> ## Content Index
> Fetch the complete content index at: https://ethanhuang13.plus/llms.txt
> Use this file to discover other available public pages before exploring further.

# 🐺iOS 開發補完計畫 #5 Swift Macros 信任警告與警報疲勞
- URL: https://ethanhuang13.plus/swift-macros-skip-validation-fatigue/
- Published: 2025-11-02T22:00:35.000Z
- Updated: 2026-03-02T05:37:35.000Z
- Description: Swift Macros 方便但有安全風險，所以開發者需要進行確認。然而，這個確認步驟的設計容易讓人直接跳過，所以最後似乎沒有比較安全，只是增加了麻煩而已。本文教你怎麼信任或跳過，但更重要的是學會掌控風險。
- Author: 13
- Tags: 🐣 iOS 開發補完計畫, 🧠 軟體開發思維, 🆓 免費公開

每每去教初學者 iOS 開發，我就會發現自己的專家盲點。

最近一次是這樣：我用了 [SwiftUI-TCA-Template](https://github.com/ethanhuang13/SwiftUI-TCA-Template?ref=ethanhuang13.plus) 作為示範專案的模版。這個專案有依賴 TCA 等套件，會使用到 Swift Macros 這個功能。而因為 Macros 有機會在電腦執行一些開發者可能沒有意識到的程式操作，有一定程度的安全風險，預設會被當成錯誤擋下來，**需要手動確認**。

由於習慣了，每次遇到這種情況，我都會快速把確認步驟操作完，或是早就設定好一律跳過 Macros 確認。但對於初學者來說，可能會一頭霧水。

以下說明如何在 Xcode 進行同意 Swift Macros 的步驟。

## Swift Macros 確認警告

第一次編譯或更新套件時，在 Xcode 的 Issue Navigator 會看到需要確認的警告，例如：

![使用 Swift Macros 的套件有更新，所以 Xcode 以錯誤提示阻止專案編譯，需要開發者手動確認](https://storage.ghost.io/c/b5/ef/b5ef3a60-300e-4c93-99a1-ce3ec3f3c437/content/images/2025/11/CleanShot-2025-11-02-at-22.46.11@2x.png)

使用 Swift Macros 的套件有更新，所以 Xcode 以錯誤提示阻止專案編譯，需要開發者手動確認

按下去錯誤項目以後，會看到提示：

![確認要信任與啟用 Macros 的對話框](https://storage.ghost.io/c/b5/ef/b5ef3a60-300e-4c93-99a1-ce3ec3f3c437/content/images/2025/11/CleanShot-2025-11-02-at-22.45.53@2x.png)

確認要信任與啟用 Macros 的對話框

請確認該 Macros 是你信任的（比如來自你信任的開發者），然後按下「Trust & Enable」。

這樣子就把「錯誤」給解決了，之後應該可以正常編譯。

## 如何自動跳過

這種認證雖然有其必要，但是多次重複遇到以後，會覺得十分煩人。因為如果每次套件有升版就需要再確認一次、不同電腦也要個別再確認一次。

有經驗的開發者，會知道在 Mac 上用一行指令一勞永逸關掉它的方式：

```bash
defaults write com.apple.dt.Xcode IDESkipMacroFingerprintValidation -bool YES

```

## CI 設定

比較嚴謹的團隊，在協作開發時會用到 CI 來跑測試。而上述指令，在自行架設的 Mac CI Server 上也很常用。不然有用到 Swift Macros 的專案就會無法編譯。

另一種方式則是在使用 `xcodebuild` 指令時，加上 `-skipMacroValidation` 參數。該參數的官方說明：

> Skip validation of macros (this can be a security risk if they are not from trusted sources)

最後，如果你使用 Xcode Cloud，那麼跳過 Swift Macros 驗證的方式比較特別。要在專案目錄新增一個 `ci_scripts` 資料夾，裡面放入一個 script 檔 `ci_post_clone.sh`，檔案內容就是那一行：

```bash
defaults write com.apple.dt.Xcode IDESkipMacroFingerprintValidation -bool YES

```

## 結語

我覺得 Swift Macros 這種安全確認的機制還有改進空間。因為開發者到後來會傾向無腦地按下信任，甚至直接用指令的方式總是跳過，就等於沒有確認的保護效果。也就是[警報疲勞](https://zh.wikipedia.org/wiki/%E8%AD%A6%E6%8A%A5%E7%96%B2%E5%8A%B3?ref=ethanhuang13.plus)（類似於「[狼來了效應](https://zh.wikipedia.org/zh-tw/%E7%8B%BC%E4%BE%86%E4%BA%86?ref=ethanhuang13.plus)」）導致了安全性的下降。

以我自己來說，每台新 Mac 在安裝設定時，就會把這行指令給輸入、一律跳過。以至於在準備課程教材時，就忘了學生第一次會遇到需要確認的障礙。

**開發者還是有責任去了解自己所使用的套件、Swift Macros 的來源，學會掌控風險。**

不過我希望 Apple 能把「這個新版本 Macros 已經被確認過」的事實記錄下來，甚至加入版本控制。換言之，**以專案為單位來信任，而不是以個別電腦為單位來信任**。應該能減少開發團隊的麻煩，而且能提升確認的實質保護效果。