diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/CocoaPodsIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/CocoaPodsIT.kt index 3682b4629fc..7d50d6b448d 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/CocoaPodsIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/CocoaPodsIT.kt @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.gradle.plugin.cocoapods.KotlinCocoapodsPlugin.Compan import org.jetbrains.kotlin.gradle.plugin.cocoapods.KotlinCocoapodsPlugin.Companion.POD_SPEC_TASK_NAME import org.jetbrains.kotlin.gradle.transformProjectWithPluginsDsl import org.jetbrains.kotlin.gradle.util.modify +import org.jetbrains.kotlin.gradle.util.runProcess import org.jetbrains.kotlin.konan.target.HostManager import org.junit.Assume.assumeTrue import org.junit.Before @@ -739,6 +740,31 @@ class CocoaPodsIT : BaseGradleIT() { } } + @Test + fun testCommaSeparatedTargets() { + with(project) { + gradleBuildScript().modify { + // Replace a single target with a pair (iosX64 + iosArm64) to test building a fat framework. + it.replace("iosX64(\"iOS\")", "ios()") + } + hooks.addHook { + // Check that a built universal framework includes both device and simulator architectures. + val framework = fileInWorkingDir("build/cocoapods/framework/cocoapods.framework/cocoapods") + with(runProcess(listOf("file", framework.absolutePath), projectDir)) { + assertTrue(isSuccessful) + assertTrue(output.contains("\\(for architecture x86_64\\):\\s+current ar archive".toRegex())) + assertTrue(output.contains("\\(for architecture arm64\\):\\s+current ar archive".toRegex())) + } + } + // Run the build. + test( + "syncFramework", + "-Pkotlin.native.cocoapods.target=ios_x64,ios_arm64", + "-Pkotlin.native.cocoapods.configuration=DEBUG" + ) + } + } + // paths private fun CompiledProject.url() = externalSources().resolve("url") diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt index 4cfe5839173..e4cccd19f0e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt @@ -197,7 +197,8 @@ open class KotlinCocoapodsPlugin : Plugin { val frameworkPlatforms: List = when (requestedTargetName) { KOTLIN_TARGET_FOR_IOS_DEVICE -> listOf(IOS_ARM64, IOS_ARM32) KOTLIN_TARGET_FOR_WATCHOS_DEVICE -> listOf(WATCHOS_ARM32, WATCHOS_ARM64) - else -> listOf(HostManager().targetByName(requestedTargetName)) // A requested target doesn't require building a fat framework. + // A request parameter can be comma separated list of targets. + else -> requestedTargetName.split(",").map { HostManager().targetByName(it) }.toList() } val frameworkTargets = frameworkPlatforms.flatMap { kotlinExtension.targetsForPlatform(it) }