Другая схема для приложения iOS в мультиплатформенной Kotlin

Я работаю над проектом KMM, и мне нужно создать другую схему для моего проекта, например (Dev, Production, QA). Я могу легко сделать это в части Android, но я не могу создать то же самое в iOS. Я пробовал создавать разные схемы, которые мы обычно делаем в приложении для iOS, но мое приложение вылетает из-за ошибки, нацеленной на нашу задачу packForXcode в студии Android.

Ошибка при сбое: - No enum constant org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType.DEVELOPMENT Здесь я создал настраиваемую схему с именем development

Эта ошибка указывает на

val packForXcode by tasks.creating(Sync::class) {
group = "build"
val mode = System.getenv("CONFIGURATION") ?: "DEBUG"
val sdkName = System.getenv("SDK_NAME") ?: "iphonesimulator"
val targetName = "ios" + if (sdkName.startsWith("iphoneos")) "Arm64" else "X64"
val framework = kotlin.targets.getByName<KotlinNativeTarget>(targetName).binaries.getFramework(mode)
inputs.property("mode", mode)
dependsOn(framework.linkTask)
val targetDir = File(buildDir, "xcode-frameworks")
from({ framework.outputDirectory })
into(targetDir)
}

Теперь, перейдя к binaries, я вижу, что есть два NativeBuildTargets DEBUG и RELEASE, поэтому я могу работать в обоих из них, но как я могу создать собственную схему для моего приложения iOS?


person Mohammed Hanif.    schedule 08.01.2021    source источник


Ответы (2)


Проблема вызвана переменной mode, содержащей значение "configuration", которое не является подходящим типом сборки с точки зрения компилятора Kotlin / Native (см. Некоторые подробности в документация). Чтобы этого избежать, следует переопределить функцию определения значения modes. Например, это может быть что-то вроде этого:

val mode = if (System.getenv("CONFIGURATION") != "release") "DEBUG" else System.getenv("CONFIGURATION")
person Artyom Degtyarev    schedule 25.01.2021
comment
Что, если я использую kotlin("native.cocoapods"), и как я могу переназначить значение configuration? - person 吴海豹; 29.01.2021
comment
Возникла проблема с пользовательскими именами сборок и плагином Cocoapods. Дополнительные сведения см. В этой проблеме. - person Artyom Degtyarev; 29.01.2021

Ниже работал у меня


val packForXcode by tasks.creating(Sync::class) {
    group = "build"
    // Below line is important to solve it
    val mode = if (System.getenv("CONFIGURATION") != "release") "DEBUG" else System.getenv("CONFIGURATION")
    val sdkName = System.getenv("SDK_NAME") ?: "iphonesimulator"
    val targetName = "ios" + if (sdkName.startsWith("iphoneos")) "Arm64" else "X64"
    val framework = kotlin.targets.getByName<KotlinNativeTarget>(targetName).binaries.getFramework(mode)
    inputs.property("mode", mode)
    dependsOn(framework.linkTask)
    val targetDir = File(buildDir, "xcode-frameworks")
    from({ framework.outputDirectory })
    into(targetDir)
}

person Utsav Dave    schedule 22.03.2021