Podライブラリへの依存関係の追加
- Podの依存関係を追加する前に、初期設定を完了させてください。
- サンプルプロジェクトはGitHubリポジトリで確認できます。
Kotlinプロジェクトのさまざまな場所から、Podライブラリへの依存関係を追加できます。
Podへの依存関係を追加するには、共有モジュールの build.gradle(.kts) ファイルで pod() 関数を呼び出します。 各依存関係には個別の関数呼び出しが必要です。関数の設定ブロックで依存関係のパラメータを指定できます。
CocoaPodsの統合アプローチは、直接統合で使用される
embedAndSignAppleFrameworkForXcodeメカニズムと併用することはできません。
- 新しい依存関係を追加してIDEでプロジェクトを再インポートすると、ライブラリは自動的に接続されます。
- KotlinプロジェクトをXcodeで使用するには、まずプロジェクトのPodfileを変更してください。
最小デプロイターゲットバージョンを指定せず、依存するPodがより高いデプロイターゲットを必要とする場合、エラーが発生します。
CocoaPodsリポジトリから
CocoaPodsリポジトリにあるPodライブラリへの依存関係を追加するには:
pod()関数でPodライブラリの名前を指定します。設定ブロックでは、
versionパラメータを使用してライブラリのバージョンを指定できます。 ライブラリの最新バージョンを使用する場合は、このパラメータを完全に省略できます。subspecsへの依存関係を追加することも可能です。
Podライブラリの最小デプロイターゲットバージョンを指定します。
kotlinkotlin { iosArm64() cocoapods { version = "2.0" summary = "CocoaPods test library" homepage = "https://github.com/JetBrains/kotlin" ios.deploymentTarget = "16.0" pod("SDWebImage") { version = "5.20.0" } } }IntelliJ IDEAで Build | Reload All Gradle Projects を実行(またはAndroid Studioで File | Sync Project with Gradle Files を実行)して、プロジェクトを再インポートします。
Kotlinコードからこれらの依存関係を使用するには、パッケージ cocoapods.<library-name> をインポートします:
import cocoapods.SDWebImage.*ローカルに保存されているライブラリ
ローカルに保存されているPodライブラリへの依存関係を追加するには:
pod()関数でPodライブラリの名前を指定します。設定ブロックで、ローカルPodライブラリへのパスを指定します。
sourceパラメータの値の中でpath()関数を使用します。subspecsへのローカル依存関係を追加することも可能です。
cocoapods {}ブロックには、ローカルに保存されたPodとCocoaPodsリポジトリのPodへの依存関係を同時に含めることができます。Podライブラリの最小デプロイターゲットバージョンを指定します。
kotlinkotlin { iosArm64() cocoapods { version = "2.0" summary = "CocoaPods test library" homepage = "https://github.com/JetBrains/kotlin" ios.deploymentTarget = "16.0" pod("pod_dependency") { version = "1.0" extraOpts += listOf("-compiler-option") source = path(project.file("../pod_dependency")) } pod("subspec_dependency/Core") { version = "1.0" extraOpts += listOf("-compiler-option") source = path(project.file("../subspec_dependency")) } pod("SDWebImage") { version = "5.20.0" } } }設定ブロックの
versionパラメータを使用して、ライブラリのバージョンを指定することもできます。 ライブラリの最新バージョンを使用する場合は、パラメータを省略してください。IntelliJ IDEAで Build | Reload All Gradle Projects を実行(またはAndroid Studioで File | Sync Project with Gradle Files を実行)して、プロジェクトを再インポートします。
Kotlinコードからこれらの依存関係を使用するには、パッケージ cocoapods.<library-name> をインポートします:
import cocoapods.pod_dependency.*
import cocoapods.subspec_dependency.*
import cocoapods.SDWebImage.*カスタムGitリポジトリから
カスタムGitリポジトリにあるPodライブラリへの依存関係を追加するには:
pod()関数でPodライブラリの名前を指定します。設定ブロックで、gitリポジトリへのパスを指定します。
sourceパラメータの値の中でgit()関数を使用します。さらに、
git()の後のブロックで以下のパラメータを指定できます:commit– リポジトリの特定のコミットを使用する場合tag– リポジトリの特定のタグを使用する場合branch– リポジトリの特定のブランチを使用する場合
git()関数は、渡されたパラメータをcommit、tag、branchの順に優先します。 パラメータを指定しない場合、KotlinプラグインはmasterブランチのHEADを使用します。branch、commit、tagパラメータを組み合わせて、Podの特定のバージョンを取得することもできます。Podライブラリの最小デプロイターゲットバージョンを指定します。
kotlinkotlin { iosArm64() cocoapods { version = "2.0" summary = "CocoaPods test library" homepage = "https://github.com/JetBrains/kotlin" ios.deploymentTarget = "16.0" pod("SDWebImage") { source = git("https://github.com/SDWebImage/SDWebImage") { tag = "5.20.0" } } pod("JSONModel") { source = git("https://github.com/jsonmodel/jsonmodel.git") { branch = "key-mapper-class" } } pod("CocoaLumberjack") { source = git("https://github.com/CocoaLumberjack/CocoaLumberjack.git") { commit = "3e7f595e3a459c39b917aacf9856cd2a48c4dbf3" } } } }IntelliJ IDEAで Build | Reload All Gradle Projects を実行(またはAndroid Studioで File | Sync Project with Gradle Files を実行)して、プロジェクトを再インポートします。
Kotlinコードからこれらの依存関係を使用するには、パッケージ cocoapods.<library-name> をインポートします:
import cocoapods.SDWebImage.*
import cocoapods.JSONModel.*
import cocoapods.CocoaLumberjack.*カスタムPodspecリポジトリから
カスタムPodspecリポジトリにあるPodライブラリへの依存関係を追加するには:
specRepos {}ブロック内のurl()呼び出しを使用して、カスタムPodspecリポジトリのアドレスを指定します。pod()関数でPodライブラリの名前を指定します。Podライブラリの最小デプロイターゲットバージョンを指定します。
kotlinkotlin { iosArm64() cocoapods { version = "2.0" summary = "CocoaPods test library" homepage = "https://github.com/JetBrains/kotlin" ios.deploymentTarget = "16.0" specRepos { url("https://github.com/Kotlin/kotlin-cocoapods-spec.git") } pod("example") } }IntelliJ IDEAで Build | Reload All Gradle Projects を実行(またはAndroid Studioで File | Sync Project with Gradle Files を実行)して、プロジェクトを再インポートします。
Xcodeで動作させるには、Podfileの冒頭でスペックの場所を指定してください:
rubysource 'https://github.com/Kotlin/kotlin-cocoapods-spec.git'
Kotlinコードからこれらの依存関係を使用するには、パッケージ cocoapods.<library-name> をインポートします:
import cocoapods.example.*カスタムcinteropオプションを使用する場合
カスタムcinteropオプションを使用してPodライブラリへの依存関係を追加するには:
pod()関数でPodライブラリの名前を指定します。設定ブロックで、以下のオプションを追加します:
extraOpts– Podライブラリのオプションリストを指定します。例:extraOpts = listOf("-compiler-option")。clangモジュールで問題が発生した場合は、
-fmodulesオプションも追加してください。packageName–import <packageName>を使用して、指定したパッケージ名で直接ライブラリをインポートできるようにします。
Podライブラリの最小デプロイターゲットバージョンを指定します。
kotlinkotlin { iosArm64() cocoapods { version = "2.0" summary = "CocoaPods test library" homepage = "https://github.com/JetBrains/kotlin" ios.deploymentTarget = "16.0" pod("FirebaseAuth") { packageName = "FirebaseAuthWrapper" version = "11.7.0" extraOpts += listOf("-compiler-option", "-fmodules") } } }IntelliJ IDEAで Build | Reload All Gradle Projects を実行(またはAndroid Studioで File | Sync Project with Gradle Files を実行)して、プロジェクトを再インポートします。
Kotlinコードからこれらの依存関係を使用するには、パッケージ cocoapods.<library-name> をインポートします:
import cocoapods.FirebaseAuth.*packageName パラメータを使用した場合、パッケージ名 import <packageName> を使用してライブラリをインポートできます:
import FirebaseAuthWrapper.Auth
import FirebaseAuthWrapper.User@importディレクティブを含むObjective-Cヘッダーのサポート
この機能は実験的です。 いつでも廃止または変更される可能性があります。評価目的でのみ使用してください。 YouTrackでのフィードバックをお待ちしております。
一部のObjective-Cライブラリ、特にSwiftライブラリのラッパーとして機能するものは、ヘッダーに @import ディレクティブを含んでいます。デフォルトでは、cinteropはこれらのディレクティブをサポートしていません。
@import ディレクティブのサポートを有効にするには、pod() 関数の設定ブロックで -fmodules オプションを指定します:
kotlin {
iosArm64()
cocoapods {
version = "2.0"
summary = "CocoaPods test library"
homepage = "https://github.com/JetBrains/kotlin"
ios.deploymentTarget = "16.0"
pod("PodName") {
version = "1.0.0"
extraOpts = listOf("-compiler-option", "-fmodules")
}
}
}依存するPod間でKotlin cinteropを共有する
pod() 関数を使用して複数のPodへの依存関係を追加する場合、PodのAPI間に依存関係があると問題が発生することがあります。
このような場合にコードをコンパイルできるようにするには、useInteropBindingFrom() 関数を使用します。 これは、新しいPodのバインディングを構築する際に、別のPod用に生成されたcinteropバインディングを利用します。
依存関係を設定する前に、依存先のPodを宣言する必要があります:
// pod("WebImage") のcinterop:
fun loadImage(): WebImage
// pod("Info") のcinterop:
fun printImageInfo(image: WebImage)
// あなたのコード:
printImageInfo(loadImage())このケースでcinterop間の正しい依存関係を設定していない場合、WebImage 型が異なるcinteropファイル(結果として異なるパッケージ)から取得されるため、コードは無効になります。
