メインコンテンツまでスキップ
バージョン: v8

Swift Package Manager

Swift Packagesは、ソフトウェアの依存関係のためのAppleの新しいファーストパーティツールです。従来、Capacitorは内部およびプラグインの依存関係を管理するためにCocoaPodsを使用していましたが、今こそサポートされたソリューションに移行する時です。

Capacitor 6では、CocoapodsまたはSwift Package Manager(SPM)のどちらかを選択できるようになりました。現在のほとんどのcapacitor-teamサポートプラグインはSPMをサポートしており、特にcapacitor-pluginsのプラグインが該当します。

SPMを使用するためにCapacitorの作業方法を大きく変更する必要がないように最善を尽くしましたが、いくつか理解しておくべきことがあります。

仕組み

CapacitorプロジェクトがSPMを使用している場合、プロジェクトのすべての依存関係を参照する場所として機能する「ベースSPM」パッケージを使用します:

Base SPM Picture

Capacitor CLIは、新しいプラグインを同期するときにCapApp-SPMパッケージを変更します。ここに含まれる内容には触れないようにすることが重要です。CLIは変更を加える可能性があります。

新しいCapacitorプロジェクトでSPMを使用する

まず、通常のnpm init @capacitor/app@latestから始めます。

Demo Step 1

次に、プロジェクトにiOSプラットフォームを追加します:

npm install @capacitor/ios

次に、ウェブプロジェクトをビルドします。

npm run build

完了したら、iOSプロジェクトを追加します。通常の追加コマンドに--packagemanager SPMオプションを追加する必要があります。

npx cap add ios --packagemanager SPM

これで、npx cap open iosを使用してiOSプロジェクトを開き、そこからアプリを実行できます。


SPMを使用してCapacitorプラグインを追加および使用する

このプロジェクトにプラグインを追加し、そのプラグインを使用してみましょう。

まず、Capacitor Appプラグインをインストールします。

npm install @capacitor/app

次に、ウェブアプリを同期します。これにより、AppプラグインSPMがiOSプロジェクトに追加されます。

npx cap sync

これでAppプラグインを通常通り使用できます。

既存のCapacitorプロジェクトでSPMを使用する

まず、ソース管理または他の場所でプロジェクトの現在の状態のバックアップがあることを確認してください。

iOSディレクトリの削除

Xcodeプロジェクトをまったく手動で変更していない場合、移行するための1つのオプションはiosディレクトリを削除してからnpx cap add ios --packagemanager SPMを実行することです。これによりCocoaPodsテンプレートプロジェクトが削除され、SPMテンプレートプロジェクトに置き換えられます。

移行ツールの使用

Capacitor CLIには、CocoaPodsからSwift Package Managerへの移行を支援するコマンドがあります。ただし、2つの手動ステップがまだ必要です。注意すべき点として:Cordovaプラグインを使用するプロジェクトは動作するはずですが、Package.swiftファイルを生成する必要があるため、一部のプラグインは正しく動作しない場合があります。また、SPMバージョンが利用できないCapacitorプラグインを使用するプロジェクトは、正しく動作せず、移行中およびnpx cap syncの実行時に互換性のないプラグインについての警告が表示されます。

開始するには、プロジェクトのルートでnpx cap spm-migration-assistantを実行します。

このツールは以下を行います:

  • pod deintegrateを実行してCocoaPodsを削除
  • PodfileApp.xcworkspacePodfile.lockを削除
  • 必要なファイルを含むCapApp-SPMディレクトリを作成
  • プラグインからPackage.swiftを生成し、含められないものがあれば警告
  • iOSプロジェクトディレクトリにdebug.xcconfigを追加

次にnpx cap open iosを実行すると、以下のような画面が表示されるはずです:

移行ステップ1

Appをハイライトし、Package Dependenciesタブを選択し、このページで+記号を押して依存関係を追加します:

移行ステップ2

以下のような画面が表示されるはずです - ダイアログからAdd Local...を選択します:

移行ステップ3

このダイアログでCapApp-SPMを選択し、Add Packageをクリックします:

移行ステップ4

この画面が表示されたらAdd Packageを再度クリックします:

移行ステップ5

完了すると、このような画面が表示されるはずです。次に、debug.xconfigの追加に関する次のセクションに進みます

移行ステップ6

debug.xcconfigをプロジェクトに追加

アプリ情報タブから、Add Configuration file...を選択します

XCConfigステップ1

次にdebug.xcconfigというファイルを選択します

XCConfigステップ2

最後にxcconfigを選択します

XCConfigステップ3

この時点で完了であり、通常通りビルドして作業できます。

既存のプラグインをSPMに変換する

プラグインに必要な[Name]Plugin.m[Name]Plugin.h以外のSwiftのみが含まれている場合、capacitor-plugin-converterを使用できます。

このツールは以下の変更を行います:

  • メインのSwiftプラグインファイル[Name]Plugin.swiftに以下の必要なものを追加:
    • クラスにCAPBridgedPluginプロトコルへの準拠を追加
    • クラスに3つの変数を追加:identifierjsNamepluginMethods
      • identifierCAP_PLUGINマクロの最初の引数に対応
      • jsNameCAP_PLUGINマクロの2番目の引数に対応
      • pluginMethodsCAP_PLUGINマクロに渡されたメソッドの配列
  • プラグインフォルダのルートにPackage.swiftファイルが作成されます
  • 以下のファイルは不要になったため削除されます:
    • Plugin.xcodeproj
    • Plugin.xcworkspace
    • Plugin/Info.plist
    • PluginTests/Info.plist
    • Podfile
  • SPMのベストプラクティスに合わせて、プロジェクトファイルはSourcesTestsディレクトリに移動されます
  • プラグインのpackage.jsonには以下の変更が加えられます:
    • filesArrayにこれらのファイルまたはディレクトリが追加されます:
      • ios/Sources
      • ios/Tests
      • Package.swift
    • verify:iosは、期待通りに動作し続けるようにxcodebuild -scheme YourPluginName -destination generic/platform=iOSに変更されます
  • プラグインのpodspecは、s.source_filesPluginディレクトリではなくSourcesディレクトリを指すように変更されます

詳細については、capacitor-plugin-converterのリポジトリのドキュメントを参照してください。

トラブルシューティング

プラグインを追加した後、Xcodeで「パッケージキャッシュをリセット」してみてください。

Demo Step 1