Prateek Grover
04/29/2020, 5:49 PMe: Cannot access class 'kotlin.Pair'. Check your module classpath for missing or conflicting dependencies
e: Cannot access class 'kotlinx.coroutines.CoroutineExceptionHandler'. Check your module classpath for missing or conflicting dependencies
e: Cannot access class 'kotlin.collections.HashMap'. Check your module classpath for missing or conflicting dependencies
Omar Mainegra
04/29/2020, 8:16 PMPrateek Grover
04/29/2020, 8:29 PMimport org.jetbrains.kotlin.backend.common.push
import org.jetbrains.kotlin.gradle.tasks.FatFrameworkTask
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType
plugins {
id("kotlin-multiplatform")
}
val targetList: MutableList<KotlinNativeTarget> = mutableListOf()
populateIOSTargetList()
val frameworkName = "KNUmbrellaLib"
kotlin {
val nativeBuildTypes = getNativeBuildTypes()
targets {
for (target in targetList) {
target.apply {
binaries {
framework(frameworkName, nativeBuildTypes) {
// embedBitcode("bitcode")
export(project(":phonepe-kn-kernel"))
export(project(":phonepe-kn-os"))
export(project(":analytics"))
}
}
}
}
}
sourceSets {
commonMain {
dependencies {
api(project(":analytics"))
implementation("org.jetbrains.kotlin:kotlin-stdlib-common:${rootProject.extra["kotlin"]}")
}
}
}
}
tasks.register<Delete>("cleanFrameworksFolder") {
val frameworkDir = File(buildDir, "../products/xcode-frameworks")
val binDir = File(buildDir, "bin")
delete(frameworkDir, binDir)
}
tasks.create("fat", FatFrameworkTask::class) {
group = "Universal framework"
description = "Builds a universal (fat) framework"
baseName = frameworkName
val mode = getBuildConfiguration()
from(frameworks = targetList.map { it.binaries.getFramework(frameworkName, mode) })
destinationDir = buildDir.resolve("../products/xcode-frameworks")
}
fun populateIOSTargetList() {
val presetName: String = getPresetName()
when (presetName) {
"ios32" -> targetList.push(project.kotlin.iosArm32("ios32"))
"ios64" -> targetList.push(project.kotlin.iosArm64("ios64"))
"iosSim" -> targetList.push(project.kotlin.iosX64("iosSim"))
"fat" -> targetList.addAll(listOf(project.kotlin.iosX64("iosSim"), project.kotlin.iosArm32("ios32"), project.kotlin.iosArm64("ios64")))
else -> targetList.push(project.kotlin.iosX64("iosSim"))
}
}
fun getPresetName(): String {
return if (project.hasProperty("type")) project.properties["type"] as String else "iosSim"
}
fun getNativeBuildTypes(): List<NativeBuildType> {
return when (getBuildConfiguration()) {
"DEBUG" -> listOf(NativeBuildType.DEBUG)
"RELEASE" -> listOf(NativeBuildType.RELEASE)
else -> listOf(NativeBuildType.DEBUG, NativeBuildType.RELEASE)
}
}
fun getBuildType(): String {
return if (project.hasProperty("configuration")) project.properties["configuration"] as String else "DEBUG"
}
fun getBuildConfiguration(): String {
val buildType: String = getBuildType()
if (buildType.contains("Debug", ignoreCase = true)) {
return "DEBUG"
} else if (buildType.contains("Release", ignoreCase = true)) {
return "RELEASE"
} else {
return "DEBUG"
}
}
fun getBuildEnvironment(): String {
return getBuildType().toUpperCase()
.replace("DEBUG-", "")
.replace("RELEASE-", "")
.replace("-", "_")
}
tasks.getByName("build").finalizedBy(tasks.getByName("fat"))
tasks.getByName("assemble").dependsOn(tasks.getByName("cleanFrameworksFolder"))
Prateek Grover
04/29/2020, 8:30 PMplugins {
id("kotlin-multiplatform")
id("kotlinx-serialization")
}
repositories {
maven(url = "<https://kotlin.bintray.com/kotlinx>")
}
kotlin {
val ios32 = iosArm32("ios32")
val ios64 = iosArm64("ios64")
val iosSim = iosX64("iosSim")
targets {
targetFromPreset(presets.getByName("jvm"), "android")
ios32.apply { }
ios64.apply { }
iosSim.apply { }
}
sourceSets {
commonMain {
dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib-common:1.3.61")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-common:1.3.2-native-mt-1")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:0.14.0")
implementation("org.jetbrains.kotlin:kotlin-reflect:1.3.61")
implementation("org.jetbrains.kotlinx:atomicfu-common:0.14.1")
api(project(":phonepe-kn-os"))
}
}
commonTest {
dependencies {
implementation("org.jetbrains.kotlin:kotlin-test-common:1.3.61")
implementation("org.jetbrains.kotlin:kotlin-test-annotations-common:1.3.61")
implementation("org.mockito:mockito-inline:3.0.0")
implementation("com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0")
implementation("org.jetbrains.kotlinx:atomicfu:0.14.1")
}
}
maybeCreate("androidMain")
getByName("androidMain") {
dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.61")
implementation("org.jetbrains.kotlin:kotlin-stdlib:1.3.61")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.2-native-mt-1")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.14.0")
implementation("com.google.code.gson:gson:2.8.5")
}
}
maybeCreate("androidTest")
getByName("androidTest") {
dependencies {
implementation("org.jetbrains.kotlin:kotlin-test:1.3.61")
implementation("org.jetbrains.kotlin:kotlin-test-junit:1.3.61")
}
}
val ios32Main by getting {
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-native:1.3.2-native-mt-1")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime-native:0.14.0")
implementation("org.jetbrains.kotlinx:atomicfu-native:0.14.1")
}
}
val ios32Test by getting {
dependencies {
}
}
val ios64Main by getting {
dependsOn(ios32Main)
}
val ios64Test by getting {
dependsOn(ios32Test)
}
val iosSimMain by getting {
dependsOn(ios32Main)
}
val iosSimTest by getting {
dependsOn(ios32Test)
}
}
}
Prateek Grover
04/29/2020, 9:52 PMOmar Mainegra
04/29/2020, 10:08 PMOmar Mainegra
04/29/2020, 10:09 PMPrateek Grover
04/30/2020, 11:36 AM