付費限定

📦解決 SwiftSyntax 編譯超慢的問題

13-avatar-img
發佈於📦 推薦 Swift Package 個房間
更新 發佈閱讀 7 分鐘

在繼續 Swift Dependencies 推坑系列之前,我想先介紹一下對於開發體驗十分重要的東西:Prebuilt SwiftSyntax

Swift Macros 的理想 vs 現實

2023 年,Swift Macros 作為 Swift 5.9 的一個重要功能推出,方便 library 開發者自行創造更簡便的語法。

Apple 的 frameworks 開始採用 Macros 簡化語法,例如 SwiftData 的 @Model@Query,SwiftUI 的 @Entry

但是實務上,Swift Macros 並沒有像 property wrapper 等簡化語法的功能一樣被第三方開發者廣泛使用。一個實際的理由就是因為增加了明顯的編譯時間

Swift Macros 的用意是提供簡單的語法,並且會自動被開展成較為複雜的版本。而為了做到產生語法的效果,Swift Macros 依賴於 SwiftSyntax 這個 library 去產生合法的 Swift 語法。

這個 SwiftSyntax 過去是以 Package 的方式來使用。換言之,一旦專案使用到任何 Swift Macros,就需要有 SwiftSyntax 的參與。SwiftSyntax 不僅會一併被加入專案原始碼,也要完整編譯整個 library。

編譯 SwiftSyntax 相當費時

SwiftSyntax 並不是一個小 library。在 Apple silicon 的 Mac 上編譯,需要至少一分鐘的編譯時間。在一些 CI server(包括 Xcode Cloud)上更是有機會延長數分鐘。這個問題困擾我的程度,甚至到了把 MacBook Air M2 換成 MacBook Pro M3 Max 這麼嚴重。

如果是 SwiftUI 的模組引用了使用 Swift Macros 的套件,那麼 SwiftSyntax 增加的編譯時間,基本上就可以破壞 Preview 即時更新的效果。

對於使用 library 的開發者來說,雖然能夠享受到優雅、簡化過的語法,但是增加許多編譯時間,完全得不償失。

開發者社群對於 Swift Macros 這樣的矛盾一直頗為無奈,也有一些開發者試圖自行編譯 SwiftSyntax 成 binary 與 xcframework。例如:

但這些都不是一勞永逸的辦法,最好還是要由 Apple 出面解決。

Xcode 26 提供了預先編譯的 SwiftSyntax

以行動支持創作者!付費即可解鎖
本篇內容共 2620 字、0 則留言,僅發佈於📦 SwiftUI & TCA、😔 開發者職業傷害、📦 推薦 Swift Package你目前無法檢視以下內容,可能因為尚未登入,或沒有該房間的查看權限。
留言
avatar-img
留言分享你的想法!
avatar-img
13+
1.5K會員
84內容數
13 以 10+ 年 iOS 開發經驗為基礎撰寫,助你在 AI 時代成為更有自信的技術工作者。 ❤️ 支持 13 創作! 🤖 AI 工具實戰經驗與深度思考 🧠 軟體開發思維、職涯發展建議 💡 實用技巧與踩坑經驗分享 😔 開發者身心健康與職業傷害
13+的其他內容
2025/09/11
iOS 26 即將正式推出、iPhone 17 準備開始預購、Xcode 26 RC 版已經可以打包上傳 App。如果還沒準備好 Liquid Glass 設計有暫時解決方案。
2025/09/11
iOS 26 即將正式推出、iPhone 17 準備開始預購、Xcode 26 RC 版已經可以打包上傳 App。如果還沒準備好 Liquid Glass 設計有暫時解決方案。
2025/08/31
我的初衷很單純:因為看到這個時代,許多人有「AI 焦慮」,想做出一場緩解大家 AI 焦慮的閉幕演講。
Thumbnail
2025/08/31
我的初衷很單純:因為看到這個時代,許多人有「AI 焦慮」,想做出一場緩解大家 AI 焦慮的閉幕演講。
Thumbnail
2025/08/27
即使在現實中不擅長聊天,也可以享受研討會的互動。稍微做點準備即可!不論社交能力如何,這篇文章談到的準備適用於任何人。
Thumbnail
2025/08/27
即使在現實中不擅長聊天,也可以享受研討會的互動。稍微做點準備即可!不論社交能力如何,這篇文章談到的準備適用於任何人。
Thumbnail
看更多
你可能也想看
Thumbnail
透過蝦皮分潤計畫,輕鬆賺取零用金!本文分享5-6月實測心得,包含數據流程、實際收入、平臺優點及注意事項,並推薦高分潤商品,教你如何運用空閒時間創造被動收入。
Thumbnail
透過蝦皮分潤計畫,輕鬆賺取零用金!本文分享5-6月實測心得,包含數據流程、實際收入、平臺優點及注意事項,並推薦高分潤商品,教你如何運用空閒時間創造被動收入。
Thumbnail
單身的人有些會養寵物,而我養植物。畢竟寵物離世會傷心,植物沒養好再接再厲就好了~(笑)
Thumbnail
單身的人有些會養寵物,而我養植物。畢竟寵物離世會傷心,植物沒養好再接再厲就好了~(笑)
Thumbnail
不知你有沒有過這種經驗?衛生紙只剩最後一包、洗衣精倒不出來,或電池突然沒電。這次一次補貨,從電池、衛生紙到洗衣精,還順便分享使用心得。更棒的是,搭配蝦皮分潤計畫,愛用品不僅自己用得安心,分享給朋友還能賺回饋。立即使用推薦碼 X5Q344E,輕鬆上手,隨時隨地賺取分潤!
Thumbnail
不知你有沒有過這種經驗?衛生紙只剩最後一包、洗衣精倒不出來,或電池突然沒電。這次一次補貨,從電池、衛生紙到洗衣精,還順便分享使用心得。更棒的是,搭配蝦皮分潤計畫,愛用品不僅自己用得安心,分享給朋友還能賺回饋。立即使用推薦碼 X5Q344E,輕鬆上手,隨時隨地賺取分潤!
Thumbnail
身為一個典型的社畜,上班時間被會議、進度、KPI 塞得滿滿,下班後只想要找一個能夠安靜喘口氣的小角落。對我來說,畫畫就是那個屬於自己的小樹洞。無論是胡亂塗鴉,還是慢慢描繪喜歡的插畫人物,那個專注在筆觸和色彩的過程,就像在幫心靈按摩一樣,讓緊繃的神經慢慢鬆開。
Thumbnail
身為一個典型的社畜,上班時間被會議、進度、KPI 塞得滿滿,下班後只想要找一個能夠安靜喘口氣的小角落。對我來說,畫畫就是那個屬於自己的小樹洞。無論是胡亂塗鴉,還是慢慢描繪喜歡的插畫人物,那個專注在筆觸和色彩的過程,就像在幫心靈按摩一樣,讓緊繃的神經慢慢鬆開。
Thumbnail
要做會議記錄或課程筆記,想做逐字稿卻苦於打字速度不夠快嗎?錄音再慢慢回放浪費時間又容易恍神?這篇文章包你滿意,不用再浪費時間爬文了,你需要的逐字稿神器在這裡,保母級教學!
Thumbnail
要做會議記錄或課程筆記,想做逐字稿卻苦於打字速度不夠快嗎?錄音再慢慢回放浪費時間又容易恍神?這篇文章包你滿意,不用再浪費時間爬文了,你需要的逐字稿神器在這裡,保母級教學!
Thumbnail
本文介紹瞭如何在SwiftUI中調整元件的對齊方式,包括置中、向左/向右/向上/向下對齊的方法。透過調整HStack、VStack以及frame的maxWidth、maxHeight和alignment屬性,可以達到想要的對齊效果。
Thumbnail
本文介紹瞭如何在SwiftUI中調整元件的對齊方式,包括置中、向左/向右/向上/向下對齊的方法。透過調整HStack、VStack以及frame的maxWidth、maxHeight和alignment屬性,可以達到想要的對齊效果。
Thumbnail
本文檔介紹了在Swift中使用套件的詳細方法,包括如何引用第三方套件和自定義模組,如何創建自定義套件,以及一些常見的Swift套件。這些套件可以幫助開發者快速添加功能到項目中,提高開發效率和程式碼品質。
Thumbnail
本文檔介紹了在Swift中使用套件的詳細方法,包括如何引用第三方套件和自定義模組,如何創建自定義套件,以及一些常見的Swift套件。這些套件可以幫助開發者快速添加功能到項目中,提高開發效率和程式碼品質。
Thumbnail
這個章節主要介紹了Swift程式語言中物件導向程式設計的基本概念,包括類別、建構子、公開、私有、受保護等等的概念。同時,也介紹了繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型和反射等進階特性。
Thumbnail
這個章節主要介紹了Swift程式語言中物件導向程式設計的基本概念,包括類別、建構子、公開、私有、受保護等等的概念。同時,也介紹了繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型和反射等進階特性。
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
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 {  
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News