【问题标题】:Error adding CocoaPods dependency in Kotlin Multiplatform在 Kotlin Multiplatform 中添加 CocoaPods 依赖项时出错
【发布时间】:2021-04-11 12:29:50
【问题描述】:

我正在尝试使用 Couchbase Lite 设置 KMM 模块作为 Android 和 iOS 的平台依赖项。我在让它与 iOS 的 CocoaPods 一起工作时遇到了错误:

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)

这两个 pod 规范在 Xcode 项目中编译都没有问题。但是 Kotlin native 似乎遇到了问题。

更新:

pod("CouchbaseLite") 错误似乎是由同时定义了 CBLQueryMetaCBLQuery 接口引起的。为此有一个YouTrack issue。如果可以解决原始错误,则此错误可能仍然是 CouchbaseLite-Enterprise 的问题。

更新 2:

如果我删除 { version = "~&gt; 2.8.1" } 或将其直接放入函数调用中 pod("CouchbaseLite-Enterprise", "~&gt; 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 issue。似乎这可能与 CocoaPod 库名称中的破折号有关。有 an issue 已关闭,而 a fix 为此通过更改模块名称来替换破折号 - 用下划线 _ 替换,但修复似乎不起作用。

【问题讨论】:

    标签: ios cocoapods couchbase-lite kotlin-multiplatform


    【解决方案1】:

    根据您使用的工具链版本,您似乎使用了错误的语法来指定版本。请改用pod("CouchbaseLite-Enterprise", "~&gt; 2.8.1")

    【讨论】:

    • 我确实尝试过这个并且收到了一个不同的错误。我会更新问题。
    • 不清楚为什么两者之间会有差异,因为 API 允许以两种方式指定版本。 docs 描述了我的第一种方式。
    猜你喜欢
    • 2021-06-22
    • 2020-03-01
    • 1970-01-01
    • 2021-09-08
    • 2020-12-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    相关资源
    最近更新 更多