KT-49771 - podInstall task is not executed after adding a pod dependency to the shared module

#KT-49771
This commit is contained in:
Viacheslav Kormushkin
2021-11-22 12:08:13 +03:00
committed by Space
parent f48436b35e
commit a695d9bf59
4 changed files with 43 additions and 1 deletions
@@ -52,6 +52,7 @@ class CocoaPodsIT : BaseGradleIT() {
super.defaultBuildOptions().copy(customEnvironmentVariables = getEnvs())
val PODFILE_IMPORT_DIRECTIVE_PLACEHOLDER = "<import_mode_directive>"
val PODFILE_IMPORT_POD_PLACEHOLDER = "#import_pod_directive"
private val cocoapodsSingleKtPod = "native-cocoapods-single"
private val cocoapodsMultipleKtPods = "native-cocoapods-multiple"
@@ -979,6 +980,33 @@ class CocoaPodsIT : BaseGradleIT() {
project.testWithWrapper(":podPublishXCFramework")
}
@Test
fun testPodInstallUpToDateCheck() {
project = getProjectByName(cocoapodsSingleKtPod)
val subProjectName = "kotlin-library"
val subprojectPodImportTask = ":$subProjectName$podImportTaskName"
val subprojectPodspecTask = ":$subProjectName$podspecTaskName"
val subprojectPodInstallTask = ":$subProjectName$podInstallTaskName"
with(project) {
preparePodfile("ios-app", ImportMode.FRAMEWORKS)
build(subprojectPodImportTask, "-Pkotlin.native.cocoapods.generate.wrapper=true") {
assertTasksExecuted(listOf(subprojectPodspecTask, subprojectPodInstallTask))
}
gradleBuildScript(subProjectName).addPod(defaultPodName)
build(subprojectPodImportTask, "-Pkotlin.native.cocoapods.generate.wrapper=true") {
assertTasksExecuted(listOf(subprojectPodspecTask, subprojectPodInstallTask))
}
build(subprojectPodImportTask, "-Pkotlin.native.cocoapods.generate.wrapper=true") {
assertTasksNotExecuted(listOf(subprojectPodspecTask, subprojectPodInstallTask))
}
addPodToPodfile("ios-app", defaultPodName)
build(subprojectPodImportTask, "-Pkotlin.native.cocoapods.generate.wrapper=true") {
assertTasksNotExecuted(listOf(subprojectPodspecTask))
assertTasksExecuted(listOf(subprojectPodInstallTask))
}
}
}
// paths
private fun CompiledProject.url() = externalSources().resolve("url")
@@ -1459,6 +1487,12 @@ class CocoaPodsIT : BaseGradleIT() {
}
}
private fun Project.addPodToPodfile(iosAppLocation: String, pod: String) {
val iosAppDir = projectDir.resolve(iosAppLocation)
iosAppDir.resolve("Podfile").takeIf { it.exists() }?.modify {
it.replace(PODFILE_IMPORT_POD_PLACEHOLDER, "pod '$pod'")
}
}
private fun kotlinLibraryPodspecContent(frameworkName: String? = null) = """
Pod::Spec.new do |spec|
@@ -6,4 +6,5 @@ target 'ios-app' do
pod 'pod_dependency', :path => '../pod_dependency'
pod 'subspec_dependency', :path => '../subspec_dependency'
pod 'kotlin_library', :path => '../kotlin-library'
#import_pod_directive
end
@@ -397,6 +397,7 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
it.group = TASK_GROUP
it.description = "Invokes `pod install` call within Podfile location directory"
it.podfile.set(cocoapodsExtension.podfile)
it.podspec.set(podspecTaskProvider.map { podspecTask -> podspecTask.outputFile })
it.frameworkName = project.provider { cocoapodsExtension.frameworkNameInternal }
it.dependsOn(podspecTaskProvider)
}
@@ -56,9 +56,15 @@ open class PodInstallTask : DefaultTask() {
internal lateinit var frameworkName: Provider<String>
@get:Optional
@get:Input
@get:PathSensitive(PathSensitivity.ABSOLUTE)
@get:InputFile
internal val podfile = project.objects.property(File::class.java)
@get:Optional
@get:PathSensitive(PathSensitivity.ABSOLUTE)
@get:InputFile
internal val podspec = project.objects.property(File::class.java)
@get:Optional
@get:OutputDirectory
internal val podsXcodeProjDirProvider: Provider<File>?