Shawn Karber_
03/12/2020, 9:03 PMimport org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
plugins {
id("com.android.library")
kotlin("multiplatform")
}
apply(plugin = "com.android.library")
apply(plugin = "kotlin-android-extensions")
android {
compileSdkVersion(29)
defaultConfig {
minSdkVersion(23)
targetSdkVersion(29)
}
}
kotlin {
val iOSTarget: (String, KotlinNativeTarget.() -> Unit) -> KotlinNativeTarget =
if (System.getenv("SDK_NAME")?.startsWith("iphoneos") == true)
::iosArm64
else
::iosX64
iOSTarget("ios") {
binaries {
framework {
baseName = "shiftHDsdk"
}
}
}
android()
sourceSets["commonMain"].dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib-common:1.3.70")
implementation("io.ktor:ktor-client-core:1.3.1")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-common:1.3.4")
}
sourceSets["androidMain"].dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib:1.3.70")
implementation("io.ktor:ktor-client-android:1.3.1")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.4")
}
sourceSets["iosMain"].dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-native:1.3.4")
}
}
val packForXcode by tasks.creating(Sync::class) {
val targetDir = File(buildDir, "xcode-frameworks")
val mode = System.getenv("CONFIGURATION") ?: "DEBUG"
val framework = kotlin.targets
.getByName<KotlinNativeTarget>("ios")
.binaries.getFramework(mode)
inputs.property("mode", mode)
dependsOn(framework.linkTask)
from({ framework.outputDirectory })
into(targetDir)
// Generate a ./gradlew wrapper with embedded Java path for iOS framework compilation.
doLast {
val gradlew = File(targetDir, "gradlew")
gradlew.writeText("#!/bin/bash\n"
+ "export 'JAVA_HOME=${System.getProperty("java.home")}'\n"
+ "cd '${rootProject.rootDir}'\n"
+ "./gradlew \$@\n")
gradlew.setExecutable(true)
}
}
tasks.getByName("build").dependsOn(packForXcode)