I have these dependencies in my build.gradle.kts file in share module.
val coroutinesVersion = "1.3.9-native-mt"
val serializationVersion = "1.0.1"
val ktorVersion = "1.4.2"
val sqlDelightVersion = "1.4.4"
sourceSets {
val commonMain by getting {
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:$serializationVersion")
implementation("io.ktor:ktor-client-core:$ktorVersion")
implementation("io.ktor:ktor-client-serialization:$ktorVersion")
implementation("com.squareup.sqldelight:runtime:$sqlDelightVersion")
implementation("com.squareup.sqldelight:coroutines-extensions:$sqlDelightVersion")
}
}
...
}
When I run the app everything works fine in android app. But I get a runtime crash when running the ios app. In logs, I see that Ktor
is complaining about coroutines version not being native-mt
. Which I don't understand why because 1.4.# version of coroutines don't have separate native multithreaded branches.
I looked at the External Libraries folder and found that coroutines version in my case was set to 1.3.9 all the time. If I remove com.squareup.sqldelight:coroutines-extensions Everything works just fine again. But I need that dependency to consume Flow
from db.
I tried excluding coroutines from sqldelight extension but it didn't compile in Xcode build.
implementation("com.squareup.sqldelight:coroutines-extensions:$sqlDelightVersion") {
exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core")
}
So my questions are:
- Why does SQLDelight override
kotlinx-coroutines-core
version? - Why does Ktor want
kotlinx-coroutines-core
versions only withnative-mt
suffix? - How can I solve this versions problem?
1 - That's the version SQLdelight uses. Gradle made a decision to pull in that one vs what ktor wants.
2 - Ktor now needs the multithreaded version.
3 - Solutions
a - Force the version ktor wants. Define the coroutines dependency with version and strictly:
b - The Coroutines extension is one file. We need to update KaMPKit and remove this, but we had a version copied into the source to avoid earlier issues with SQLDelight: https://github.com/touchlab/KaMPKit/blob/master/shared/src/commonMain/kotlin/co/touchlab/kampkit/sqldelight/CoroutinesExtensions.kt
c - SQLDelight needs a version bump. I can hack away at that over the next few days, but not sure when that will be ready. You can just wait for that?