CapacitorプラグインがSPM対応してるかどうかを見分ける方法
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
だと以下のファイルですね。
これがプラグインをPodライブラリ化しているもので、ライブラリの入手先(github)や、ビルド方法などの定義が入ったメタデータとなっていることが確認できます。ちょっと変則的に JSON.parse
しているのは、変数を共通化するためにプラグインの package.json
内から値をもってきていることですね。とにかくこのファイルがあれば、CocoaPodsに対応しているということです。
SPMに対応してるかを確認する方法
SPMに対応している場合、トップディレクトリに Package.swift
ファイルがあります。 @capacitor-community/admob
だと以下のファイルですね。
これがプラグインをSPMライブラリ化しているもので、ライブラリの依存関係が整理されています。プロジェクトをSPMで管理していれば、 ios/App
以下に Package.swift
がどう生成されているかと思います。この dependencies
で呼び出しています。
そして、以下でプロジェクトとリンクしています。
ionic-team/capacitor-swift-pm
のように2つ以上のproductsを持っている場合があるので、dependencies
で呼び出したあと、改めて products
でリンクしていることがわかります。
まとめ
Package.swift
がなければ、SPM非対応とおぼえておきましょう。現時点ではSPMがExperimentalなので、CocoaPodsサポートはほぼ100%かと思いますが、数年立ってSPMが当たり前になると、逆に **.podspec
ファイルがなくなり、CocoaPodsサポートが終了するプラグインもでてくるかもしれませんね。
それではまた。
Discussion