Michal Havryluk
02/08/2024, 9:30 AMJan Holešovský
02/08/2024, 10:16 AMJan Holešovský
02/08/2024, 10:17 AMMichal Havryluk
02/08/2024, 10:46 AMJan Holešovský
02/08/2024, 11:58 AMMichal Havryluk
02/08/2024, 12:56 PMapply(plugin = versionCatalogLibs.findPlugin("multiplatform").get().get().pluginId)
apply(plugin = versionCatalogLibs.findPlugin("android-library").get().get().pluginId)
apply(plugin = versionCatalogLibs.findPlugin("kotlin-parcelize").get().get().pluginId)
configure<KotlinMultiplatformExtension> {
targets.all {
compilations.all {
compilerOptions.configure {
freeCompilerArgs = listOf(
"-Xexpect-actual-classes",
"-opt-in=kotlinx.cinterop.ExperimentalForeignApi"
)
}
}
}
androidTarget {
compilations.all {
kotlinOptions.jvmTarget = versionCatalogLibs.findVersion("java").get().requiredVersion
}
}
if (isIosTargetEnabled()) {
iosArm64()
iosSimulatorArm64()
}
applyDefaultHierarchyTemplate()
sourceSets {
all {
languageSettings {
optIn("kotlinx.coroutines.ExperimentalCoroutinesApi")
optIn("kotlin.experimental.ExperimentalObjCName")
optIn("kotlin.experimental.ExperimentalObjCRefinement")
optIn("kotlin.RequiresOptIn")
}
}
commonMain {
kotlin {
// Add generated resource reference file to sourceSets
srcDirs(project.projectDir.buildPathForPlatform("common"))
}
// Enable simple debugging using Log output for shared projects
if (!isCiAgent() && isDebugBuildType && project != project(":shared:logging")) {
dependencies {
implementation(project(":shared:logging"))
}
}
}
androidMain {
kotlin {
// Add generated resource reference file to sourceSets
srcDirs(project.projectDir.buildPathForPlatform("android"))
}
}
val androidDebug by creating
if (isRcBuildType) {
val androidRc by creating
}
if (isReleaseBuildType) {
val androidRelease by creating
}
if (isIosTargetEnabled()) {
iosMain {
kotlin {
// Add generated resource reference file to sourceSets
srcDirs(project.projectDir.buildPathForPlatform("ios"))
}
}
}
}
}
configure<LibraryExtension> {
sourceSets {
named("main") {
res.srcDirs(file("${project.projectDir}/src/commonMain/resources"))
}
}
val dataBinding: Boolean? by extra
buildFeatures {
// Determines whether to support Data Binding.
this.dataBinding = dataBinding
}
defaultConfig {
consumerProguardFiles("<http://lib-proguard-rules.pro|lib-proguard-rules.pro>")
}
buildTypes {
create(RC_TYPE)
}
}
// Register codegen task for our shared resources
tasks.register<ResourcesCodegenTask>(ResourcesCodegenTask.TASK_NAME) {
projectPath.set(project.projectDir)
projectName.set(project.name)
}
// Task should run before each build if necessary
tasks.named("preBuild") {
dependsOn(ResourcesCodegenTask.TASK_NAME)
}
// Task should run on gradle syn if necessary
tasks.named("prepareKotlinIdeaImport") {
dependsOn(ResourcesCodegenTask.TASK_NAME)
}
if (isIosTargetEnabled()) {
// Task should run before each ios build if necessary
tasks.named("compileKotlinIosArm64") {
dependsOn(ResourcesCodegenTask.TASK_NAME)
}
tasks.named("compileKotlinIosSimulatorArm64") {
dependsOn(ResourcesCodegenTask.TASK_NAME)
}
}
Jan Holešovský
02/08/2024, 1:01 PMimport org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
plugins {
kotlin("multiplatform")
id("com.android.library")
}
Jan Holešovský
02/08/2024, 1:02 PMJan Holešovský
02/08/2024, 1:03 PMapply(plugin =
) looks pretty standard to me]Michal Havryluk
02/08/2024, 1:06 PMMichal Havryluk
02/08/2024, 6:41 PMHiddenFromObjC
needs to be hidden behind new annotation and typealias.
commonMain
expect annotation class HiddenObjC() // custom name
iosMain
actual typealias HiddenObjC = kotlin.native.HiddenFromObjC
androidMain (or other non-native platform)
actual annotation class HiddenObjC()