馬上就是 Google I/O 了,而在這個時候,官方突然官宣,**從下一個 Flutter 穩定版 3.44 開始,Swift Package Manager(SwiftPM)將取代 CocoaPods**,成為 iOS 和 macOS 應用程式的預設依賴管理工具。
也就是 CocoaPods trunk 明確會在 2026-12-02 進入唯讀,所以今年年底 SwiftPM 就會開始完全取代 CocoaPods 這個老古董。
其實這也不算突然,因為在 2024 我們就聊過這個話題,在去年也談論過 SwiftPM 的相關情況,而現在 Flutter 也開始正式提醒開發者,雖然現有版本還可以繼續使用 CocoaPods,但是 2026-12-02 之後將不會再對 Pod 進行適配與支援。

實際對 App 開發來說,Flutter CLI 會自動處理遷移,當你開始執行或建置 iOS 或 macOS 應用程式時,CLI 會自動更新 Xcode 專案,改用全新的 Swift Package Manager。

如果 App 依賴的外掛還沒適配 SwiftPM,Flutter 會印出一條警告訊息,列出所有不受支援的依賴項,同時暫時回退到 CocoaPods。
不過官方也說了,未來 CocoaPods 的支援會被完全移除,所以這種回退並不長久。
當然,如果真的遇到 SwiftPM 導致無法建置等問題,官方也提供了暫時關閉的方式:
yaml 体验AI代码助手 代码解读复制代码flutter:
config:
enable-swift-package-manager: false
而對於外掛的開發者,如果你還沒有適配,那麼適配 SwiftPM 是必選項,目前排名前 100 的 iOS 外掛裡已經有 61% 完成了遷移,後續如果沒有新增 Swift Package Manager 支援的 Package,在 pub.dev 評分中分數也會被拉低。
另外,Flutter 外掛在切到 SwiftPM 之後,必須明確宣告「我依賴 Flutter 引擎」,否則編譯流程就不完整,所以需要新增一個 Package.swift 檔案,並將原始碼移動到符合標準 Swift 套件結構的位置。
因為在 CocoaPods 時代,Flutter 外掛的 .podspec 裡其實已經隱式做了:
Flutter.framework 加進來換成 SwiftPM 後:
Package.swift 明確寫出來也就是你的外掛程式碼其實是執行在 Flutter 引擎之上的,所以你需要在 Package.swift 裡加上這個依賴,例如類似:
less 体验AI代码助手 代码解读复制代码let package = Package(
name: "MyPlugin",
platforms: [.iOS(.v13)],
products: [
.library(name: "MyPlugin", targets: ["MyPlugin"])
],
dependencies: [
// 關鍵就是這個
.package(name: "FlutterFramework", path: "../Flutter")
],
targets: [
.target(
name: "MyPlugin",
dependencies: [
"FlutterFramework"
]
)
]
)
另外如果在 2025 年做過外掛遷移了,現在還也需要補充一個操作:在
Package.swift檔案中加入 FlutterFramework 作為依賴項,因為現在必須明確宣告依賴。
可以看出來,對 Flutter 來說這次變動影響最大的是外掛生態,以前 Flutter 外掛的 iOS/macOS native 部分基本靠 .podspec + Podfile + pod install 接入,而遷到 SwiftPM 後,外掛作者需要提供 Package.swift,Flutter CLI 需要負責把外掛依賴轉成 Xcode 可識別的 Swift Package 整合。
實際上今年 KMP 也提到了這件事,不過進度相對 Flutter 慢一些,不過都是在今年開始推 SwiftPM,可以看出來 CocoaPods 真的是末路了,這個陪伴了大家這麼多年的依賴管理框架,終究要消失在歷史的進程裡。

最後,使用 SwiftPM 是完整支援 Objective-C 的,只是一些支援的力度和方式不太一樣,比如 SwiftPM 不允許同一個 target 裡同時混放 Swift 和 C-family 原始碼,target 可以包含 Swift、Objective-C/C++ 或 C/C++,但單一 target 不能混合 Swift 和 C-family 語言。
所以舊的純 OC 外掛/函式庫遷到 SwiftPM 是可行的,關鍵是目錄結構要符合 SwiftPM 規則。
真正麻煩的是 Swift + OC 混編專案,遷移到 SwiftPM 後,通常需要拆成多個 target,讓 Swift target 依賴 OC/C-family target。
那麼,你開始使用 SwiftPM 了嗎?