ios - 在 Kotlin Multiplatform 中添加 CocoaPods 依赖项时出错
问题描述
我正在尝试使用 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")
错误似乎是由同时定义了 aCBLQueryMeta
和CBLQuery
interface 引起的。有一个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 库名称中的破折号有关。有一个已关闭的问题已通过更改模块名称以替换破折号来解决此问题 - 使用下划线 _,但该修复似乎不起作用。
解决方案
根据您使用的工具链版本,似乎您使用错误的语法来指定版本。试试pod("CouchbaseLite-Enterprise", "~> 2.8.1")
吧。
推荐阅读
- python - 调整大小和裁剪图像后查找新的 (X,Y)
- neural-network - Keras LSTM 让我的电脑崩溃了?
- typescript - 限制方法中的接口类型参数
- javafx - 有没有其他方法可以在 JavaFX 中解析和呈现 HTML 文本,而不是使用 WebView?
- python - 使用 Python 请求从西南请求数据时出现超时错误
- javascript - 表将无法使用 Firebase 生成
- php - 从 JSON 中提取数据并显示在 SWAL 警报中
- sockets - Raw socket UDP programming
- react-native - GraphQL Subscription Authentication Using AsyncStorage
- java - java.security.InvalidKeyException: Keystore operation failed