Kotlin Multiplatform Appにおける定義とモジュールのアノテーション
KSP のセットアップ
公式ドキュメントに記載されている KSP のセットアップに従ってください: KSP with Kotlin Multiplatform
Hello Koin KMP プロジェクトで、Koin Annotations の基本的なセットアップを確認することもできます。
KSP プラグインの追加
plugins {
alias(libs.plugins.ksp)
}
common API で annotations ライブラリを使用する:
sourceSets {
commonMain.dependencies {
implementation(libs.koin.core)
api(libs.koin.annotations)
// ...
}
}
適切な sourceSet で KSP を構成することを忘れないでください:
dependencies {
add("kspCommonMainMetadata", libs.koin.ksp.compiler)
add("kspAndroid", libs.koin.ksp.compiler)
add("kspIosX64", libs.koin.ksp.compiler)
add("kspIosArm64", libs.koin.ksp.compiler)
add("kspIosSimulatorArm64", libs.koin.ksp.compiler)
}
Common Modules と KMP Expect Components の宣言
commonMain sourceSet では、expect クラスまたは関数のネイティブ実装を持つパッケージをスキャンするために、Module を宣言するだけです。
下記は PlatformModule
で、PlatformHelper
expect クラスを持つ com.jetbrains.kmpapp.platform
パッケージをスキャンしています。モジュールクラスは @Module
および @ComponentScan
アノテーションでアノテートされています。
// in commonMain
@Module
@ComponentScan("com.jetbrains.kmpapp.platform")
class PlatformModule
// package com.jetbrains.kmpapp.platform
@Single
expect class PlatformHelper {
fun getName() : String
}
注記
生成されたコードは、各プラットフォーム実装で行われます。モジュールパッケージのスキャンは、適切なプラットフォーム実装を収集します。
ネイティブコンポーネントのアノテート
各実装 sourceSet で、適切なプラットフォーム実装を定義できるようになりました。これらの実装は @Single
でアノテートされています (他の定義アノテーションでもかまいません)。
// in androidMain
// package com.jetbrains.kmpapp.platform
@Single
actual class PlatformHelper(
val context: Context
){
actual fun getName(): String = "I'm Android - $context"
}
// in nativeMain
// package com.jetbrains.kmpapp.platform
@Single
actual class PlatformHelper(){
actual fun getName(): String = "I'm Native"
}