Swift 6.4 SwiftPM 預設建置變了?iOS 專案要遷移嗎(2026)
Swift 6.4 的 SwiftPM 預設採用 Swift Build,不代表 iOS App 必須立刻遷移建置流程。若專案由 Xcode 管理,先在現有 Xcode 工具鏈驗證;只有獨立 Swift Package、命令列工作或 CI 實際呼叫 SwiftPM 的部分,才需要按原有任務逐項測試並決定是否調整。
適合維護 Xcode iOS App、想確認現有建置方式是否受影響的獨立開發者。
也適合維護 Swift Package、命令列工具或小型 CI 流程,需核對本機與自動化建置結果的團隊。
最後更新於 2026 年 10 月 18 日;SwiftPM 預設行為核對自 Swift 6.4 官方發布說明,Xcode 所含 Swift 版本核對自 Apple Xcode 系統需求。
SwiftPM 預設建置改變,和 Xcode App 建置入口是兩回事
Swift 6.4 發布說明確認 SwiftPM 現在預設使用 Swift Build。這項變化首先影響透過 SwiftPM 執行的建置工作;不能單憑這項說明,就推論所有 Xcode 專案的建置入口、scheme 或 App 執行流程已自動改變。
判斷時要分清楚三件事:
- SwiftPM 命令列建置:例如直接執行
swift build、swift test的工作,應在 Swift 6.4 工具鏈下重新驗收。 - Xcode 專案建置:由 Xcode scheme 管理的 App 建置,應以專案實際使用的 Xcode 和建置設定驗證。Apple 對 Xcode scheme 的說明可用來核對目前由哪些動作組成建置流程。
- App 執行與發布驗收:成功建置不等於模擬器或實機執行正常,也不等於 Archive 與發布產物符合需求。Apple 將 App Archive 與發行流程列為獨立的分發工作。
Swift 6.4 的 SwiftPM 預設變更會影響哪些工作?
凡是實際透過 SwiftPM 執行套件建置或測試的工作,都應視為需要驗證的範圍。若日常 App 建置由 Xcode 專案和 scheme 負責,且 CI 也沒有另外呼叫 SwiftPM 建置該套件,不能只因發布說明就判定 App 必須遷移。
Apple 的系統需求頁列出 Xcode 27.1 使用 Swift 6.4;這能確認該 Xcode 版本與編譯器版本的關係,卻不能代替對專案實際建置入口的檢查。可同時參考 Xcode 27.1 發布說明,確認工具鏈版本,再以命令和建置記錄確認執行路徑。
Xcode 管理 App:先維持現況,再分辨套件是否另有建置任務
若 App 的來源、依賴與執行流程都由 Xcode 專案管理,先用原本的 scheme 完成一次建置與執行驗收。不要把「Xcode 專案使用 Swift Package 依賴」直接等同於「整個 App 建置改由 SwiftPM 命令負責」。前者是依賴管理情境,後者是實際建置入口,兩者需要分開記錄。
使用 Xcode 管理 Swift Package 的 iOS 專案,是否要改建置方式?
通常不應只因 SwiftPM 預設使用 Swift Build 就改寫 App 流程。先確認專案實際由哪個 Xcode scheme 建置、套件在該流程中的角色,以及 CI 是否另有 swift build 或 swift test 步驟。只要現行 Xcode 建置、執行和發布驗收仍符合專案要求,便可保留 App 的建置入口,僅對獨立 SwiftPM 任務做相容測試。
但如果套件本身有獨立發布、測試或產物產生任務,就不能只看 App 是否建置成功。應將套件的 manifest、依賴解析、測試和輸出產物分開檢查。Package.swift 的工具版本與描述方式,可對照 PackageDescription 文件;SwiftPM 的命令與工作方式則可查閱官方套件管理器文件。
獨立 Swift Package:比較原有命令和 Swift 6.4 的實際產物
維護獨立套件時,驗收單位不是「指令沒有報錯」而已。還要確認套件是否能依預期解析依賴、完成測試,並產生下游工作實際使用的產物。對外提供套件或在多個專案共用的團隊,應將這些結果納入相容性判定。
Swift 6.4 下如何驗證命令列 Swift Package 建置?
先記錄原工具鏈版本、執行目錄、命令列參數與產物位置,再以 Swift 6.4 重跑相同工作。下列命令可作為檢查起點;<實際工具鏈版本> 是待填欄位,不是預期輸出:
swift --version
swift package describe
swift build
swift test
每次執行都保存完整日誌,並檢查下游是否能讀取預期產物。若專案使用自訂 plugin、腳本或額外參數,也要在相同條件下納入驗收。一次測試通過,只能說明該次測試路徑成功,不能推廣為所有 plugin 或腳本都相容。
| 專案與建置情境 | 主要驗收對象 | 建議決策 |
|---|---|---|
| App 由 Xcode scheme 建置,沒有獨立 SwiftPM 建置工作 | Xcode 建置、執行及發布流程 | 保留現有入口;確認工具鏈後記錄基線 |
| 獨立 Swift Package 由命令列建置或測試 | manifest、依賴解析、測試、產物 | 以 Swift 6.4 重跑相同命令;依差異局部調整 |
| CI 同時執行 Xcode 與 SwiftPM 任務 | 每個工作步驟及產物交接 | 分開比對日誌;必要時短期雙軌驗證 |
| 套件支援多個平台 | 每個已承諾支援的平台與依賴 | 逐平台驗收;未測平台不宣稱相容 |
命令列與 CI:從實際執行路徑找出需要改的步驟
CI 上的結果取決於工作實際呼叫的工具,不只取決於專案檔案裡有沒有 Swift Package。Apple 提供了在 CI 工作流程建置 Swift Package 或使用套件的 App的說明,可用來對照工作流程中 Xcode 與套件建置的職責。
CI 升級 Swift 6.4 後,應檢查哪些建置步驟?
先檢查 runner 選用的 Xcode 與 Swift 工具鏈,再逐行盤點腳本中的 SwiftPM 命令、參數、plugin、快取和產物交接。若只有 Xcode build 與 Archive 步驟,驗收重點應放在原有 scheme 和發布流程;若另有 swift build 或 swift test,則要把它們當作獨立工作比較。
以下方式可協助整理差異,尖括號內容應換成專案自己的值:
xcodebuild -scheme "<專案 Scheme>" -destination "<實際目的地>" build
swift build
swift test
將原工具鏈和 Swift 6.4 的日誌並列,對照執行命令、警告或錯誤、產物路徑,以及後續步驟是否能正常消費產物。不要只比較工作是否回報成功:例如測試通過但產物路徑改變,仍可能使後續封裝或發布工作失敗。
注意:SwiftPM 建置變化不等於 iOS App 跨平台建置保證。若套件支援 macOS 以外的平台,需在實際承諾支援的平台與相依項目上分別建置和測試;沒有驗收的目標,不應推定已相容。
跨平台套件:按平台和依賴界線驗收
跨平台套件要把 macOS 建置與其他目標平台的建置分開記錄。SwiftPM 預設建置工具的變化,不能證明某個 iOS App 已能由非 macOS 環境完成所有建置,也不能代替平台專屬依賴的測試。驗收範圍應以套件實際承諾的平台和產品使用方式為準。
如果套件在 macOS 上通過,但另一個平台使用不同依賴或條件編譯路徑,便應分別查看該平台的建置與測試結果。記錄工具鏈、實際命令、執行目標和產物;不要把一個平台的成功結果套用到沒有測試的平台。
依照證據選擇保留、局部調整或雙軌驗證
遷移不應由版本號單獨觸發,而應由專案實際執行路徑和驗收結果決定。完成測試後,可按以下清單做決策:
- [ ] 記錄本機與 CI 使用的 Xcode、Swift 工具鏈,以及執行建置的目錄。
- [ ] 區分 Xcode scheme、SwiftPM 命令和 App 執行/發布驗收,不把它們混成單一結果。
- [ ] 列出
Package.swift、依賴、plugin、腳本、建置參數及下游產物使用方式。 - [ ] 在 Swift 6.4 下重跑專案真正使用的命令,保留日誌與產物供差異比對。
- [ ] 對已支援的平台分別驗收;未實際測試的平台保持未確認狀態。
- [ ] 若 Xcode App 流程正常、沒有受影響的 SwiftPM 任務,保留現況並記錄工具鏈基線。
- [ ] 若只有特定套件工作出現差異,先局部修改該工作,不擴大改寫 App 建置入口。
- [ ] 若舊工具鏈與 Swift 6.4 的結果仍有差異,短期雙軌執行並比較日誌與產物,再決定切換時點。
若驗收需要固定的 macOS 工具鏈,可先估算測試頻率、CI 使用方式與需要保留的建置環境,再比較自行維護主機與遠端使用的取捨。SFTPMAC 的遠端 Mac 方案資訊可供檢視;如果需要核對租用成本,也可參考遠端 Mac 方案價格說明。
對只需偶爾驗證 Swift 6.4 的團隊,自行購置 Mac 可能增加硬體閒置、系統維護與版本復現成本;一般雲端建置環境則未必能提供所需的 macOS 工具鏈與控制方式。若 macOS 建置會反覆執行,且需要穩定重現 Xcode 與 SwiftPM 路徑,租用 SFTPMAC 的遠端 Mac 可作為短期驗證或持續開發的選項。若工作長期高負載、需要實體介面或必須完全掌控本機設備,則應先比較自購 Mac 的適用性,再依實際需求選擇。