Flutter 官方將 Flutter 3.44 起的 Swift Package Manager(SwiftPM)列為 iOS 與 macOS 依賴管理的預設方式;但預設不代表每個既有專案都已完成切換。官方 SwiftPM 文件 因此,Flutter 3.47 iOS CI 應按專案場景分批驗收:先確認插件實際走 SwiftPM 或 CocoaPods 回退,再在乾淨的 Mac CI 環境驗證解析、建置與歸檔;不要只憑本機成功就全量切換。Flutter 3.47 穩定版發布說明

適合 Flutter iOS 應用維護者:升級 Flutter 3.47 前,想確認既有插件和原生依賴是否適用 SwiftPM。
適合 CI 與 DevOps 工程師:需要核對 Mac 建置節點上的依賴解析、歸檔及簽署證據。
適合 Flutter 插件維護者:要判斷套件是否支援 SwiftPM,或是否仍須保留 CocoaPods 路徑。

最後更新於 2026 年 10 月 31 日;版本與遷移安排核對自 Flutter 官方 SwiftPM 文件,CI 流程參考 Apple Swift Package Manager 持續整合指南。

從一般 Flutter iOS 應用確認目前依賴路徑

不要先把「Flutter 3.47」等同於「這個專案已使用 SwiftPM」。Flutter 官方說明預設依賴管理方式自 Flutter 3.44 起改為 SwiftPM,但專案是否已採用、遷移是否完成,仍須以實際設定和建置結果確認。Flutter iOS SwiftPM 文件

專案線索 驗收時要確認 可接受的結果
Flutter iOS 應用 檢視專案整合設定、套件解析紀錄及建置日誌 能指出目前實際使用 SwiftPM,或明確說明仍有 CocoaPods 路徑
Flutter 插件 查看插件文件與作者提供的 SwiftPM 支援資訊 相依套件和原生程式碼均能依預期解析、建置
原生 iOS 工程嵌入 Flutter 模組 以宿主工程的建置入口檢查依賴解析和整合方式 宿主工程與 Flutter 模組各自的依賴責任清楚,建置結果可重現

遷移文件描述的是官方支援的工作流程,不能代替團隊對舊專案設定的稽核。請將自動遷移或工具執行的結果,與團隊手動修改的設定分開記錄;如果不確定某個檔案是由工具更新還是由工程師調整,先比較版本控制中的變更,再判斷是否需要保留。

提醒:不要只以是否存在 Package.resolved 作為 SwiftPM 已正常運作的唯一證明。還要核對本次 CI 是否真正解析到預期套件,並確認鎖定狀態與提交一致。

依插件支援情況處理 SwiftPM 與 CocoaPods

Flutter 專案的依賴鏈不是只由應用本身決定:插件可能提供 SwiftPM 支援,也可能仍依賴 CocoaPods。Flutter 官方文件提及,不支援 SwiftPM 的插件可以回退至 CocoaPods;實際建置是否成功,仍須按插件文件和 CI 輸出判斷。Flutter 插件 SwiftPM 說明

插件與依賴狀態 驗收動作 切換判斷
插件有明確 SwiftPM 支援 核對插件宣告、解析出的套件與鎖定檔,並在乾淨環境建置 解析和建置均可重現,才納入 SwiftPM 切換
插件仍依賴 CocoaPods 查閱插件維護者文件,檢查 CLI 與 CI 日誌中的實際回退路徑 回退成功且可追蹤,可暫時保留;若依賴路徑不明,先隔離問題
插件狀態不明或有原生修改 確認原生目標、套件來源及修改方式,再用同一提交重建 取得足夠證據前,不把它標為相容

插件作者提供的支援狀態,是評估入口而不是最終驗收。Flutter 的插件開發文件可協助確認插件自身的整合方式;團隊還應在 CI 輸出中記下實際解析的依賴、採用的管理器,以及是否發生 CocoaPods 回退。若建置通過但走的是回退路徑,結論應寫成「目前依賴 CocoaPods 路徑可建置」,而不是「插件已通過 SwiftPM 驗收」。

按 add-to-app 宿主工程驗收整合邊界

將 Flutter 模組嵌入既有 iOS 工程時,驗收對象不是一般 Flutter iOS 應用的單一建置入口,而是宿主工程如何取得並整合 Flutter 模組。應依照 Flutter 的現有 iOS 工程整合指南,核對宿主專案設定、依賴解析方式與實際建置入口。

先在版本控制中檢視舊 CocoaPods 整合留下的設定,並按官方遷移文件確認哪些內容應清理;不要看到 SwiftPM 相關設定後,就自行刪除所有 Pods 設定。若同一宿主工程還有其他原生依賴使用 CocoaPods,清理範圍應限定在已確認的 Flutter 整合部分。

遷移後,使用宿主工程的正式建置命令重新解析依賴、執行測試並產生歸檔。只有 Flutter 模組單獨建置成功,不能證明宿主工程能完成簽署和交付;反過來,宿主工程沿用既有快取成功,也不足以證明乾淨環境可重現。

在 Mac CI 取得乾淨解析與簽署證據

乾淨環境的驗收目的,是排除本機快取掩蓋缺失依賴的可能。選用與日常 CI 相符的 Mac 節點,以同一提交執行依賴解析與建置,並保留解析輸出、鎖定檔差異和建置日誌。Apple 的 Swift 套件 CI 文件可作為套件解析與 CI 工作流程的依據。

建議用以下可勾選項目整理驗收紀錄:

  • [ ] 記錄 Flutter、Xcode 與建置節點環境,並將它們與本次提交關聯;版本或環境變更時,重新核對結果。
  • [ ] 在不沿用開發者本機快取的條件下,重新取得 Swift Package Manager 依賴;保存解析日誌,檢查鎖定檔是否有非預期變更。
  • [ ] 確認私有套件或 Git 依賴可由 CI 取得;檢查憑證授權範圍、Git 工具設定與存取錯誤,不得把密鑰輸出至日誌。
  • [ ] 以 CI 正式採用的建置入口執行測試和 Xcode 建置;明確記錄插件是否走 SwiftPM,或發生 CocoaPods 回退。
  • [ ] 執行歸檔及匯出,保存建置結果、簽章相關日誌與交付產物;依 Flutter 的iOS 發布文件核對發布流程,不以測試通過代替歸檔驗收。
  • [ ] 在相同提交的乾淨建置中重複關鍵流程;如果解析結果、依賴管理路徑或簽署結果不一致,先停止擴大遷移並查明差異。

憑證提醒:CI 必須能存取私有依賴,不代表可以把金鑰或存取權杖寫入建置腳本、版本庫或公開日誌。請使用 CI 的機密管理方式提供憑證,並把授權限制在建置需要的範圍。

依驗收結果決定切換、保留回退或暫緩

以下條件分支可用來形成可稽核的決策,而非只依賴個人經驗判斷:

  • 若應用和所有關鍵插件均有明確 SwiftPM 支援,乾淨 Mac CI 能穩定解析依賴,且測試、建置、歸檔與簽署均有可追溯證據,則切換該專案的依賴路徑,並將這次驗收結果納入版本升級紀錄。
  • 若只有少數插件仍依賴 CocoaPods,且 CI 日誌能證明其回退路徑可用,則先保留必要的回退,對已驗證的部分逐步切換;每次插件或依賴更新後重跑相關驗收。
  • 若插件支援狀態不明、乾淨環境解析失敗、鎖定檔出現無法解釋的差異,或歸檔與簽署尚未驗證,則暫緩遷移,先補齊證據再評估。
  • 若專案採用 add-to-app,則以宿主工程的建置與交付結果為準,不以一般 Flutter iOS 應用的驗收結論代替。

CocoaPods 倉庫狀態也應列入後續風險追蹤,但不可把預定安排寫成已發生事件。Flutter 官方文件將 CocoaPods 倉庫轉為唯讀的日期列為 2026 年 12 月 2 日;截至本文核對日期,這是官方安排,並非已生效的狀態。Flutter SwiftPM 應用文件 建議在內部遷移紀錄中保留這項時間安排,並於日期接近或官方文件更新時再次確認;它不應取代當下對插件相容性與建置結果的檢查。

若團隊目前缺少可用的 Mac 建置環境,先為代表性專案準備能執行依賴解析、測試和歸檔的節點,再擴大遷移,比在沒有交付證據時直接切換更容易控制風險。短期驗收可比較自備 Mac 與遠端 Mac 的管理成本、權限需求和使用週期;若需要臨時或按期使用,可先查看 RUVCLOUD 的遠端 Mac 開發與 CI 環境及租用方案與價格。但若工作負載長期穩定且持續繁重,或必須直接連接特定實體裝置與介面,自購 Mac 可能更合適;選擇遠端環境時,仍應先驗證該節點能否支援團隊實際的 Xcode、依賴和簽署流程。