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 db356da05ca..f7aeb9dbaed 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 @@ -28,6 +28,14 @@ import kotlin.test.assertEquals import kotlin.test.assertTrue import kotlin.test.fail +private val String.validFrameworkName: String + get() = replace('-', '_') +private val invalidTaskNameCharacters = "[/\\\\:<>\"?*|]".toRegex() + +private val String.validTaskName + get() = replace(invalidTaskNameCharacters, "_") + + class CocoaPodsIT : BaseGradleIT() { override val defaultGradleVersion: GradleVersionRequired @@ -220,6 +228,15 @@ class CocoaPodsIT : BaseGradleIT() { doTestGit(branch = "2974") } + @Test + fun testPodDownloadGitSubspec() { + doTestGit( + repo = "https://github.com/SDWebImage/SDWebImage.git", + pod = "SDWebImage/MapKit", + tag = "5.9.2" + ) + } + @Test fun testPodDownloadGitBranchAndCommit() { val branch = "2974" @@ -931,10 +948,11 @@ class CocoaPodsIT : BaseGradleIT() { branchName: String? = null, commitName: String? = null, tagName: String? = null, - aPodDownloadName: String = defaultPodName + aPodDownloadName: String = defaultPodName, + podspecName: String = aPodDownloadName.split("/")[0] ) { - val gitDir = git().resolve(aPodDownloadName) - val podspecFile = gitDir.resolve("$aPodDownloadName.podspec") + val gitDir = git().resolve(aPodDownloadName.validTaskName) + val podspecFile = gitDir.resolve("$podspecName.podspec") assertTrue(podspecFile.exists()) if (tagName != null) { checkTag(gitDir, tagName) @@ -1199,8 +1217,6 @@ class CocoaPodsIT : BaseGradleIT() { } } - private val String.validFrameworkName: String - get() = replace('-', '_') private fun kotlinLibraryPodspecContent(frameworkName: String? = null) = """ Pod::Spec.new do |spec| diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt index 31b70f1e6a4..5f16b71783b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt @@ -72,20 +72,20 @@ private val Family.toPodGenTaskName: String private fun String.toSetupBuildTaskName(pod: CocoapodsDependency): String = lowerCamelCaseName( KotlinCocoapodsPlugin.POD_SETUP_BUILD_TASK_NAME, - pod.schemeName, + pod.name.asValidTaskName(), this ) private fun String.toBuildDependenciesTaskName(pod: CocoapodsDependency): String = lowerCamelCaseName( KotlinCocoapodsPlugin.POD_BUILD_TASK_NAME, - pod.schemeName, + pod.name.asValidTaskName(), this ) private val CocoapodsDependency.toPodDownloadTaskName: String get() = lowerCamelCaseName( KotlinCocoapodsPlugin.POD_DOWNLOAD_TASK_NAME, - name + name.asValidTaskName() ) open class KotlinCocoapodsPlugin : Plugin { @@ -375,11 +375,11 @@ open class KotlinCocoapodsPlugin : Plugin { val podSource = pod.source val downloadPodTask = when (podSource) { is Git -> project.tasks.register(pod.toPodDownloadTaskName, PodDownloadGitTask::class.java) { - it.podName = project.provider { pod.name } + it.podName = project.provider { pod.name.asValidTaskName() } it.podSource = project.provider { podSource as Git } } is Url -> project.tasks.register(pod.toPodDownloadTaskName, PodDownloadUrlTask::class.java) { - it.podName = project.provider { pod.name } + it.podName = project.provider { pod.name.asValidTaskName() } it.podSource = project.provider { podSource as Url } } else -> return@all