📚

CapacitorプラグインがSPM対応してるかどうかを見分ける方法

2024/11/27に公開

Capacitorプラグインは従来、CocoaPodsを利用していました。しかし、2021年にAppleがSwift Package Manager(SPM)を発表し、Capacitorもv6からSPMへの対応を進めています。Capacitor iOSプロジェクトがExperimentalであるためまだCapacitorコミュニティプラグインを含むサードパーティプラグインの対応は進んでいませんが、Capacitor公式プラグインはすべてSPMに対応済みです。

基本的にCapacitorプラグインは後方互換のため、CocoaPodsとSPMの両方に対応するスタイルです。では、どちらに対応してて、どちらに対応していないかはどうやってみたらいいでしょう。

CocoaPodsに対応してるかを確認する方法

CocoaPodsに対応している場合、トップディレクトリに **.podspec ファイルがあります。 @capacitor-community/admob だと以下のファイルですね。

https://github.com/capacitor-community/admob/blob/master/CapacitorCommunityAdmob.podspec#L5-L19

これがプラグインをPodライブラリ化しているもので、ライブラリの入手先(github)や、ビルド方法などの定義が入ったメタデータとなっていることが確認できます。ちょっと変則的に JSON.parse しているのは、変数を共通化するためにプラグインの package.json 内から値をもってきていることですね。とにかくこのファイルがあれば、CocoaPodsに対応しているということです。

SPMに対応してるかを確認する方法

SPMに対応している場合、トップディレクトリに Package.swift ファイルがあります。 @capacitor-community/admob だと以下のファイルですね。

https://github.com/capacitor-community/admob/blob/master/Package.swift

これがプラグインをSPMライブラリ化しているもので、ライブラリの依存関係が整理されています。プロジェクトをSPMで管理していれば、 ios/App 以下に Package.swift がどう生成されているかと思います。この dependencies で呼び出しています。

https://github.com/capacitor-community/admob/blob/master/demo/angular/ios/App/CapApp-SPM/Package.swift#L15

そして、以下でプロジェクトとリンクしています。

https://github.com/capacitor-community/admob/blob/master/demo/angular/ios/App/CapApp-SPM/Package.swift#L23

ionic-team/capacitor-swift-pm のように2つ以上のproductsを持っている場合があるので、dependencies で呼び出したあと、改めて products でリンクしていることがわかります。

まとめ

Package.swift がなければ、SPM非対応とおぼえておきましょう。現時点ではSPMがExperimentalなので、CocoaPodsサポートはほぼ100%かと思いますが、数年立ってSPMが当たり前になると、逆に **.podspec ファイルがなくなり、CocoaPodsサポートが終了するプラグインもでてくるかもしれませんね。

それではまた。

Discussion