Kotlin 2.0.0下,含CocoaPods的XCode目标如何设置Gradle属性?
问题背景
在Kotlin 1.19.20版本中,通过Xcode构建阶段执行以下脚本可正常设置buildkonfig.flavor属性:
cd "$SRCROOT/.." && ./gradlew :shared:embedAndSignAppleFrameworkForXcode -P buildkonfig.flavor=prod
升级至Kotlin 2.0.0后,出现编译错误:
'embedAndSign' task can not be used in a project with dependencies to pods.
尝试切换至build、assemble或generateBuildKonfig等任务,虽能编译运行,但buildkonfig.flavor属性未生效;回退旧版本测试发现,用这些任务替代embedAndSignAppleFrameworkForXcode时,属性同样无法设置。
可行解决方案
针对含CocoaPods的Kotlin Multiplatform项目,在Xcode构建阶段可使用以下任务来确保buildkonfig.flavor属性生效:
:shared:xcodeBuild:这是Kotlin 2.0.0为适配CocoaPods项目新增的任务,专门用于和Xcode构建流程协同,能正确传递Gradle属性并触发BuildKonfig的代码生成。执行脚本示例:cd "$SRCROOT/.." && ./gradlew :shared:xcodeBuild -P buildkonfig.flavor=prod这个任务会自动处理框架的构建与集成,同时保证BuildKonfig基于指定的flavor生成对应代码。
:shared:generateBuildKonfig+ 平台编译任务:如果需要更细粒度控制,可以先单独触发BuildKonfig生成,再执行对应平台的编译任务。注意要保证任务顺序,示例脚本:cd "$SRCROOT/.." && ./gradlew :shared:generateBuildKonfig :shared:compileKotlinIosSimulatorArm64 -P buildkonfig.flavor=prod其中
compileKotlinIosSimulatorArm64需根据你的实际目标平台调整(比如compileKotlinIosX64、compileKotlinIosDeviceArm64等),确保BuildKonfig生成代码后再编译Kotlin逻辑,这样属性才会生效。
关键注意事项
- 确保Xcode构建阶段的脚本在Compile Sources步骤之前执行,让BuildKonfig生成的代码能被正常编译进项目。
- 验证
build.gradle.kts中BuildKonfig的配置是否正确关联了传入的属性,示例配置:buildkonfig { flavor = project.findProperty("buildkonfig.flavor") ?: "dev" // 其他BuildKonfig配置逻辑 }
内容的提问来源于stack exchange,提问作者MrKew

