@@ -62,7 +62,7 @@ internal class CocoapodsBuildDirs(val project: Project) {
62
62
val synthetic: File
63
63
get() = root.resolve(" synthetic" )
64
64
65
- fun synthetic (family : Family ) = synthetic.resolve(family.name )
65
+ fun synthetic (family : Family ) = synthetic.resolve(family.platformLiteral )
66
66
67
67
val publish: File = root.resolve(" publish" )
68
68
@@ -72,11 +72,20 @@ internal class CocoapodsBuildDirs(val project: Project) {
72
72
73
73
internal fun String.asValidFrameworkName () = replace(' -' , ' _' )
74
74
75
+ internal val Family .platformLiteral: String
76
+ get() = when (this ) {
77
+ Family .OSX -> " macos"
78
+ Family .IOS -> " ios"
79
+ Family .TVOS -> " tvos"
80
+ Family .WATCHOS -> " watchos"
81
+ else -> throw IllegalArgumentException (" Bad family ${this .name} " )
82
+ }
83
+
75
84
private val Family .toPodGenTaskName: String
76
- get() = lowerCamelCaseName(
77
- KotlinCocoapodsPlugin . POD_GEN_TASK_NAME ,
78
- name
79
- )
85
+ get() = lowerCamelCaseName(KotlinCocoapodsPlugin . POD_GEN_TASK_NAME , platformLiteral)
86
+
87
+ private val Family .toPodInstallSyntheticTaskName : String
88
+ get() = lowerCamelCaseName( KotlinCocoapodsPlugin . POD_INSTALL_TASK_NAME , " synthetic " , platformLiteral )
80
89
81
90
private fun String.toSetupBuildTaskName (pod : CocoapodsDependency ): String = lowerCamelCaseName(
82
91
KotlinCocoapodsPlugin .POD_SETUP_BUILD_TASK_NAME ,
@@ -451,23 +460,25 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
451
460
project : Project ,
452
461
cocoapodsExtension : CocoapodsExtension
453
462
) {
454
- val podspecTaskProvider = project.tasks.named(POD_SPEC_TASK_NAME , PodspecTask ::class .java)
455
- project.tasks.register(POD_INSTALL_TASK_NAME , PodInstallTask ::class .java) {
456
- it.group = TASK_GROUP
457
- it.description = " Invokes `pod install` call within Podfile location directory"
458
- it.podfile.set(cocoapodsExtension.podfile)
459
- it.podspec.set(podspecTaskProvider.map { podspecTask -> podspecTask.outputFile })
460
- it.frameworkName = cocoapodsExtension.podFrameworkName
461
- it.dependsOn(podspecTaskProvider)
463
+ val podspecTaskProvider = project.tasks.named<PodspecTask >(POD_SPEC_TASK_NAME )
464
+ project.registerTask<PodInstallTask >(POD_INSTALL_TASK_NAME ) { task ->
465
+ task.group = TASK_GROUP
466
+ task.description = " Invokes `pod install` call within Podfile location directory"
467
+ task.podfile.set(project.provider { cocoapodsExtension.podfile })
468
+ task.podspec.set(podspecTaskProvider.map { it.outputFile })
469
+ task.frameworkName.set(cocoapodsExtension.podFrameworkName)
470
+ task.specRepos.set(project.provider { cocoapodsExtension.specRepos })
471
+ task.pods.set(cocoapodsExtension.pods)
472
+ task.dependsOn(podspecTaskProvider)
462
473
}
463
474
}
464
475
465
- private fun registerPodGenTask (
476
+ private fun registerSyntheticPodTasks (
466
477
project : Project , kotlinExtension : KotlinMultiplatformExtension , cocoapodsExtension : CocoapodsExtension
467
478
) {
468
479
val families = mutableSetOf<Family >()
469
480
470
- val podspecTaskProvider = project.tasks.named(POD_SPEC_TASK_NAME , PodspecTask :: class .java )
481
+ val podspecTaskProvider = project.tasks.named< PodspecTask > (POD_SPEC_TASK_NAME )
471
482
kotlinExtension.supportedTargets().all { target ->
472
483
val family = target.konanTarget.family
473
484
if (family in families) {
@@ -483,15 +494,23 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
483
494
else -> error(" Unknown cocoapods platform: $family " )
484
495
}
485
496
486
- project.tasks.register(family.toPodGenTaskName, PodGenTask ::class .java) {
487
- it.description = " Сreates a synthetic Xcode project to retrieve CocoaPods dependencies"
488
- it.podspec = podspecTaskProvider.map { task -> task.outputFile }
489
- it.podName = project.provider { cocoapodsExtension.name }
490
- it.useLibraries = project.provider { cocoapodsExtension.useLibraries }
491
- it.specRepos = project.provider { cocoapodsExtension.specRepos }
492
- it.family = family
493
- it.platformSettings = platformSettings
494
- it.pods.set(cocoapodsExtension.pods)
497
+ val podGenTask = project.registerTask<PodGenTask >(family.toPodGenTaskName) { task ->
498
+ task.description = " Сreates a synthetic Xcode project to retrieve CocoaPods dependencies"
499
+ task.podspec = podspecTaskProvider.map { it.outputFile }
500
+ task.podName = project.provider { cocoapodsExtension.name }
501
+ task.useLibraries = project.provider { cocoapodsExtension.useLibraries }
502
+ task.specRepos = project.provider { cocoapodsExtension.specRepos }
503
+ task.family = family
504
+ task.platformSettings = platformSettings
505
+ task.pods.set(cocoapodsExtension.pods)
506
+ }
507
+
508
+ project.registerTask<PodInstallSyntheticTask >(family.toPodInstallSyntheticTaskName) { task ->
509
+ task.description = " Invokes `pod install` for synthetic project"
510
+ task.podfile.set(podGenTask.map { it.podfile.get() })
511
+ task.family.set(family)
512
+ task.podName.set(cocoapodsExtension.name)
513
+ task.dependsOn(podGenTask)
495
514
}
496
515
}
497
516
}
@@ -520,15 +539,15 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
520
539
}
521
540
sdks + = sdk
522
541
523
- val podGenTaskProvider = project.tasks.named(target.konanTarget.family.toPodGenTaskName, PodGenTask :: class .java )
524
- project.tasks.register (sdk.toSetupBuildTaskName(pod), PodSetupBuildTask :: class .java ) {
525
- it .group = TASK_GROUP
526
- it .description = " Collect environment variables from .xcworkspace file"
527
- it .pod = project.provider { pod }
528
- it .sdk = project.provider { sdk }
529
- it .podsXcodeProjDir = podGenTaskProvider .map { podGen -> podGen.podsXcodeProjDir .get() }
530
- it .frameworkName = cocoapodsExtension.podFrameworkName
531
- it .dependsOn(podGenTaskProvider )
542
+ val podInstallTask = project.tasks.named< PodInstallSyntheticTask > (target.konanTarget.family.toPodInstallSyntheticTaskName )
543
+ project.registerTask< PodSetupBuildTask > (sdk.toSetupBuildTaskName(pod)) { task ->
544
+ task .group = TASK_GROUP
545
+ task .description = " Collect environment variables from .xcworkspace file"
546
+ task .pod = project.provider { pod }
547
+ task .sdk = project.provider { sdk }
548
+ task .podsXcodeProjDir = podInstallTask .map { it.podsXcodeProjDirProvider .get() }
549
+ task .frameworkName = cocoapodsExtension.podFrameworkName
550
+ task .dependsOn(podInstallTask )
532
551
}
533
552
}
534
553
}
@@ -772,7 +791,7 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
772
791
injectPodspecExtensionToArtifacts(project, kotlinArtifactsExtension, cocoapodsExtension)
773
792
registerPodspecTask(project, cocoapodsExtension)
774
793
775
- registerPodGenTask (project, kotlinExtension, cocoapodsExtension)
794
+ registerSyntheticPodTasks (project, kotlinExtension, cocoapodsExtension)
776
795
registerPodInstallTask(project, cocoapodsExtension)
777
796
registerPodSetupBuildTasks(project, kotlinExtension, cocoapodsExtension)
778
797
registerPodBuildTasks(project, kotlinExtension, cocoapodsExtension)
0 commit comments