Kotlin Multiplatform プロジェクトを CocoaPods から SwiftPM 依存関係に切り替える
- CocoaPods Gradle プラグインから SwiftPM に切り替えるには、まず Xcode プロジェクトを再構成する必要があります。
mainブランチで CocoaPods を、spm-importブランチで SwiftPM を使用している以下のサンプルプロジェクトを確認してください:
CocoaPods 依存関係を持つ KMP モジュールがあり、SwiftPM インポートを使用して Swift パッケージに切り替えたい場合は、以下の手順に従ってください:
- ビルドスクリプトを更新して、SwiftPM 依存関係と対応する設定を含める
- SwiftPM インポートツールの助けを借りて、直接統合(direct integration)を使用するように Xcode プロジェクトを再構成する
- プロジェクト構造に応じて、CocoaPods 統合を完全または部分的に無効にする
用意されているスキルを使用して、CocoaPods から SwiftPM への移行をお好みの AI エージェントに任せることができます。 AI による処理結果は完全に予測可能ではないことに注意してください。
ビルドスクリプトを更新する
ビルドを更新するには、SwiftPM インポートのページの指示に従ってください:
- Kotlin Multiplatform Gradle プラグインのバージョンを %kotlinEapVersion% に変更する
- CocoaPods プラグインを無効にしたり CocoaPods 依存関係を削除したりせずに、必要な SwiftPM 依存関係を指定する
例えば、FirebaseAnalytics pod を使用している場合:
Kotlin Multiplatform Gradle プラグインをバージョン %kotlinEapVersion% を使用するように設定していることを確認してください。
FirebaseAnalyticsSwift パッケージをswiftPMDependencies {}ブロックに追加します:kotlin// projectDir/sharedLogic/build.gradle.kts kotlin { swiftPMDependencies { swiftPackage( url = url("https://github.com/firebase/firebase-ios-sdk.git"), version = from("12.5.0"), products = listOf(product("FirebaseAnalytics")), ) } cocoapods { // ... pod("FirebaseAnalytics") { version = "12.5.0" // ... } } }Sync Project with Gradle Files アクションを実行して、Swift パッケージから API をインポートします。
Swift パッケージからインポートされた API を使用するようにコードを更新します。 pod と対応する Swift パッケージが全く同じ API を提供している場合、Kotlin のインポートディレクティブを更新するだけで済むはずです。例:
ビルドスクリプトで
cocoapods.framework {}ブロックを使用している場合は、その設定をbinaries.framework {}ブロックに移動します。例:
Xcode プロジェクトを再構成する
CocoaPods Gradle プラグイン (kotlin("native.cocoapods")) を使用している場合、SwiftPM に切り替える前に、Xcode プロジェクトを直接統合(direct integration)を使用するように再構成する必要があります。 SwiftPM インポートツールは、.xcodeproj ファイルに必要な変更を加えるためのシェルコマンドを生成できます。
Xcode でプロジェクトを開く(IntelliJ IDEA では File | Open Project in Xcode を選択)。
Xcode でプロジェクトをビルドする (Product | Build)。ビルドは失敗しますが、ビルドエラーには必要なコマンドが含まれています。
Xcode でビルドエラーを確認するには、View | Navigators | Report を選択し、上部のフィルターで Errors Only を選択します。 コマンドは以下のようになり、プロジェクトへの正しいパスが含まれています。
textXCODEPROJ_PATH='/path/to/project/iosApp/iosApp.xcodeproj' GRADLE_PROJECT_PATH=':kotlin-library' '/path/to/project/gradlew' -p '/path/to/project' ':kotlin-library:integrateEmbedAndSign' ':kotlin-library:integrateLinkagePackage'Xcode を開かずに、ターミナルからプロジェクトをビルドすることで同じコマンドを生成できます。
/path/to/project/iosAppディレクトリで以下のコマンドを実行してください:shellxcodebuild -scheme "$(echo -n *.xcworkspace | python3 -c 'import sys, json; from subprocess import check_output; print(list(set(json.loads(check_output(["xcodebuild", "-workspace", sys.stdin.readline(), "-list", "-json"]))["workspace"]["schemes"]) - set(json.loads(check_output(["xcodebuild", "-project", "Pods/Pods.xcodeproj", "-list", "-json"]))["project"]["schemes"]))[0])')" -workspace *.xcworkspace -destination 'generic/platform=iOS Simulator' ARCHS=arm64 | grep -A5 'What went wrong'末尾の
grep呼び出しにより、特定のエラーメッセージと実行する必要のあるコマンドが表示されます。/path/to/project/iosAppディレクトリで、生成されたコマンドをターミナルで実行します。 これによりiosAppプロジェクトの.xcodeprojファイルが修正され、ビルド中にembedAndSignAppleFrameworkForXcodeタスクがトリガーされるようになります。これにより、iOS ビルドに Kotlin Multiplatform のコンパイルフェーズが挿入されます。IntelliJ IDEA で Tools | Swift Package Manager | Resolve Dependencies を選択し、
build.gradle.ktsファイルで宣言された SwiftPM 依存関係を解決します。
これで iOS アプリは SwiftPM 依存関係を使用するようになります。CocoaPods プラグインを無効にし、pod を解除(deintegrate)できます。
CocoaPods KMP 統合を削除する
すべての CocoaPods 依存関係を Swift パッケージに置き換えた場合は、/path/to/project/iosApp ディレクトリで以下のコマンドを実行して pod を解除できます:
pod deintegrateSwiftPM 依存関係と重複しない依存関係のために CocoaPods を使い続けたい場合は、Podfile を編集して KMP モジュールに言及している行のみを削除し、pod install を実行してください。例:
target 'iosApp' do
# ここで 'sharedLogic' は共有コードモジュールの名前です。
# この行を削除して 'pod install' を再実行してください。
pod 'sharedLogic', :path => '../sharedLogic'
...
end最後に、Gradle ビルド設定から CocoaPods の記述を削除します:
- 共有コードモジュールの
build.gradle.ktsファイルからcocoapods {}ブロック全体を削除します。すべての依存関係は SwiftPM インポートツールによって管理されるようになったためです。 - プロジェクトが CocoaPods に依存しなくなった場合は、ルートの
build.gradle.ktsファイルと共有モジュールのbuild.gradle.ktsの両方のplugins {}ブロックから CocoaPods Gradle プラグインへの参照を削除します。
