Skip to content

Commit

Permalink
Revert "[Gradle] Fix invalidating iOS framework after import"
Browse files Browse the repository at this point in the history
This reverts commit c2e092f.
  • Loading branch information
daugeldauge authored and Space Team committed Jun 23, 2023
1 parent 8cf1abc commit 56a7789
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 118 deletions.
Expand Up @@ -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(
Expand Down
Expand Up @@ -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")

Expand Down Expand Up @@ -395,16 +392,18 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
project: Project,
cocoapodsExtension: CocoapodsExtension
) {
project.registerTask<DummyFrameworkTask>(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 }
}
}

private fun registerPodspecTask(
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"
Expand All @@ -424,6 +423,7 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
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")
Expand Down Expand Up @@ -489,7 +489,6 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
cocoapodsExtension: CocoapodsExtension
) {
val podspecTaskProvider = project.tasks.named<PodspecTask>(POD_SPEC_TASK_NAME)
val dummyFrameworkTaskProvider = project.tasks.named<DummyFrameworkTask>(DUMMY_FRAMEWORK_TASK_NAME)
project.registerTask<PodInstallTask>(POD_INSTALL_TASK_NAME) { task ->
task.group = TASK_GROUP
task.description = "Invokes `pod install` call within Podfile location directory"
Expand All @@ -498,7 +497,6 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
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)
}
}
Expand Down
Expand Up @@ -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
Expand All @@ -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<String>
@OutputDirectory
val destinationDir = project.cocoapodsBuildDirs.framework

@get:Input
abstract val useStaticFramework: Property<Boolean>
@Input
lateinit var frameworkName: Provider<String>

@get:OutputDirectory
val outputFramework: Provider<File> = project.provider { project.cocoapodsBuildDirs.dummyFramework }
@Input
lateinit var useDynamicFramework: Provider<Boolean>

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/"
}

Expand All @@ -65,24 +67,24 @@ 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(
relativeFrom: String,
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()
}
Expand Down
Expand Up @@ -33,32 +33,6 @@ abstract class PodInstallTask : AbstractPodInstallTask() {
@get:Nested
abstract val pods: ListProperty<CocoapodsDependency>

@get:InputDirectory
abstract val dummyFramework: Property<File>

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<File>.rename(dest: Provider<File>) = 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 }
Expand Down

0 comments on commit 56a7789

Please sign in to comment.