Project Structure & expect/actual
Source sets
commonMain— shared Kotlin for all platforms.androidMain— Android-only code (can use Android APIs).iosMain— iOS-only code (can call Apple APIs).
expect / actual
Declare a need in common with expect; implement it per platform with actual.
// commonMain
expect fun platformName(): String
// androidMain
actual fun platformName(): String = "Android ${android.os.Build.VERSION.SDK_INT}"
// iosMain
actual fun platformName(): String =
UIDevice.currentDevice.systemName()
Gradle targets
kotlin {
androidTarget()
iosArm64()
iosSimulatorArm64()
sourceSets {
commonMain.dependencies { /* shared libs */ }
}
}
Tip: keep as much as possible incommonMain; only drop intoexpect/actualwhen you truly need a platform API.