KMM: sqldelight: coroutines-extensions устанавливает версию kotlinx-coroutines-core равной 1.3.9

У меня есть эти зависимости в моем файле build.gradle.kts в модуле общего доступа.

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")
        }
    }
    ...
}

Когда я запускаю приложение, все работает нормально в приложении для Android. Но я получаю сбой во время выполнения при запуске приложения ios. В журналах я вижу, что Ktor жалуется на то, что версия сопрограмм не native-mt. Я не понимаю, почему, потому что версия 1.4. # Сопрограмм не имеет отдельных нативных многопоточных веток.

Я просмотрел папку «Внешние библиотеки» и обнаружил, что версия сопрограмм в моем случае всегда была установлена ​​на 1.3.9. Если я удалю com.squareup.sqldelight: coroutines-extensions, все снова будет работать нормально. Но мне нужна эта зависимость, чтобы потреблять Flow из базы данных.

Я попытался исключить сопрограммы из расширения sqldelight, но он не компилировался в сборке Xcode.

implementation("com.squareup.sqldelight:coroutines-extensions:$sqlDelightVersion") {
    exclude("org.jetbrains.kotlinx", "kotlinx-coroutines-core")
}

Итак, мои вопросы:

  1. Почему SQLDelight переопределяет версию kotlinx-coroutines-core?
  2. Почему Ktor хочет kotlinx-coroutines-core версий только с суффиксом native-mt?
  3. Как я могу решить эту проблему с версиями?

image


person Marat    schedule 25.11.2020    source источник


Ответы (1)


1 - это версия, которую использует SQLdelight. Gradle принял решение использовать это против того, что хочет ktor.

2 - Ktor теперь нужна многопоточная версия.

3 - Решения

a - принудительно установить версию, которую хочет ктор. Определите зависимость сопрограмм от версии и строго:

implementation(Deps.Coroutines.common) {
            version {
                strictly(Versions.coroutines)
            }
        }

b - Расширение Coroutines - это один файл. Нам нужно обновить KaMPKit и удалить это, но у нас была версия, скопированная в источник, чтобы избежать более ранних проблем с SQLDelight: https://github.com/touchlab/KaMPKit/blob/master/shared/src/commonMain/kotlin/co/touchlab/kampkit/sqldelight/CoroutinesExtensions.kt

c - SQLDelight требуется повышение версии. Я могу заняться этим в течение следующих нескольких дней, но не уверен, когда это будет готово. Вы можете просто дождаться этого?

person Kevin Galligan    schedule 25.11.2020
comment
установка версии строго помогла. Но мне пришлось использовать ту же версию для coroutines-android зависимости, чтобы проект скомпилировался. Не уверен, хорошо это или плохо. При попытке решить эту проблему я наткнулся на CoroutinesExtensions файл. Я подумал, что если у меня не получится заставить расширение работать, я удалю его и скопирую также файл расширения KaMPKit. Спасибо за это! - person Marat; 25.11.2020
comment
Буду признателен, если вы поможете мне разрешить путаницу с сопрограммами Ktor. На этой странице github.com/Kotlin/kotlinx.coroutines для мультиплатформенности говорится, что достаточно укажите "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.1". Но с Ktor это не работает. Мы должны использовать 1.4.1-native-mt? Или, может быть, Ktor нужно обновить для поддержки новых версий сопрограмм? - person Marat; 25.11.2020
comment
По последнему вопросу, моя информация, к сожалению, устарела. Мне нужно обновить текущую ситуацию. Когда был выпущен 1.4, Ktor перешел на mt-версию сопрограмм, но все еще оставались две разные версии сопрограмм. Если в ближайшее время у меня будет возможность покопаться в этом, я обновлю это. - person Kevin Galligan; 25.11.2020
comment
Итак, есть 1.4.1-native-mt версия сопрограмм. kotlinlang.org/docs/mobile/ выглядит как будто он был выпущен не так давно github.com/Kotlin/kotlinx.coroutines / issues / - person Marat; 26.11.2020