diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/AppleFrameworkIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/AppleFrameworkIT.kt index 5733df61bd7..7edcc06d05c 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/AppleFrameworkIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/AppleFrameworkIT.kt @@ -5,15 +5,15 @@ package org.jetbrains.kotlin.gradle +import org.jetbrains.kotlin.gradle.util.AGPVersion import org.jetbrains.kotlin.konan.target.HostManager +import org.jetbrains.kotlin.test.util.KtTestUtil import org.junit.Assume import org.junit.BeforeClass import kotlin.test.Test -class AppleFrameworkIT : KotlinAndroid36GradleIT() { +class AppleFrameworkIT : BaseGradleIT() { companion object { - private val gradleVersion = GradleVersionRequired.FOR_MPP_SUPPORT - @BeforeClass @JvmStatic fun assumeItsMac() { @@ -21,11 +21,14 @@ class AppleFrameworkIT : KotlinAndroid36GradleIT() { } } - override val defaultGradleVersion: GradleVersionRequired - get() = gradleVersion + override val defaultGradleVersion = GradleVersionRequired.FOR_MPP_SUPPORT + override fun defaultBuildOptions() = super.defaultBuildOptions().copy( + androidHome = KtTestUtil.findAndroidSdk(), + androidGradlePluginVersion = AGPVersion.v3_6_0 + ) @Test - fun `assemble debug AppleFrameworkForXcode for IosArm64`() { + fun `assemble AppleFrameworkForXcode tasks for IosArm64`() { with(Project("sharedAppleFramework")) { val options: BuildOptions = defaultBuildOptions().copy( customEnvironmentVariables = mapOf( @@ -33,18 +36,18 @@ class AppleFrameworkIT : KotlinAndroid36GradleIT() { "SDK_NAME" to "iphoneos123" ) ) - build("assembleSharedDebugAppleFrameworkForXcodeIosArm64", options = options) { + build("assembleDebugAppleFrameworkForXcodeIosArm64", options = options) { assertSuccessful() - assertTasksExecuted(":shared:assembleSharedDebugAppleFrameworkForXcodeIosArm64") - assertFileExists("/shared/build/xcode-frameworks/debug/iphoneos123/shared.framework") - assertFileExists("/shared/build/xcode-frameworks/debug/iphoneos123/shared.framework.dSYM") + assertTasksExecuted(":shared:assembleDebugAppleFrameworkForXcodeIosArm64") + assertFileExists("/shared/build/xcode-frameworks/debug/iphoneos123/sdk.framework") + assertFileExists("/shared/build/xcode-frameworks/debug/iphoneos123/sdk.framework.dSYM") } - build("assembleSharedDebugAppleFrameworkForXcodeIosArm64", options = options) { + build("assembleCustomDebugAppleFrameworkForXcodeIosArm64", options = options) { assertSuccessful() - assertTasksUpToDate(":shared:assembleSharedDebugAppleFrameworkForXcodeIosArm64") - assertFileExists("/shared/build/xcode-frameworks/debug/iphoneos123/shared.framework") - assertFileExists("/shared/build/xcode-frameworks/debug/iphoneos123/shared.framework.dSYM") + assertTasksExecuted(":shared:assembleCustomDebugAppleFrameworkForXcodeIosArm64") + assertFileExists("/shared/build/xcode-frameworks/debug/iphoneos123/lib.framework") + assertFileExists("/shared/build/xcode-frameworks/debug/iphoneos123/lib.framework.dSYM") } } } @@ -55,8 +58,8 @@ class AppleFrameworkIT : KotlinAndroid36GradleIT() { build("tasks") { assertSuccessful() assertTasksNotRegistered( - ":shared:assembleSharedDebugAppleFrameworkForXcodeIosArm64", - ":shared:embedAndSignSharedAppleFrameworkForXcode" + ":shared:assembleDebugAppleFrameworkForXcodeIosArm64", + ":shared:embedAndSignAppleFrameworkForXcode" ) } } @@ -77,10 +80,19 @@ class AppleFrameworkIT : KotlinAndroid36GradleIT() { build("tasks", options = options) { assertSuccessful() assertTasksRegistered( - ":shared:assembleSharedDebugAppleFrameworkForXcodeIosArm64", - ":shared:embedAndSignSharedAppleFrameworkForXcode" + ":shared:assembleDebugAppleFrameworkForXcodeIosArm64", + ":shared:embedAndSignAppleFrameworkForXcode", + ":shared:assembleCustomDebugAppleFrameworkForXcodeIosArm64", + ":shared:embedAndSignCustomAppleFrameworkForXcode" + ) + assertTasksNotRegistered( + ":shared:assembleDebugAppleFrameworkForXcodeIosX64", + ":shared:assembleReleaseAppleFrameworkForXcodeIosX64", + ":shared:assembleReleaseAppleFrameworkForXcodeIosArm64", + ":shared:assembleCustomDebugAppleFrameworkForXcodeIosX64", + ":shared:assembleCustomReleaseAppleFrameworkForXcodeIosX64", + ":shared:assembleCustomReleaseAppleFrameworkForXcodeIosArm64" ) - assertTasksNotRegistered(":shared:assembleSharedDebugAppleFrameworkForXcodeIosX64") } } } @@ -97,11 +109,14 @@ class AppleFrameworkIT : KotlinAndroid36GradleIT() { build("tasks", options = options) { assertSuccessful() assertTasksRegistered( - ":shared:assembleSharedDebugAppleFrameworkForXcodeIosArm64", + ":shared:assembleDebugAppleFrameworkForXcodeIosArm64", + ":shared:assembleCustomDebugAppleFrameworkForXcodeIosArm64" ) assertTasksNotRegistered( - ":shared:embedAndSignSharedAppleFrameworkForXcode", - ":shared:assembleSharedDebugAppleFrameworkForXcodeIosX64" + ":shared:embedAndSignAppleFrameworkForXcode", + ":shared:assembleDebugAppleFrameworkForXcodeIosX64", + ":shared:embedAndSignCustomAppleFrameworkForXcode", + ":shared:assembleCustomDebugAppleFrameworkForXcodeIosX64" ) } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/sharedAppleFramework/shared/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/sharedAppleFramework/shared/build.gradle.kts index 726353469ba..832d659b34e 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/sharedAppleFramework/shared/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/sharedAppleFramework/shared/build.gradle.kts @@ -9,7 +9,10 @@ kotlin { ios() { binaries { framework { - baseName = "shared" + baseName = "sdk" + } + framework("custom") { + baseName = "lib" } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinNativeBinaryContainer.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinNativeBinaryContainer.kt index b509027150a..0f405c14bb8 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinNativeBinaryContainer.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinNativeBinaryContainer.kt @@ -160,6 +160,14 @@ open class KotlinNativeBinaryContainer @Inject constructor( internal fun generateBinaryName(prefix: String, buildType: NativeBuildType, outputKindClassifier: String) = lowerCamelCaseName(prefix, buildType.getName(), outputKindClassifier) + internal fun extractPrefixFromBinaryName(name: String, buildType: NativeBuildType, outputKindClassifier: String): String { + val suffix = lowerCamelCaseName(buildType.getName(), outputKindClassifier) + return if (name == suffix) + "" + else + name.substringBeforeLast(suffix.capitalize()) + } + // TODO: Remove in 1.3.50. private val GET_TEST_DEPRECATION_WARNING = """ | diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/apple/AppleXcodeTasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/apple/AppleXcodeTasks.kt index 9c63b92ae66..55c9824cef0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/apple/AppleXcodeTasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/apple/AppleXcodeTasks.kt @@ -9,6 +9,7 @@ import org.gradle.api.Project import org.gradle.api.plugins.BasePlugin import org.gradle.api.tasks.Copy import org.gradle.api.tasks.TaskProvider +import org.jetbrains.kotlin.gradle.dsl.KotlinNativeBinaryContainer import org.jetbrains.kotlin.gradle.plugin.mpp.Framework import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType import org.jetbrains.kotlin.gradle.plugin.mpp.enabledOnCurrentHost @@ -73,8 +74,8 @@ private fun Project.registerAssembleAppleFrameworkTask(framework: Framework): Ta val frameworkTarget = framework.target val frameworkTaskName = lowerCamelCaseName( "assemble", - framework.baseName, - frameworkBuildType.name.toLowerCaseAsciiOnly(), + framework.namePrefix, + frameworkBuildType.getName(), "AppleFrameworkForXcode", frameworkTarget.name ) @@ -119,7 +120,7 @@ internal fun Project.registerEmbedAndSignAppleFrameworkTask(framework: Framework val envFrameworkSearchDir = XcodeEnvironment.frameworkSearchDir val envSign = XcodeEnvironment.sign - val frameworkTaskName = lowerCamelCaseName("embedAndSign", framework.baseName, "AppleFrameworkForXcode") + val frameworkTaskName = lowerCamelCaseName("embedAndSign", framework.namePrefix, "AppleFrameworkForXcode") if (envBuildType == null || envTarget == null || envEmbeddedFrameworksDir == null || envFrameworkSearchDir == null) { logger.debug( @@ -133,7 +134,7 @@ internal fun Project.registerEmbedAndSignAppleFrameworkTask(framework: Framework registerTask(frameworkTaskName) { task -> task.group = "build" - task.description = "Embed and sign ${framework.baseName} framework as requested by Xcode's environment variables" + task.description = "Embed and sign ${framework.namePrefix} framework as requested by Xcode's environment variables" task.dependsOn(assembleTask) task.inputs.apply { @@ -162,5 +163,12 @@ internal fun Project.registerEmbedAndSignAppleFrameworkTask(framework: Framework } } +private val Framework.namePrefix: String + get() = KotlinNativeBinaryContainer.extractPrefixFromBinaryName( + name, + buildType, + outputKind.taskNameClassifier + ) + private fun Project.appleFrameworkDir(frameworkSearchDir: File) = buildDir.resolve("xcode-frameworks").resolve(frameworkSearchDir) \ No newline at end of file