Kotlin多平台中iOS应用程序的不同架构
我正在从事一个KMM项目,我需要为我的项目创建不同的模式,例如(开发、生产、QA),我可以在android部分轻松地完成,但我无法在iOS中创建相同的模式。我试着在iOS应用程序中创建不同的模式,但我的应用程序在android studio中错误地指向我们的Kotlin多平台中iOS应用程序的不同架构,ios,xcode,kotlin-multiplatform,Ios,Xcode,Kotlin Multiplatform,我正在从事一个KMM项目,我需要为我的项目创建不同的模式,例如(开发、生产、QA),我可以在android部分轻松地完成,但我无法在iOS中创建相同的模式。我试着在iOS应用程序中创建不同的模式,但我的应用程序在android studio中错误地指向我们的packForXcode任务而崩溃 崩溃时出错:-没有枚举常量org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType.DEVELOPMENT这里我创建了一个名为DEVELOPMENT 这个
packForXcode
任务而崩溃
崩溃时出错:-没有枚举常量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)
}
val packForXcode by tasks.creating(Sync::class){
group=“build”
val mode=System.getenv(“配置”)?:“调试”
val sdkName=System.getenv(“SDK_名称”)?:“iphonesimulator”
val targetName=“ios”+if(sdkName.startsWith(“iphoneos”)“Arm64”或“X64”
val framework=kotlin.targets.getByName(targetName).binaries.getFramework(模式)
属性(“模式”,模式)
dependsOn(framework.linkTask)
val targetDir=File(buildDir,“xcode框架”)
来自({framework.outputDirectory})
进入(targetDir)
}
现在进入
二进制文件
我可以看到有两个本地构建目标
调试
和发布
,因此我可以在这两个版本中运行,但如何为我的iOS应用程序创建自定义模式?问题是由包含“配置”
值的模式
变量引起的,从Kotlin/本机编译器的角度来看,它不是合适的生成类型(请参阅中的一些详细信息)。为了避免这种情况,应该重新定义函数确定mode
s值。例如,它可能是这样的:
val mode = if (System.getenv("CONFIGURATION") != "release") "DEBUG" else System.getenv("CONFIGURATION")
下面是我的工作
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)
}
val packForXcode by tasks.creating(Sync::class){
group=“build”
//下面这一行对解决这个问题很重要
val mode=if(System.getenv(“配置”)!=“发布”)“调试”else System.getenv(“配置”)
val sdkName=System.getenv(“SDK_名称”)?:“iphonesimulator”
val targetName=“ios”+if(sdkName.startsWith(“iphoneos”)“Arm64”或“X64”
val framework=kotlin.targets.getByName(targetName).binaries.getFramework(模式)
属性(“模式”,模式)
dependsOn(framework.linkTask)
val targetDir=File(buildDir,“xcode框架”)
来自({framework.outputDirectory})
进入(targetDir)
}
如果我使用kotlin(“native.cocoapods”)
,我如何重新分配配置值呢?自定义构建名称和cocoapods插件存在问题。详情请参阅。