Ошибка при добавлении зависимости CocoaPods в мультиплатформе Kotlin

Я пытаюсь настроить модуль KMM с Couchbase Lite в качестве зависимости платформы как для Android, так и для iOS. Я сталкиваюсь с ошибками, заставляя это работать с CocoaPods для iOS:

Exception in thread "main" java.lang.Error: /var/folders/pv/3_5xn0dd0v5bf6sxbfcsq_wr0000gn/T/7009311365357251921.m:1:22: error: expected ';' after module name
    at org.jetbrains.kotlin.native.interop.indexer.UtilsKt.ensureNoCompileErrors(Utils.kt:152)
    at org.jetbrains.kotlin.native.interop.indexer.ModuleSupportKt.getModulesASTFiles(ModuleSupport.kt:68)
    at org.jetbrains.kotlin.native.interop.indexer.ModuleSupportKt.getModulesInfo(ModuleSupport.kt:14)
    at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.buildNativeLibrary(main.kt:507)
    at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.processCLib(main.kt:265)
    at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.interop(main.kt:73)
    at org.jetbrains.kotlin.cli.utilities.InteropCompilerKt.invokeInterop(InteropCompiler.kt:45)
    at org.jetbrains.kotlin.cli.utilities.MainKt.mainImpl(main.kt:19)
    at org.jetbrains.kotlin.cli.utilities.MainKt.main(main.kt:41)

Сгенерированный файл 7009311365357251921.m впоследствии отсутствует на этом пути, что затрудняет отладку.

build.gradle.kts:

plugins {
    kotlin("multiplatform") version "1.4.21"
    kotlin("native.cocoapods") version "1.4.21"
    id("com.android.library")
}
...
kotlin {
    android()
    ios()
    cocoapods {
        summary = "TBD"
        homepage = "TBD"
        ios.deploymentTarget = "9.0"
        pod("CouchbaseLite-Enterprise") {
            version = "~> 2.8.1"
        }
    }
    ...
}
...

Я получаю другую ошибку, если использую версию, не предназначенную для предприятий. Тот же build.gradle.kts, за исключением pod("CouchbaseLite"). Я получаю сообщение об ошибке:

Exception in thread "main" java.lang.IllegalArgumentException: 'CBLQueryMeta' is going to be declared twice
    at org.jetbrains.kotlin.native.interop.gen.KotlinFile.<init>(KotlinCodeModel.kt:257)
    at org.jetbrains.kotlin.native.interop.gen.StubIrBridgeBuilder$kotlinFile$1.<init>(StubIrBridgeBuilder.kt:44)
    at org.jetbrains.kotlin.native.interop.gen.StubIrBridgeBuilder.<init>(StubIrBridgeBuilder.kt:46)
    at org.jetbrains.kotlin.native.interop.gen.StubIrDriver.run(StubIrDriver.kt:122)
    at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.processCLib(main.kt:315)
    at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.interop(main.kt:73)
    at org.jetbrains.kotlin.cli.utilities.InteropCompilerKt.invokeInterop(InteropCompiler.kt:45)
    at org.jetbrains.kotlin.cli.utilities.MainKt.mainImpl(main.kt:19)
    at org.jetbrains.kotlin.cli.utilities.MainKt.main(main.kt:41)

Обе эти спецификации пода компилируются без проблем в проекте Xcode. Но родной Kotlin, похоже, сталкивается с проблемами.

Обновление:

Ошибка pod("CouchbaseLite"), по-видимому, вызвана определением интерфейсов CBLQueryMeta и CBLQuery. Для этого существует проблема с YouTrack. Эта ошибка, скорее всего, по-прежнему будет проблемой для CouchbaseLite-Enterprise, если исходная ошибка может быть устранена.

Обновление 2:

Если я удалю { version = "~> 2.8.1" } или вставлю его непосредственно в вызов функции pod("CouchbaseLite-Enterprise", "~> 2.8.1"), я получу другую ошибку:

Exception in thread "main" java.lang.Error: /var/folders/pv/3_5xn0dd0v5bf6sxbfcsq_wr0000gn/T/6649487835163649080.m:1:9: fatal error: module 'CouchbaseLite_Enterprise' not found
    at org.jetbrains.kotlin.native.interop.indexer.UtilsKt.ensureNoCompileErrors(Utils.kt:152)
    at org.jetbrains.kotlin.native.interop.indexer.ModuleSupportKt.getModulesASTFiles(ModuleSupport.kt:68)
    at org.jetbrains.kotlin.native.interop.indexer.ModuleSupportKt.getModulesInfo(ModuleSupport.kt:14)
    at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.buildNativeLibrary(main.kt:507)
    at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.processCLib(main.kt:265)
    at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.interop(main.kt:73)
    at org.jetbrains.kotlin.cli.utilities.InteropCompilerKt.invokeInterop(InteropCompiler.kt:45)
    at org.jetbrains.kotlin.cli.utilities.MainKt.mainImpl(main.kt:19)
    at org.jetbrains.kotlin.cli.utilities.MainKt.main(main.kt:41)

Обновление 3:

Я подал проблему с YouTrack по этому поводу. Кажется, это может иметь какое-то отношение к тире - в имени библиотеки CocoaPod. Была закрытая проблема с исправление для этого, изменив имя модуля для замены тире - с подчеркиванием _, но исправление не похоже работает.


person Jeff Lockhart    schedule 05.01.2021    source источник


Ответы (1)


В зависимости от того, какую версию инструментальной цепочки вы используете, кажется, что вы используете неправильный синтаксис для указания версии. Попробуйте вместо этого pod("CouchbaseLite-Enterprise", "~> 2.8.1").

person mss    schedule 12.01.2021
comment
Я попробовал это и получил другую ошибку. Обновлю вопрос. - person Jeff Lockhart; 13.01.2021
comment
Непонятно, почему между ними должна быть разница, поскольку API позволяет указывать версию в обоих направлениях. В документах описывается первый способ, которым я это добился. - person Jeff Lockhart; 13.01.2021