Cristián Arenas
11/20/2019, 12:57 PM.framework
that works in both an iOS device and the simulator?
Right now I'm changing 2 lines in my build.gradle
every time I want to switch between targeting iosX64 (simulator) and iosArm64 (actual device).- iosX64("ios") {
+ iosArm64("ios") {
- implementation "io.ktor:ktor-client-serialization-iosx64:${versions.ktor}"
+ implementation "io.ktor:ktor-client-serialization-iosarm64:${versions.ktor}"
vanniktech
11/20/2019, 1:10 PM//select iOS target platform depending on the Xcode environment variables
val iOSTarget: (String, KotlinNativeTarget.() -> Unit) -> KotlinNativeTarget = if (System.getenv("SDK_NAME")?.startsWith("iphoneos") == true) ::iosArm64 else ::iosX64
iOSTarget("ios") {
}
Cristián Arenas
11/20/2019, 1:15 PM.framework
that works on both platforms, I need to distribute the framework so it should include appropriate binaries for both architectures. Do you know how to achieve this?vanniktech
11/20/2019, 1:16 PMCristián Arenas
11/20/2019, 1:17 PMArtyom Degtyarev [JB]
11/20/2019, 1:34 PMCristián Arenas
11/20/2019, 1:35 PMtylerwilson
11/20/2019, 2:15 PMKonstantin Petrukhnov
11/21/2019, 4:27 AMmkojadinovic
11/22/2019, 8:31 AMiosArm64 {
binaries {
framework('Logger')
}
}
iosX64 {
binaries {
framework('Logger')
}
}
// Create a task building a fat framework.
task fatFramework(type: FatFrameworkTask) {
def buildType = project.findProperty('kotlin.build.type') ?: 'DEBUG'
baseName = "Logger"
final File frameworkDir = new File(buildDir, "xcode-frameworks")
destinationDir = frameworkDir
from(
targets.iosArm64.binaries.getFramework('Logger', buildType),
targets.iosX64.binaries.getFramework('Logger', buildType)
)
}
Also, you have to add next:
iosMain {
dependencies {
implementation deps.coroutineNative
implementation deps.kotlinxSerRuntimeNative
implementation deps.ktoriOS
implementation deps.ktorSerializationNative
// SQL Delight
implementation deps.sqlDelightiOS
}
}
iosX64Main {
dependsOn iosMain
kotlin.srcDirs += project.file("src/iosMain/kotlin")
}
iosArm64Main {
dependsOn iosMain
kotlin.srcDirs += project.file("src/iosMain/kotlin")
}
Konstantin Petrukhnov
11/25/2019, 6:06 AMmkojadinovic
11/25/2019, 7:21 AMimport org.jetbrains.kotlin.gradle.tasks.FatFrameworkTask
apply plugin: "kotlin-multiplatform"
apply plugin: 'com.android.library'
apply plugin: 'kotlinx-serialization'
apply plugin: "com.squareup.sqldelight"
apply plugin: 'kotlin-kapt'
android {
defaultConfig {
minSdkVersion minSdk
compileSdkVersion compileSdk
}
packagingOptions {
exclude "META-INF/*"
}
testOptions {
unitTests.returnDefaultValues = true
}
}
kotlin {
iosArm64 {
binaries {
framework('Logger')
}
}
iosX64 {
binaries {
framework('Logger')
}
}
// Create a task building a fat framework.
task fatFramework(type: FatFrameworkTask) {
def buildType = project.findProperty('kotlin.build.type') ?: 'DEBUG'
baseName = "Logger"
final File frameworkDir = new File(buildDir, "xcode-frameworks")
destinationDir = frameworkDir
from(
targets.iosArm64.binaries.getFramework('Logger', buildType),
targets.iosX64.binaries.getFramework('Logger', buildType)
)
}
android()
sourceSets {
all {
languageSettings {
useExperimentalAnnotation('kotlin.Experimental')
}
}
commonMain {
dependencies {
implementation deps.kotlinCommon
implementation deps.coroutineCommon
implementation deps.kotlinxSerRuntimeCommon
implementation deps.ktorCore
implementation deps.ktorSerialization
// SQL Delight
implementation deps.sqlDelightJVM
implementation deps.kodeinErased
}
}
commonTest {
dependencies {
implementation deps.kotlinReflect
implementation deps.test.mockkCommon
implementation deps.test.kotlinTestCommon
implementation deps.test.kotlinAnnotCommon
api deps.sqlDelightJVM
api deps.test.ktorMock
}
}
androidMain {
dependencies {
implementation deps.kotlin
implementation deps.coroutineAndroid
implementation deps.kotlinxSerRuntime
implementation deps.ktorAndroid
implementation deps.ktorSerializationJvm
//Crashlytics
implementation deps.crashlytics
implementation deps.network.gson
implementation deps.network.retrofit
implementation deps.network.okhttp
// SQL Delight
implementation deps.sqlDelightAndroid
implementation deps.kodeinErased
}
}
androidTest {
dependencies {
implementation deps.test.kotlinTest
implementation deps.test.kotlinTestJunit
api deps.sqlDelightJVM
implementation deps.test.ktorMockJvm
implementation deps.test.kotlinTestJunit
implementation deps.test.kotlinTest
implementation deps.test.mockk
}
}
iosMain {
dependencies {
implementation deps.coroutineNative
implementation deps.kotlinxSerRuntimeNative
implementation deps.ktoriOS
implementation deps.ktorSerializationNative
// SQL Delight
implementation deps.sqlDelightiOS
}
}
iosTest {
dependencies {
api deps.sqlDelightiOS
api deps.test.ktorMockNative
}
}
iosX64Main {
dependsOn iosMain
kotlin.srcDirs += project.file("src/iosMain/kotlin")
}
iosArm64Main {
dependsOn iosMain
kotlin.srcDirs += project.file("src/iosMain/kotlin")
}
}
}
sqldelight {
LoggerDatabase {
packageName = "com.example.logger"
}
}
configurations {
compileClasspath
}
tasks.build.dependsOn fatFramework
kapt {
correctErrorTypes = true
mapDiagnosticLocations = true
}
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
kotlinOptions {
jvmTarget = '1.8'
}
}