Flutter 3.44 からデフォルトの依存管理が CocoaPods から Swift Package Manager(SwiftPM)に。移行作業をしてみた

Flutter 3.44 からデフォルトの依存管理が CocoaPods から Swift Package Manager(SwiftPM)に。移行作業をしてみた

Flutter 3.44 から iOS / macOS のデフォルト依存管理が CocoaPods から Swift Package Manager に切り替わります。現在の stable 3.41 で opt-in 機能を使って先行検証し、自動移行の挙動と注意点をまとめました。
2026.05.04

概要

Flutter 公式から、次の stable リリース Flutter 3.44 で iOS / macOS の デフォルトの依存管理ツールCocoaPods(Ruby 製)から Xcode 同梱の Swift Package Manager(以下 SwiftPM)に切り替わることが発表されました。狙いは「Ruby のセットアップから開発者を解放する」こと。ただし CocoaPods サポートは継続するため、SwiftPM 未対応プラグインはそのまま CocoaPods にフォールバックされます。

📣 Starting with the next stable Flutter release, 3.44, Swift Package Manager replaces CocoaPods as the default dependency manager for iOS and macOS apps

@FlutterDev

本記事では、現在の stable(Flutter 3.41)で SwiftPM を opt-in で有効化し、既存プロジェクトを移行する作業を試して挙動を整理します。対象は iOS ですが、macOS も同手順で対応可能です(詳細は公式 docs を参照)。プラグイン作者向けの対応手順は扱いません。

伝えたいこと(TL;DR)

公式アナウンスを見て「自分のプロジェクトはどうなる?何すればいい?気をつけることはある?」と気になった方向けに、検証して得た結論を先にまとめます。

疑問 結論
影響は? デフォルトの依存管理ツールが変わるだけ。CocoaPods サポートは継続するので、いきなり既存プロジェクトが動かなくなることはない
いつから? 3.44 からデフォルト on。それ以前は 3.24 〜 3.41 で opt-in3.22 以前はサポートなし
何すればいい? 有効化(flutter config --enable-swift-package-manager または pubspec.yamlenable-swift-package-manager: true)して flutter run自動移行できる
気をつけることは? Flavor 構成 / Add-to-app 構成 / プラグインの最低 iOS バージョン は要注意。それ以外は概ね自動移行で済む
戻せる? いつでも CocoaPods に戻せる。無効化(flutter config --no-enable-swift-package-manager または pubspec.yamlenable-swift-package-manager: false)すれば実害なくフォールバック

移行手順

検証環境

  • Flutter SDK: stable(3.41)
  • プロジェクト: 自作の playground プロジェクト
  • iOS Flavor: dev / prod の 2 構成(後述するハマりどころのため重要)
  • 利用プラグイン:
    • bluetooth_low_energy
    • nfc_manager
    • permission_handler
    • nsd

移行手順

Step 1. SwiftPM サポートを有効化

グローバルで有効化する場合は次のコマンドを実行します。Flutter ツールの グローバル設定~/.config/flutter/settings)を変更するだけで、プロジェクトファイルには触りません。

flutter config --enable-swift-package-manager

プロジェクト単位で有効化したい場合は、pubspec.yaml に書きます(グローバル設定を上書き)。

flutter:
  config:
    enable-swift-package-manager: true

公式 docs には プロジェクト単位の無効化(false のみ明示されていますが、検証で true も機能することを確認しました。

Step 2. iOS ビルドを実行(自動移行が走る)

flutter run --flavor dev

Step 3. 自動修正されたファイルを確認

git status で 3 ファイル(project.pbxproj / xcscheme / Podfile.lock)の変更が確認できます。実際の差分は次のコミットにまとめてあります。

📦 検証コミット: abe-tk/playground@2fb3e0b

自動修正された内容

ファイル 何が起きたか
project.pbxproj(Xcode プロジェクト定義) SwiftPM パッケージ(FlutterGeneratedPluginSwiftPackage)を Runner ターゲットの依存に追加
xcscheme(ビルド設定) ビルド前にフレームワーク準備処理を走らせる Pre-action を追加
Podfile.lock SwiftPM 対応プラグインを Pods から削除(未対応プラグインは Pods に残る)

移行後のプラグイン管理は二重構成になる

プラグイン SwiftPM 対応 移行先
bluetooth_low_energy_darwin SwiftPM(Pods から削除)
nsd_ios SwiftPM(Pods から削除)
nfc_manager CocoaPods に残留(フォールバック)
permission_handler_apple CocoaPods に残留(フォールバック)

SwiftPM 移行後も CocoaPods は完全には消えません。プラグインの SwiftPM 対応状況によって自動で振り分けられます。

CocoaPods へ戻したい場合

設定をオフにして再ビルドするだけで戻せます。project.pbxproj / xcscheme の SwiftPM 統合定義は残りますが、CocoaPods へフォールバックされるだけで実害はありません。

グローバルで無効化:

flutter config --no-enable-swift-package-manager

プロジェクト単位で無効化(公式 docs):

flutter:
  config:
    enable-swift-package-manager: false

移行時の注意点

Flavor ごとに xcscheme が別々に修正される

flutter run は、その実行で使った Flavor の xcscheme しか修正しません

操作 修正された xcscheme
flutter run --flavor dev を実行 dev.xcscheme のみ
続けて flutter run --flavor prod を実行 prod.xcscheme も追加で修正
両方実行後の Runner.xcscheme 未修正のまま

つまり、ローカルで一度も実行していない Flavor は、CI でビルドすると Pre-action が無くてビルドが失敗する可能性があります。対策はローカルで全 Flavor を一度ずつ flutter run するか、各 xcscheme に手動で Pre-action を追加することです。

Add-to-app 構成は非対応

既存のネイティブ iOS アプリに Flutter モジュールを組み込む Add-to-app 構成では、SwiftPM サポートはまだ動作しません(Flutter Issue #146957)。該当する場合は、3.44 以降も CocoaPods を使い続けることになります。

プラグインの最低 iOS バージョンとの不一致

SwiftPM 対応プラグインがプロジェクトより高い iOS Deployment Target を要求している場合、次のようなエラーが出ます。Xcode の Minimum Deployments を上げて対応します。

Target Integrity (Xcode): The package product 'plugin_name_ios' requires
minimum platform version 14.0 for the iOS platform, but this target supports 12.0

自動移行が失敗した場合

今回の検証では自動移行が問題なく完了しましたが、失敗した場合は Xcode で手動統合します。手順は 公式 docs を参照してください。次の 2 つの変更を Xcode GUI で再現するイメージです。

  • Package DependenciesFlutterGeneratedPluginSwiftPackage をローカル追加
  • 各 xcscheme の Pre-actionsRun Prepare Flutter Framework Script を追加

まとめ

検証してみると flutter config --enable-swift-package-manager + flutter run だけで自動移行が走り、想像以上にあっさり SwiftPM へ移行できました。Flavor 構成や Add-to-app には多少気をつけることがあるものの、3.44 リリース後に大きな混乱は起きなさそうです。

Ruby のセットアップから解放されるのは素直に嬉しい変化ですね。Flutter チームの皆さん、ありがとう!

参考リンク

この記事をシェアする

関連記事