kotlin.native.cocoapods.targets can be a custom list of architectures (#3861)

Co-authored-by: Mike Kulasinski <mike.kulasinski@payworks.com>
Co-authored-by: Ilya Matveev <ilya.matveev@jetbrains.com>
This commit is contained in:
MikeKulasinski-visa
2020-11-04 12:21:12 +01:00
committed by GitHub
parent 0279068214
commit bc2b396ecd
2 changed files with 28 additions and 1 deletions
@@ -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")
@@ -197,7 +197,8 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
val frameworkPlatforms: List<KonanTarget> = 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) }