如何在Kotlin Multiplatform模块中配置iOS仅Debug构建的专属代码
解决Kotlin Multiplatform中iOS Debug专属代码的配置问题
你之前创建了iosDebug源码集但没关联到对应的编译任务,所以Gradle会抛出警告。要让这个源码集参与iOS Debug构建,需要把它绑定到iOS的Debug编译流程里,具体配置如下:
正确的build.gradle.kts配置方式
方式一:直接关联到iOS编译任务
kotlin { ios { binaries { framework { baseName = "MyLibrary" // 替换成你的框架名称 } } // 将iosDebug源码集关联到iOS Debug的主编译任务 compilations.getByName("main") { defaultSourceSet.dependsOn(sourceSets.getByName("iosDebug")) } } sourceSets { val iosMain by getting val iosDebug by creating { dependsOn(iosMain) // 默认源码目录就是src/iosDebug/kotlin,和Android逻辑一致,无需额外配置 // 若需自定义路径,可添加:kotlin.srcDir("自定义路径") } } }
方式二:在源码集定义时直接关联
kotlin { sourceSets { val iosMain by getting val iosDebug by creating { dependsOn(iosMain) // 绑定到iOS Debug编译任务 compilations.getByName("iosMain")?.let { it.defaultSourceSet.dependsOn(this) } } } }
多iOS架构场景的统一配置
如果你的项目包含iosArm64、iosX64等多个iOS目标,可以通过层级配置统一关联:
kotlin { iosTargetHierarchy.default { common { // 让所有iOS Debug编译都包含iosDebug源码集 compilations.main.defaultSourceSet.dependsOn(sourceSets.getByName("iosDebug")) } } sourceSets { val iosMain by getting val iosDebug by creating { dependsOn(iosMain) } } }
效果说明
配置完成后,你只需要在src/iosDebug/kotlin目录下编写Debug专属代码,执行assembleMyLibraryDebugXCFramework时会自动包含这些代码,而Release构建(assembleMyLibraryReleaseXCFramework)则不会引入。
内容的提问来源于stack exchange,提问作者Michael Greifeneder
相关产品推荐
相关产品推荐

