From 56a7789f1dc72f8bf840f99a8964a7ddff1ee5ee Mon Sep 17 00:00:00 2001 From: Artem Daugel-Dauge Date: Thu, 22 Jun 2023 16:42:09 +0200 Subject: [PATCH] Revert "[Gradle] Fix invalidating iOS framework after import" This reverts commit c2e092fe4acc7b861a2239a04455f1e4c4ac2608. --- .../kotlin/gradle/native/CocoaPodsIT.kt | 69 ------------------- .../native/cocoapods/KotlinCocoapodsPlugin.kt | 14 ++-- .../cocoapods/tasks/DummyFrameworkTask.kt | 32 +++++---- .../native/cocoapods/tasks/PodInstallTask.kt | 26 ------- 4 files changed, 23 insertions(+), 118 deletions(-) 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 8cb5a9ae5027c..0a13ccc37ef9e 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 @@ -424,75 +424,6 @@ class CocoaPodsIT : BaseGradleIT() { project.testWithWrapper(dummyTaskName) } - @Test - fun testImportUTDAfterLinkingFramework() { - val linkTaskName = ":linkPodDebugFrameworkIOS" - project.gradleBuildScript().appendToCocoapodsBlock(""" - framework { - baseName = "kotlin-library" - } - name = "kotlin-library" - podfile = project.file("ios-app/Podfile") - """.trimIndent()) - - - hooks.addHook { - assertTasksExecuted(dummyTaskName) - assertTasksExecuted(podInstallTaskName) - } - project.testImport() - - hooks.rewriteHooks { - assertTasksExecuted(linkTaskName) - } - project.testWithWrapper(linkTaskName) - - hooks.rewriteHooks { - assertTasksUpToDate(dummyTaskName) - assertTasksUpToDate(podInstallTaskName) - } - project.testImport() - } - - @Test - fun testChangeFrameworkTypeUTD() { - project.gradleBuildScript().appendToCocoapodsBlock(""" - framework { - baseName = "kotlin-library" - } - name = "kotlin-library" - podfile = project.file("ios-app/Podfile") - """.trimIndent()) - - hooks.addHook { - assertTasksExecuted(dummyTaskName) - assertTasksExecuted(podInstallTaskName) - } - project.testImport() - - hooks.rewriteHooks { - assertTasksUpToDate(dummyTaskName) - assertTasksUpToDate(podInstallTaskName) - } - project.testImport() - - project.gradleBuildScript().appendToFrameworkBlock("isStatic = true") - - hooks.rewriteHooks { - assertTasksExecuted(dummyTaskName) - assertTasksExecuted(podInstallTaskName) - } - project.testImport() - - hooks.rewriteHooks { - assertTasksUpToDate(dummyTaskName) - assertTasksUpToDate(podInstallTaskName) - } - project.testImport() - } - - - @Test fun basicUTDTest() { val tasks = listOf( diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt index 3372a554af14a..5f761fbe639db 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt @@ -54,9 +54,6 @@ internal class CocoapodsBuildDirs(val project: Project) { val framework: File get() = root.resolve("framework") - val dummyFramework: File - get() = root.resolve("dummy.framework") - val defs: File get() = root.resolve("defs") @@ -395,9 +392,9 @@ open class KotlinCocoapodsPlugin : Plugin { project: Project, cocoapodsExtension: CocoapodsExtension ) { - project.registerTask(DUMMY_FRAMEWORK_TASK_NAME) { task -> - task.frameworkName.set(cocoapodsExtension.podFrameworkName) - task.useStaticFramework.set(cocoapodsExtension.podFrameworkIsStatic) + project.tasks.register(DUMMY_FRAMEWORK_TASK_NAME, DummyFrameworkTask::class.java) { + it.frameworkName = cocoapodsExtension.podFrameworkName + it.useDynamicFramework = cocoapodsExtension.podFrameworkIsStatic.map { isStatic -> !isStatic } } } @@ -405,6 +402,8 @@ open class KotlinCocoapodsPlugin : Plugin { project: Project, cocoapodsExtension: CocoapodsExtension ) { + val dummyFrameworkTaskProvider = project.tasks.named(DUMMY_FRAMEWORK_TASK_NAME) + project.tasks.register(POD_SPEC_TASK_NAME, PodspecTask::class.java) { it.group = TASK_GROUP it.description = "Generates a podspec file for CocoaPods import" @@ -424,6 +423,7 @@ open class KotlinCocoapodsPlugin : Plugin { it.osx = project.provider { cocoapodsExtension.osx } it.tvos = project.provider { cocoapodsExtension.tvos } it.watchos = project.provider { cocoapodsExtension.watchos } + it.dependsOn(dummyFrameworkTaskProvider) val generateWrapper = project.findProperty(GENERATE_WRAPPER_PROPERTY)?.toString()?.toBoolean() ?: false if (generateWrapper) { it.dependsOn(":wrapper") @@ -489,7 +489,6 @@ open class KotlinCocoapodsPlugin : Plugin { cocoapodsExtension: CocoapodsExtension ) { val podspecTaskProvider = project.tasks.named(POD_SPEC_TASK_NAME) - val dummyFrameworkTaskProvider = project.tasks.named(DUMMY_FRAMEWORK_TASK_NAME) project.registerTask(POD_INSTALL_TASK_NAME) { task -> task.group = TASK_GROUP task.description = "Invokes `pod install` call within Podfile location directory" @@ -498,7 +497,6 @@ open class KotlinCocoapodsPlugin : Plugin { task.frameworkName.set(cocoapodsExtension.podFrameworkName) task.specRepos.set(project.provider { cocoapodsExtension.specRepos }) task.pods.set(cocoapodsExtension.pods) - task.dummyFramework.set(dummyFrameworkTaskProvider.map { it.outputFramework.get() }) task.dependsOn(podspecTaskProvider) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/tasks/DummyFrameworkTask.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/tasks/DummyFrameworkTask.kt index 95672b4ba848a..43abe6a06fd25 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/tasks/DummyFrameworkTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/tasks/DummyFrameworkTask.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.gradle.tasks import org.gradle.api.DefaultTask -import org.gradle.api.provider.Property import org.gradle.api.provider.Provider import org.gradle.api.tasks.Input import org.gradle.api.tasks.OutputDirectory @@ -26,20 +25,23 @@ import java.io.File * So we create a dummy static framework to allow CocoaPods install our pod correctly * and then replace it with the real one during a real build process. */ -abstract class DummyFrameworkTask : DefaultTask() { +open class DummyFrameworkTask : DefaultTask() { - @get:Input - abstract val frameworkName: Property + @OutputDirectory + val destinationDir = project.cocoapodsBuildDirs.framework - @get:Input - abstract val useStaticFramework: Property + @Input + lateinit var frameworkName: Provider - @get:OutputDirectory - val outputFramework: Provider = project.provider { project.cocoapodsBuildDirs.dummyFramework } + @Input + lateinit var useDynamicFramework: Provider - private val dummyFrameworkResource: String + private val frameworkDir: File + get() = destinationDir.resolve("${frameworkName.get()}.framework") + + private val dummyFrameworkPath: String get() { - val staticOrDynamic = if (!useStaticFramework.get()) "dynamic" else "static" + val staticOrDynamic = if (useDynamicFramework.get()) "dynamic" else "static" return "/cocoapods/$staticOrDynamic/dummy.framework/" } @@ -65,8 +67,8 @@ abstract class DummyFrameworkTask : DefaultTask() { private fun copyFrameworkFile(relativeFrom: String, relativeTo: String = relativeFrom) = copyResource( - "$dummyFrameworkResource$relativeFrom", - outputFramework.get().resolve(relativeTo) + "$dummyFrameworkPath$relativeFrom", + frameworkDir.resolve(relativeTo) ) private fun copyFrameworkTextFile( @@ -74,15 +76,15 @@ abstract class DummyFrameworkTask : DefaultTask() { relativeTo: String = relativeFrom, transform: (String) -> String = { it } ) = copyTextResource( - "$dummyFrameworkResource$relativeFrom", - outputFramework.get().resolve(relativeTo), + "$dummyFrameworkPath$relativeFrom", + frameworkDir.resolve(relativeTo), transform ) @TaskAction fun create() { // Reset the destination directory - with(outputFramework.get()) { + with(frameworkDir) { deleteRecursively() mkdirs() } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/tasks/PodInstallTask.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/tasks/PodInstallTask.kt index 0ced95e7493e2..7bcc5934facfd 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/tasks/PodInstallTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/tasks/PodInstallTask.kt @@ -33,32 +33,6 @@ abstract class PodInstallTask : AbstractPodInstallTask() { @get:Nested abstract val pods: ListProperty - @get:InputDirectory - abstract val dummyFramework: Property - - private val framework = project.provider { project.cocoapodsBuildDirs.framework.resolve("${frameworkName.get()}.framework") } - private val tmpFramework = dummyFramework.map { dummy -> dummy.parentFile.resolve("tmp.framework").also { it.deleteOnExit() } } - - override fun doPodInstall() { - // We always need to execute 'pod install' with the dummy framework because the one left from a previous build - // may have a wrong linkage type. So we temporarily swap them, run 'pod install' and then swap them back - framework.rename(tmpFramework) - dummyFramework.rename(framework) - super.doPodInstall() - framework.rename(dummyFramework) - tmpFramework.rename(framework) - } - - private fun Provider.rename(dest: Provider) = get().rename(dest.get()) - - private fun File.rename(dest: File) { - if (!exists()) { - mkdirs() - } - - check(renameTo(dest)) { "Can't rename '${this}' to '${dest}'" } - } - override fun handleError(retCode: Int, error: String, process: Process): String? { val specReposMessages = MissingSpecReposMessage(specRepos.get()).missingMessage val cocoapodsMessages = pods.get().map { MissingCocoapodsMessage(it).missingMessage }