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)
            
        
    

我们尝试删除XCWorkspacePodfile.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 内部,不应使用。它可能会被删除或更改,恕不另行通知的主要内容,如果未能解决你的问题,请参考以下文章

使用 Ktor 发送发布请求时出现内部服务器错误

无法将 io.ktor 导入 Android Studio 中 KMM 的通用模块

Ktor 中的特殊字符解析

Kotlin Multiplatform - 使用 Ktor 处理响应 http 代码和异常

KMM 入门处理 HTTP 网络请求

KMM 入门处理 HTTP 网络请求