apply plugin: 'com.android.library' apply plugin: 'kotlin-multiplatform' apply plugin: 'kotlin-kapt' android { compileSdkVersion 30 defaultConfig { minSdkVersion 21 targetSdkVersion 30 versionCode 1 versionName "1.0" } buildTypes { release { } } sourceSets{ main.java.srcDirs += 'src/androidMain/kotlin' } compileOptions { targetCompatibility = '1.8' } } kotlin { targets { final def iOSTarget = System.getenv('SDK_NAME')?.startsWith("iphoneos") \ ? presets.iosArm64 : presets.iosX64 fromPreset(iOSTarget, 'ios') { binaries { framework('shared') } } android() } sourceSets { commonMain.dependencies { api 'org.jetbrains.kotlin:kotlin-stdlib-common' } commonMain.kotlin.srcDirs += 'src/commonMain/kotlin' androidMain.dependencies { api 'org.jetbrains.kotlin:kotlin-stdlib' } iosMain.dependencies { } iosMain.kotlin.srcDirs += 'src/iosMain/kotlin' } } // workaround for https://youtrack.jetbrains.com/issue/KT-27170 configurations { compileClasspath } task packForXCode(type: Sync) { final File frameworkDir = new File(buildDir, "xcode-frameworks") final String mode = project.findProperty("XCODE_CONFIGURATION")?.toUpperCase() ?: 'DEBUG' final def framework = kotlin.targets.ios.binaries.getFramework("shared", mode) inputs.property "mode", mode dependsOn framework.linkTask from { framework.outputFile.parentFile } into frameworkDir doLast { new File(frameworkDir, 'gradlew').with { text = "#!/bin/bash\nexport 'JAVA_HOME=${System.getProperty("java.home")}'\ncd '${rootProject.rootDir}'\n./gradlew \$@\n" setExecutable(true) } } } tasks.build.dependsOn packForXCode tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { kotlinOptions { jvmTarget = "1.8" } }