vocus logo

方格子 vocus

🐺iOS 開發補完計畫:Swift Macros 信任警告與警報疲勞

13-avatar-img
發佈於🧠 軟體開發思維 個房間
更新 發佈閱讀 4 分鐘

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

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

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

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

Swift Macros 確認警告

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

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

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

按下去錯誤項目以後,會看到提示:

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

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

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

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

如何自動跳過

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

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

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,檔案內容就是那一行:

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

結語

我覺得 Swift Macros 這種安全確認的機制還有改進空間。因為開發者到後來會傾向無腦地按下信任,甚至直接用指令的方式總是跳過,就等於沒有確認的保護效果。也就是警報疲勞(類似於「狼來了效應」)導致了安全性的下降。

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

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

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

留言
avatar-img
13+
3.4K會員
161內容數
13 以 10+ 年 iOS 開發經驗為基礎撰寫,助你在 AI 時代成為更有自信的技術工作者。 ❤️ 支持 13 創作! 🤖 AI 工具實戰經驗與深度思考 🧠 軟體開發思維、職涯發展建議 💡 實用技巧與踩坑經驗分享 😔 開發者身心健康與職業傷害
13+的其他內容
2025/10/29
意外總是會發生,但可以有策略地降低風險。不管是生活還是開發者的日常工作流程,都該有一些容錯的餘裕。
2025/10/29
意外總是會發生,但可以有策略地降低風險。不管是生活還是開發者的日常工作流程,都該有一些容錯的餘裕。
2025/10/28
試錯是一種策略,也是一種態度。在可控制的範圍內犯錯與失敗並不是浪費,而是累積經驗的好方法。請拋開一步達成完美解答的執念,那只會讓你永遠無法開始。
2025/10/28
試錯是一種策略,也是一種態度。在可控制的範圍內犯錯與失敗並不是浪費,而是累積經驗的好方法。請拋開一步達成完美解答的執念,那只會讓你永遠無法開始。
2025/10/27
不做沒必要的修改,保持使用者的習慣,是極難、卻最有長期價值的事情。這種堅持,在 AI 能夠快速產出軟體的時代,更值得考慮。
2025/10/27
不做沒必要的修改,保持使用者的習慣,是極難、卻最有長期價值的事情。這種堅持,在 AI 能夠快速產出軟體的時代,更值得考慮。
看更多
你可能也想看
Thumbnail
創作不只是個人戰,在 vocus ,也可以是一場集體冒險、組隊升級。最具代表性的創作者社群「vocus 野格團」,現在有了更強大的新夥伴加入!除了大家熟悉的「官方主題沙龍」,這次我們徵召了 8 位領域各異的「個人主題專家」,將再度嘗試創作的各種可能,和格友們激發出更多未知的火花。
Thumbnail
創作不只是個人戰,在 vocus ,也可以是一場集體冒險、組隊升級。最具代表性的創作者社群「vocus 野格團」,現在有了更強大的新夥伴加入!除了大家熟悉的「官方主題沙龍」,這次我們徵召了 8 位領域各異的「個人主題專家」,將再度嘗試創作的各種可能,和格友們激發出更多未知的火花。
Thumbnail
看完上篇 4 位新成員的靈魂拷問,是不是意猶未盡?別急,野格團新血的驚喜正接著登場!今天下篇接力的另外 4 位「個人主題專家」,戰力同樣驚人──領域從旅行美食、運動、商業投資到自我成長;這些人如何維持長跑般的創作動力?在爆紅的文章背後,又藏著哪些不為人知的洞察?5 大靈魂拷問繼續出擊
Thumbnail
看完上篇 4 位新成員的靈魂拷問,是不是意猶未盡?別急,野格團新血的驚喜正接著登場!今天下篇接力的另外 4 位「個人主題專家」,戰力同樣驚人──領域從旅行美食、運動、商業投資到自我成長;這些人如何維持長跑般的創作動力?在爆紅的文章背後,又藏著哪些不為人知的洞察?5 大靈魂拷問繼續出擊
Thumbnail
這篇文章探討瞭如何在iOS應用程式中客製化Alert,包括改變字體大小、內嵌連結以及讓Alert的高度隨著字數增長並提供scroll操作。同時使用SwiftUI進行客製化,並介紹瞭解決高度超出範圍後文字捲動與scrollView固定高度的方法。
Thumbnail
這篇文章探討瞭如何在iOS應用程式中客製化Alert,包括改變字體大小、內嵌連結以及讓Alert的高度隨著字數增長並提供scroll操作。同時使用SwiftUI進行客製化,並介紹瞭解決高度超出範圍後文字捲動與scrollView固定高度的方法。
Thumbnail
本文介紹瞭如何在SwiftUI中調整元件的對齊方式,包括置中、向左/向右/向上/向下對齊的方法。透過調整HStack、VStack以及frame的maxWidth、maxHeight和alignment屬性,可以達到想要的對齊效果。
Thumbnail
本文介紹瞭如何在SwiftUI中調整元件的對齊方式,包括置中、向左/向右/向上/向下對齊的方法。透過調整HStack、VStack以及frame的maxWidth、maxHeight和alignment屬性,可以達到想要的對齊效果。
Thumbnail
本文檔介紹了在Swift中使用套件的詳細方法,包括如何引用第三方套件和自定義模組,如何創建自定義套件,以及一些常見的Swift套件。這些套件可以幫助開發者快速添加功能到項目中,提高開發效率和程式碼品質。
Thumbnail
本文檔介紹了在Swift中使用套件的詳細方法,包括如何引用第三方套件和自定義模組,如何創建自定義套件,以及一些常見的Swift套件。這些套件可以幫助開發者快速添加功能到項目中,提高開發效率和程式碼品質。
Thumbnail
本章節介紹了如何建立並設置Swift項目以及如何選擇和設置Swift代碼編輯器。這包括在Xcode和命令行中建立Swift項目,選擇Xcode、Visual Studio Code或AppCode作為編輯器,以及如何使用SPM安裝插件。
Thumbnail
本章節介紹了如何建立並設置Swift項目以及如何選擇和設置Swift代碼編輯器。這包括在Xcode和命令行中建立Swift項目,選擇Xcode、Visual Studio Code或AppCode作為編輯器,以及如何使用SPM安裝插件。
Thumbnail
這份文件的目的是介紹Swift語言,包括它的特性、應用範疇,以及誰在使用它。它也提供了一些學習Swift的資源和工具,以及一些常見的Swift庫和框架。
Thumbnail
這份文件的目的是介紹Swift語言,包括它的特性、應用範疇,以及誰在使用它。它也提供了一些學習Swift的資源和工具,以及一些常見的Swift庫和框架。
Thumbnail
需求情境: 在設計畫面時,資料來源是後台的 api,每一次畫面細節的修修改改,都會觸發 Xcode Preview 程序,導致不斷呼叫後台。此時若資料結構和大小都具有一定規模,就會導致效率低落,不斷等待,且消耗伺服器資源甚鉅。 解決方案: 將後台傳回的資料以檔案形式暫存在本地端,每次 pr
Thumbnail
需求情境: 在設計畫面時,資料來源是後台的 api,每一次畫面細節的修修改改,都會觸發 Xcode Preview 程序,導致不斷呼叫後台。此時若資料結構和大小都具有一定規模,就會導致效率低落,不斷等待,且消耗伺服器資源甚鉅。 解決方案: 將後台傳回的資料以檔案形式暫存在本地端,每次 pr
Thumbnail
這篇文章描述了作者從兼職開發轉為全職開發的過程,並分享了從混進學界指日可待的積極態度。作者也提及自己在專案製作與個人生活上的矛盾與感想,最後分享了專案管理和敏捷開發相關的文章與影片。
Thumbnail
這篇文章描述了作者從兼職開發轉為全職開發的過程,並分享了從混進學界指日可待的積極態度。作者也提及自己在專案製作與個人生活上的矛盾與感想,最後分享了專案管理和敏捷開發相關的文章與影片。
Thumbnail
Part.1 搞定基本的 UI 開始開發 iOS App。 首先準備一台 Mac,然後安裝 Xcode,新增專案,系統即刻生成基本的專案結構。coding 的起點在檔案 ContentView.swift: import SwiftUI struct ContentView: View {  
Thumbnail
Part.1 搞定基本的 UI 開始開發 iOS App。 首先準備一台 Mac,然後安裝 Xcode,新增專案,系統即刻生成基本的專案結構。coding 的起點在檔案 ContentView.swift: import SwiftUI struct ContentView: View {  
Thumbnail
這篇文章探討了在軟體開發中的技術債可能來自哪些原因,以及如何自動化偵測與修復技術債。作者透過分享不同情境下的技術債選擇,提供了對於技術債的思考與建議,針對開發人員在需要做出無奈的技術決策時,提供了一些建議。此外,還提供了一些在做出技術決策時的方法,如保留抽象層和避免vendor lock-in。
Thumbnail
這篇文章探討了在軟體開發中的技術債可能來自哪些原因,以及如何自動化偵測與修復技術債。作者透過分享不同情境下的技術債選擇,提供了對於技術債的思考與建議,針對開發人員在需要做出無奈的技術決策時,提供了一些建議。此外,還提供了一些在做出技術決策時的方法,如保留抽象層和避免vendor lock-in。
Thumbnail
確保沒有遺漏或錯誤 程式的完整資訊資料對於程式設計至關重要。這是因為只有透過完整的資訊,我們才能確保在程式設計中沒有任何遺漏或錯誤。最終,後台管理扮演著管理系統中所有動作和行為是否符合特定標準的重要角色。 採取不符合預期的行動 這種符合性的重要性在於,當我們設計程式時,希望使用者按照預期的方式
Thumbnail
確保沒有遺漏或錯誤 程式的完整資訊資料對於程式設計至關重要。這是因為只有透過完整的資訊,我們才能確保在程式設計中沒有任何遺漏或錯誤。最終,後台管理扮演著管理系統中所有動作和行為是否符合特定標準的重要角色。 採取不符合預期的行動 這種符合性的重要性在於,當我們設計程式時,希望使用者按照預期的方式
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News