截至 2026 年 12 月 2 日,CocoaPods 官方列出的 Specs 註冊表只讀日期仍屬計畫,並非既有專案屆時必然無法建置的證明;官方計畫也明示這是預定安排。本週建議:新專案優先評估 Flutter 3.44 的 Swift Package Manager 路徑;存量專案先盤點插件與原生依賴,再於 macOS/Xcode CI 驗證後分批決定。
適合維護 Flutter iOS 應用、需要評估現有依賴是否相容的開發者。
也適合負責 Flutter 插件、原生整合或 Apple 平台 CI 的工程師,規劃隔離驗證與生產切換。
最後更新於 2026 年 11 月 4 日;資料核對自 Flutter 官方整合與平台文件、CocoaPods 官方計畫頁。若官方調整支援狀態或計畫日期,尤其在 2026 年 12 月 2 日前後,應重新核實註冊表狀態。
先分清新專案與既有專案的遷移風險
Flutter 3.44 的預設方向,讓新專案更適合一開始就評估 Swift Package Manager;但既有專案是否該轉換,取決於插件、原生依賴和建置流程,而不是單看版本號。Flutter 的 iOS 專案整合文件說明了 Swift Package Manager 與 CocoaPods 的整合方向及適用情境。
請把以下三種狀態分開判斷:
- 註冊表只讀:CocoaPods Specs 註冊表計畫調整讀寫狀態。它不是現有專案立即失效的公告;計畫日期亦可能調整。
- 依賴仍可解析:取決於專案使用的套件來源、鎖定檔與安裝流程,不能只從註冊表狀態推論。
- 完整工作流通過:依賴解析成功,不代表 Xcode 編譯、測試、簽署及封存全部成功。
對既有專案而言,最容易踩的坑,是把第一項直接當成第三項的結論。反過來說,某一次 CI 綠燈也只證明當次程式碼、依賴組合與環境通過,不能證明所有 Flutter 插件都已支援新路徑。
按專案適配指標比較方案
遷移決策至少要看專案生命週期、依賴組成、團隊維護能力及驗收條件。以下比較的是決策方向,不是所有專案都適用的保證。
| 選項 | 較適合的情況 | 主要檢查點 | 代價與限制 |
|---|---|---|---|
| 新專案採用 Swift Package Manager | 原生依賴與 Flutter 插件已有相應支援,團隊能維護新的整合流程 | Flutter 版本、套件來源、Xcode 與 macOS 建置環境 | 必須先確認使用的插件及自訂原生步驟,不可把預設方向當成全套依賴自動相容 |
| 既有專案雙軌驗證 | 正在評估切換,但仍有 CocoaPods 依賴或團隊尚未完成驗收 | 同一提交分別測試依賴解析與完整 CI,檢查鎖定檔及建置腳本差異 | 需要維護兩條驗證路徑,且需清楚指定哪條路徑才是正式發佈依據 |
| 暫緩遷移並維持現況 | 重要插件尚無替代方案,或近期發佈風險高於遷移收益 | CocoaPods 使用位置、依賴來源、維護方支援與可重現性 | 暫緩不等於不處理;要記錄阻塞項目並安排重新評估,不能把註冊表計畫當作永遠不變 |
新專案:工具鏈與原生依賴先決條件
新專案通常較容易選擇依賴管理方式,因為還沒有大量既有腳本和鎖定檔需要相容。不過,若專案需要的 Flutter 插件只提供 CocoaPods 整合,或原生 SDK 的安裝流程仍綁定 Podfile,就不應只因 Flutter 3.44 的預設方向而跳過核對。
還要先確認建置機器。Flutter 官方 iOS 平台設定文件列出 iOS 開發所需的 macOS 與 Xcode 工具鏈。換言之,Linux CI 或單純的套件解析結果,不能替代真實的 Apple 平台建置驗收。Swift Package Manager 的 PackageDescription 文件則可用來核對套件宣告與目標設定是否符合依賴本身的需求。
既有專案:插件依賴比註冊表日期更值得先查
存量專案通常不是只有一份依賴清單。請同時檢查直接加入的 Flutter 插件、插件帶入的間接原生套件,以及專案自行維護的 Podfile、鎖定檔、建置階段腳本和 CI 命令。Flutter 的插件開發文件可協助你檢查插件在 Apple 平台的整合方式;但專案實際採用的插件版本,仍要以自己的依賴解析紀錄和維護方說明為準。
情境例子:一個應用的直接依賴可能已支援 Swift Package Manager,但某個間接帶入的原生 SDK 仍要求 CocoaPods;如果 CI 只測試解析,問題可能直到 Xcode 實際編譯或簽署時才暴露。這時應先保留目前可發佈的路徑,針對阻塞插件詢問維護方,再決定要等支援、替換依賴,或維持短期雙軌驗證。
團隊責任與 CI 證據決定切換時機
Swift Package Manager 能否用於你的專案,不只是套件能不能下載。團隊還要明確分配誰維護套件宣告、誰處理原生整合、誰更新 CI,以及誰對正式簽署與封存結果負責。若原生整合由少數人掌握,先讓熟悉 iOS 的工程師審閱差異,比在發佈分支直接全面替換更容易控制風險。
要把 Mac CI 驗收做成可重現的證據,可以依序完成以下檢查:
- 固定測試起點:從乾淨的程式碼檢出開始,記下 Flutter、Xcode、macOS 與依賴版本,避免沿用開發機上未記錄的快取狀態。
- 檢查依賴解析:記錄解析命令、套件來源、鎖定檔變化與失敗訊息;若仍有 CocoaPods 步驟,標示它由哪個插件或腳本觸發。
- 執行乾淨建置:在隔離的 macOS/Xcode CI 上建置實際的 iOS 目標,不以套件成功下載或 Xcode 專案開啟成功作為建置通過。
- 執行測試並檢查原生功能:依專案的測試範圍驗證插件與原生整合,確認遷移沒有漏掉必要的建置階段或環境設定。
- 驗證簽署與封存:用團隊核准的簽署設定完成封存,保存日誌並記錄使用的憑證與工作流程;憑證等機密資料不可寫入公開日誌。
- 比較後再分批切換:檢視新舊路徑的依賴解析、建置、測試和簽署結果,明確指定正式發佈流程,再逐步更新其他分支或工作流程。
若專案採用不同 iOS 發佈組態,也要把組態本身納入驗收;Flutter 的 iOS Flavors 文件可協助核對不同組態的建置與設定差異。CI 通過後,請保留提交版本、解析紀錄和建置日誌,讓下一次 Flutter、Xcode 或插件更新時能比較變化。這些證據只適用於實際測過的專案與依賴組合,不應外推成全體插件的相容性結論。
如果你目前沒有可用於隔離驗證的 Mac 環境,先確認遠端 Mac 的 Apple 平台工作負載是否符合團隊需要,再安排遷移驗收;可以比較遠端 Mac 環境選項與Mac 方案比較,評估遠端連線、建置工作流程和管理方式。相較之下,沿用個人電腦容易受本機狀態影響,借用共享機器會遇到環境互相干擾,而只有 Linux 的 CI 也無法取代 Xcode 簽署與封存驗證。若只是短期需要一個隔離測試環境,租用遠端 Mac 可避免先購置硬體;但若你需要長期固定負載,或工作必須直接使用實體介面,仍應比較自購設備或其他部署方式。
常見問題
Flutter 3.44 的 iOS 專案一定要從 CocoaPods 遷移嗎?
不一定。新專案可以優先評估 Flutter 3.44 的 Swift Package Manager 路徑;既有專案則應先確認插件及原生依賴的支援狀態。CocoaPods 註冊表只讀是計畫,不等於現有依賴立即失效。
現有 Flutter iOS 專案繼續使用 CocoaPods,會遇到什麼影響?
主要要評估後續依賴發佈與建置流程,而不是把只讀計畫解讀成專案立即無法建置。請保留鎖定檔與解析紀錄,並在隔離的 macOS/Xcode CI 重現完整工作流,再依測試結果安排切換。
Flutter 插件尚未支援 Swift Package Manager,該怎麼處理?
先辨認不相容的是直接插件還是間接原生依賴,並核實維護方的支援狀態。若建置流程仍依賴 CocoaPods,可以先維持原路徑或雙軌驗證;不要在未確認替代方案前移除必要的 Podfile 或自訂腳本。
依賴遷移後,如何驗收 Flutter iOS 的 Xcode CI?
從乾淨檢出開始,在隔離的 macOS/Xcode 工作流驗證依賴解析、建置、測試、簽署與封存,並保存命令和日誌。CI 通過只代表受測專案及依賴組合可用,不能證明所有 Flutter 插件均已相容。
常見問題
Flutter 3.44 的 iOS 專案一定要從 CocoaPods 遷移嗎?
不一定。新專案可優先評估 Flutter 3.44 的 Swift Package Manager 路徑;既有專案則應先檢查直接與間接依賴、插件維護狀態及自訂建置腳本。CocoaPods 註冊表的只讀計畫,不等於現有依賴立即無法解析或專案必然不能建置。
現有 Flutter iOS 專案繼續使用 CocoaPods,會遇到什麼影響?
主要風險在於後續依賴發佈、維護方支援及團隊建置流程是否仍依賴 CocoaPods,而不是只讀計畫生效便立刻令已鎖定的依賴失效。請留存鎖定檔與解析紀錄,在隔離的 macOS/Xcode CI 重現完整建置,再按實際結果安排切換。
Flutter 插件尚未支援 Swift Package Manager,該怎麼處理?
先確認不相容的是直接使用的插件,還是由其他插件帶入的原生依賴,並向維護方核實支援狀態及版本計畫。若工作流仍依賴 CocoaPods,可先維持現有路徑或採雙軌驗證;不要在未確認替代方案前移除 Podfile、自訂腳本或必要的原生整合。
依賴遷移後,如何驗收 Flutter iOS 的 Xcode CI?
在隔離的 macOS/Xcode 工作流中,從乾淨檢出開始測試依賴解析、建置、測試及簽署封存,保存每一步的命令與日誌,並確認必要的環境變數和憑證設定。CI 通過只證明該專案及當次依賴組合可用,不代表所有 Flutter 插件都已支援 Swift Package Manager。
