Skip to content

Commit 56a7789

Browse files
daugeldaugeSpace Team
authored and
Space Team
committed
Revert "[Gradle] Fix invalidating iOS framework after import"
This reverts commit c2e092f.
1 parent 8cf1abc commit 56a7789

File tree

4 files changed

+23
-118
lines changed

4 files changed

+23
-118
lines changed

libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/native/CocoaPodsIT.kt

-69
Original file line numberDiff line numberDiff line change
@@ -424,75 +424,6 @@ class CocoaPodsIT : BaseGradleIT() {
424424
project.testWithWrapper(dummyTaskName)
425425
}
426426

427-
@Test
428-
fun testImportUTDAfterLinkingFramework() {
429-
val linkTaskName = ":linkPodDebugFrameworkIOS"
430-
project.gradleBuildScript().appendToCocoapodsBlock("""
431-
framework {
432-
baseName = "kotlin-library"
433-
}
434-
name = "kotlin-library"
435-
podfile = project.file("ios-app/Podfile")
436-
""".trimIndent())
437-
438-
439-
hooks.addHook {
440-
assertTasksExecuted(dummyTaskName)
441-
assertTasksExecuted(podInstallTaskName)
442-
}
443-
project.testImport()
444-
445-
hooks.rewriteHooks {
446-
assertTasksExecuted(linkTaskName)
447-
}
448-
project.testWithWrapper(linkTaskName)
449-
450-
hooks.rewriteHooks {
451-
assertTasksUpToDate(dummyTaskName)
452-
assertTasksUpToDate(podInstallTaskName)
453-
}
454-
project.testImport()
455-
}
456-
457-
@Test
458-
fun testChangeFrameworkTypeUTD() {
459-
project.gradleBuildScript().appendToCocoapodsBlock("""
460-
framework {
461-
baseName = "kotlin-library"
462-
}
463-
name = "kotlin-library"
464-
podfile = project.file("ios-app/Podfile")
465-
""".trimIndent())
466-
467-
hooks.addHook {
468-
assertTasksExecuted(dummyTaskName)
469-
assertTasksExecuted(podInstallTaskName)
470-
}
471-
project.testImport()
472-
473-
hooks.rewriteHooks {
474-
assertTasksUpToDate(dummyTaskName)
475-
assertTasksUpToDate(podInstallTaskName)
476-
}
477-
project.testImport()
478-
479-
project.gradleBuildScript().appendToFrameworkBlock("isStatic = true")
480-
481-
hooks.rewriteHooks {
482-
assertTasksExecuted(dummyTaskName)
483-
assertTasksExecuted(podInstallTaskName)
484-
}
485-
project.testImport()
486-
487-
hooks.rewriteHooks {
488-
assertTasksUpToDate(dummyTaskName)
489-
assertTasksUpToDate(podInstallTaskName)
490-
}
491-
project.testImport()
492-
}
493-
494-
495-
496427
@Test
497428
fun basicUTDTest() {
498429
val tasks = listOf(

libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt

+6-8
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,6 @@ internal class CocoapodsBuildDirs(val project: Project) {
5454
val framework: File
5555
get() = root.resolve("framework")
5656

57-
val dummyFramework: File
58-
get() = root.resolve("dummy.framework")
59-
6057
val defs: File
6158
get() = root.resolve("defs")
6259

@@ -395,16 +392,18 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
395392
project: Project,
396393
cocoapodsExtension: CocoapodsExtension
397394
) {
398-
project.registerTask<DummyFrameworkTask>(DUMMY_FRAMEWORK_TASK_NAME) { task ->
399-
task.frameworkName.set(cocoapodsExtension.podFrameworkName)
400-
task.useStaticFramework.set(cocoapodsExtension.podFrameworkIsStatic)
395+
project.tasks.register(DUMMY_FRAMEWORK_TASK_NAME, DummyFrameworkTask::class.java) {
396+
it.frameworkName = cocoapodsExtension.podFrameworkName
397+
it.useDynamicFramework = cocoapodsExtension.podFrameworkIsStatic.map { isStatic -> !isStatic }
401398
}
402399
}
403400

404401
private fun registerPodspecTask(
405402
project: Project,
406403
cocoapodsExtension: CocoapodsExtension
407404
) {
405+
val dummyFrameworkTaskProvider = project.tasks.named(DUMMY_FRAMEWORK_TASK_NAME)
406+
408407
project.tasks.register(POD_SPEC_TASK_NAME, PodspecTask::class.java) {
409408
it.group = TASK_GROUP
410409
it.description = "Generates a podspec file for CocoaPods import"
@@ -424,6 +423,7 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
424423
it.osx = project.provider { cocoapodsExtension.osx }
425424
it.tvos = project.provider { cocoapodsExtension.tvos }
426425
it.watchos = project.provider { cocoapodsExtension.watchos }
426+
it.dependsOn(dummyFrameworkTaskProvider)
427427
val generateWrapper = project.findProperty(GENERATE_WRAPPER_PROPERTY)?.toString()?.toBoolean() ?: false
428428
if (generateWrapper) {
429429
it.dependsOn(":wrapper")
@@ -489,7 +489,6 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
489489
cocoapodsExtension: CocoapodsExtension
490490
) {
491491
val podspecTaskProvider = project.tasks.named<PodspecTask>(POD_SPEC_TASK_NAME)
492-
val dummyFrameworkTaskProvider = project.tasks.named<DummyFrameworkTask>(DUMMY_FRAMEWORK_TASK_NAME)
493492
project.registerTask<PodInstallTask>(POD_INSTALL_TASK_NAME) { task ->
494493
task.group = TASK_GROUP
495494
task.description = "Invokes `pod install` call within Podfile location directory"
@@ -498,7 +497,6 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
498497
task.frameworkName.set(cocoapodsExtension.podFrameworkName)
499498
task.specRepos.set(project.provider { cocoapodsExtension.specRepos })
500499
task.pods.set(cocoapodsExtension.pods)
501-
task.dummyFramework.set(dummyFrameworkTaskProvider.map { it.outputFramework.get() })
502500
task.dependsOn(podspecTaskProvider)
503501
}
504502
}

libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/tasks/DummyFrameworkTask.kt

+17-15
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
package org.jetbrains.kotlin.gradle.tasks
88

99
import org.gradle.api.DefaultTask
10-
import org.gradle.api.provider.Property
1110
import org.gradle.api.provider.Provider
1211
import org.gradle.api.tasks.Input
1312
import org.gradle.api.tasks.OutputDirectory
@@ -26,20 +25,23 @@ import java.io.File
2625
* So we create a dummy static framework to allow CocoaPods install our pod correctly
2726
* and then replace it with the real one during a real build process.
2827
*/
29-
abstract class DummyFrameworkTask : DefaultTask() {
28+
open class DummyFrameworkTask : DefaultTask() {
3029

31-
@get:Input
32-
abstract val frameworkName: Property<String>
30+
@OutputDirectory
31+
val destinationDir = project.cocoapodsBuildDirs.framework
3332

34-
@get:Input
35-
abstract val useStaticFramework: Property<Boolean>
33+
@Input
34+
lateinit var frameworkName: Provider<String>
3635

37-
@get:OutputDirectory
38-
val outputFramework: Provider<File> = project.provider { project.cocoapodsBuildDirs.dummyFramework }
36+
@Input
37+
lateinit var useDynamicFramework: Provider<Boolean>
3938

40-
private val dummyFrameworkResource: String
39+
private val frameworkDir: File
40+
get() = destinationDir.resolve("${frameworkName.get()}.framework")
41+
42+
private val dummyFrameworkPath: String
4143
get() {
42-
val staticOrDynamic = if (!useStaticFramework.get()) "dynamic" else "static"
44+
val staticOrDynamic = if (useDynamicFramework.get()) "dynamic" else "static"
4345
return "/cocoapods/$staticOrDynamic/dummy.framework/"
4446
}
4547

@@ -65,24 +67,24 @@ abstract class DummyFrameworkTask : DefaultTask() {
6567

6668
private fun copyFrameworkFile(relativeFrom: String, relativeTo: String = relativeFrom) =
6769
copyResource(
68-
"$dummyFrameworkResource$relativeFrom",
69-
outputFramework.get().resolve(relativeTo)
70+
"$dummyFrameworkPath$relativeFrom",
71+
frameworkDir.resolve(relativeTo)
7072
)
7173

7274
private fun copyFrameworkTextFile(
7375
relativeFrom: String,
7476
relativeTo: String = relativeFrom,
7577
transform: (String) -> String = { it }
7678
) = copyTextResource(
77-
"$dummyFrameworkResource$relativeFrom",
78-
outputFramework.get().resolve(relativeTo),
79+
"$dummyFrameworkPath$relativeFrom",
80+
frameworkDir.resolve(relativeTo),
7981
transform
8082
)
8183

8284
@TaskAction
8385
fun create() {
8486
// Reset the destination directory
85-
with(outputFramework.get()) {
87+
with(frameworkDir) {
8688
deleteRecursively()
8789
mkdirs()
8890
}

libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/tasks/PodInstallTask.kt

-26
Original file line numberDiff line numberDiff line change
@@ -33,32 +33,6 @@ abstract class PodInstallTask : AbstractPodInstallTask() {
3333
@get:Nested
3434
abstract val pods: ListProperty<CocoapodsDependency>
3535

36-
@get:InputDirectory
37-
abstract val dummyFramework: Property<File>
38-
39-
private val framework = project.provider { project.cocoapodsBuildDirs.framework.resolve("${frameworkName.get()}.framework") }
40-
private val tmpFramework = dummyFramework.map { dummy -> dummy.parentFile.resolve("tmp.framework").also { it.deleteOnExit() } }
41-
42-
override fun doPodInstall() {
43-
// We always need to execute 'pod install' with the dummy framework because the one left from a previous build
44-
// may have a wrong linkage type. So we temporarily swap them, run 'pod install' and then swap them back
45-
framework.rename(tmpFramework)
46-
dummyFramework.rename(framework)
47-
super.doPodInstall()
48-
framework.rename(dummyFramework)
49-
tmpFramework.rename(framework)
50-
}
51-
52-
private fun Provider<File>.rename(dest: Provider<File>) = get().rename(dest.get())
53-
54-
private fun File.rename(dest: File) {
55-
if (!exists()) {
56-
mkdirs()
57-
}
58-
59-
check(renameTo(dest)) { "Can't rename '${this}' to '${dest}'" }
60-
}
61-
6236
override fun handleError(retCode: Int, error: String, process: Process): String? {
6337
val specReposMessages = MissingSpecReposMessage(specRepos.get()).missingMessage
6438
val cocoapodsMessages = pods.get().map { MissingCocoapodsMessage(it).missingMessage }

0 commit comments

Comments
 (0)