KMM 错误:此 API 在 ktor 内部,不应使用。它可能会被删除或更改,恕不另行通知
Posted
技术标签:
【中文标题】KMM 错误:此 API 在 ktor 内部,不应使用。它可能会被删除或更改,恕不另行通知【英文标题】:KMM error: This API is internal in ktor and should not be used. It could be removed or changed without notice 【发布时间】:2021-12-06 02:44:20 【问题描述】:将 Xcode 更新到 13.0 后,我无法运行使用 Kotlin Multiplatform 的 ios 应用程序。
构建失败并显示 Command PhaseScriptExecution failed with a nonzero exit code
,它说错误是:
任务 :shared:compileKotlinIos 失败 e: /Users...path.../KtorClient.kt: (134, 17): 此 API 在 ktor 内部,不应使用。它可能会被删除或更改,恕不另行通知。
更新到 Xcode 13 后我们也遇到过类似的错误,但总是与共享 KMM 库、JDK 等有关...此错误多次出现:> Process ‘command ‘/Library/Java/JavaVirtualMachines/jdk-11.0.12.jdk/Contents/Home/bin/java’' finished with non-zero exit value 1
134行KtorClient.kt
:
override suspend fun createPassword(email: String, password: String): CreatePasswordResponse
return client.post
url
path("v1", "user", "create_password")
body = LoginRequest(email, password)
headers
/*134.line*/ append(HttpHeaders.ContentType, ContentType.Application.Json)
我们尝试删除XCWorkspace
、Podfile.lock
、Pods 文件夹,然后重新安装 pod,删除派生数据,没有任何帮助。
我们也尝试过不同版本的 Ktor、JDK,没有任何帮助。
在网上找到的这个命令也没有帮助(他们说你应该在更新 Xcode 后运行它):
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
【问题讨论】:
【参考方案1】:这是 Ktor 的 known issue,与 Kotlin 中的 this fix 相关。
documentation 是这样说的:
请注意,公开附加函数的
StringValuesBuilder
类被错误地标记为InternalAPI
注释。此问题将在v2.0.0
中修复。作为一种解决方法,您可以添加@OptIn(InternalAPI::class)
注释以明确选择使用此 API。
您可以使用@OptIn(InternalAPI::class)
选择加入您的特定行,或将其添加到您的共享模块build.gradle.kts
以对整个模块生效:
kotlin
// ..
sourceSets
all
languageSettings.optIn("io.ktor.util.InternalAPI")
// ...
【讨论】:
这没有帮助。我当前的 Gradle 版本是 1.6.0-RC。 @stackich 尝试在第 134 行之前添加@OptIn(InternalAPI::class)
以上是关于KMM 错误:此 API 在 ktor 内部,不应使用。它可能会被删除或更改,恕不另行通知的主要内容,如果未能解决你的问题,请参考以下文章
无法将 io.ktor 导入 Android Studio 中 KMM 的通用模块