#ios #kotlin #kotlin-multiplatform #ktor #xcode13
Вопрос:
После обновления Xcode до 13.0 я не могу запустить свое приложение для iOS, которое использует мультиплатформенную платформу Kotlin.
Сборка завершается с Command PhaseScriptExecution failed with a nonzero exit code
ошибкой , и в ней говорится, что ошибка:
Задача :общий доступ:Ошибка
компиляции e: /Пользователи…путь…/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, затем переустановить модуль, удалить производные данные, ничего не помогло.
Мы также пробовали разные версии Ktor, JDK, но ничего не помогло.
Также эта команда, найденная в Интернете, не помогла(они говорят, что вы должны запустить ее после обновления Xcode):
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
Ответ №1:
Это известная проблема Ktor, связанная с этим исправлением в Котлине.
Вот что говорится в документации:
Обратите внимание, что
StringValuesBuilder
класс, предоставляющий функцию добавления, неправильно помеченInternalAPI
аннотацией. Эта проблема будет исправлена вv2.0.0
. В качестве обходного пути вы можете добавить@OptIn(InternalAPI::class)
аннотацию, чтобы явно отказаться от использования этого API.
Вы можете указать свою конкретную строку @OptIn(InternalAPI::class)
или добавить ее в свой общий модуль build.gradle.kts
, чтобы она вступила в силу для всего модуля:
kotlin {
// ..
sourceSets {
all {
languageSettings.optIn("io.ktor.util.InternalAPI")
}
// ...
}
}
Комментарии:
1. Это не помогло. Моя текущая версия Gradle-1.6.0-RC.
2. @stackich попробуйте добавить
@OptIn(InternalAPI::class)
перед строкой 1343. Привет, @stackich. Мой ответ решил ваш вопрос? Если да, пожалуйста, примите это. В противном случае, дайте мне знать, если у вас возникнут какие-либо проблемы с этим. Я также добавил цитату из документации по этой теме