[KT-53340] Cocoapods: use framework name and linking type providers.
Providers don't require synchronization between real framework attribute and local value.
This commit is contained in:
committed by
Space
parent
2a43247a8f
commit
02e192c08a
+14
-6
@@ -10,9 +10,11 @@ import org.gradle.api.Action
|
|||||||
import org.gradle.api.Named
|
import org.gradle.api.Named
|
||||||
import org.gradle.api.NamedDomainObjectSet
|
import org.gradle.api.NamedDomainObjectSet
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
|
import org.gradle.api.provider.Provider
|
||||||
import org.gradle.api.tasks.*
|
import org.gradle.api.tasks.*
|
||||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
|
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
|
||||||
import org.jetbrains.kotlin.gradle.plugin.cocoapods.CocoapodsExtension.CocoapodsDependency.PodLocation.*
|
import org.jetbrains.kotlin.gradle.plugin.cocoapods.CocoapodsExtension.CocoapodsDependency.PodLocation.*
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.cocoapods.KotlinCocoapodsPlugin.Companion.POD_FRAMEWORK_PREFIX
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.Framework
|
import org.jetbrains.kotlin.gradle.plugin.mpp.Framework
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBinary
|
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBinary
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType
|
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType
|
||||||
@@ -113,16 +115,24 @@ abstract class CocoapodsExtension @Inject constructor(private val project: Proje
|
|||||||
*/
|
*/
|
||||||
@Deprecated("Use 'baseName' property within framework{} block to configure framework name")
|
@Deprecated("Use 'baseName' property within framework{} block to configure framework name")
|
||||||
var frameworkName: String
|
var frameworkName: String
|
||||||
get() = frameworkNameInternal
|
get() = podFrameworkName.get()
|
||||||
set(value) {
|
set(value) {
|
||||||
configureRegisteredFrameworks {
|
configureRegisteredFrameworks {
|
||||||
baseName = value
|
baseName = value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal var frameworkNameInternal: String = project.name.asValidFrameworkName()
|
private val anyPodFramework = project.provider {
|
||||||
|
val anyTarget = project.multiplatformExtension.supportedTargets().first()
|
||||||
|
val anyFramework = anyTarget.binaries
|
||||||
|
.matching { it.name.startsWith(POD_FRAMEWORK_PREFIX) }
|
||||||
|
.withType(Framework::class.java)
|
||||||
|
.first()
|
||||||
|
anyFramework
|
||||||
|
}
|
||||||
|
|
||||||
internal var useDynamicFramework: Boolean = false
|
internal val podFrameworkName = anyPodFramework.map { it.baseName }
|
||||||
|
internal val podFrameworkIsStatic = anyPodFramework.map { it.isStatic }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configure custom Xcode Configurations to Native Build Types mapping
|
* Configure custom Xcode Configurations to Native Build Types mapping
|
||||||
@@ -244,9 +254,7 @@ abstract class CocoapodsExtension @Inject constructor(private val project: Proje
|
|||||||
project.multiplatformExtension.supportedTargets().all { target ->
|
project.multiplatformExtension.supportedTargets().all { target ->
|
||||||
target.binaries.withType(Framework::class.java) { framework ->
|
target.binaries.withType(Framework::class.java) { framework ->
|
||||||
framework.configure()
|
framework.configure()
|
||||||
frameworkNameInternal = framework.baseName
|
if (!framework.isStatic) {
|
||||||
useDynamicFramework = framework.isStatic.not()
|
|
||||||
if (useDynamicFramework) {
|
|
||||||
configureLinkingOptions(framework)
|
configureLinkingOptions(framework)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+10
-13
@@ -20,10 +20,7 @@ import org.jetbrains.kotlin.gradle.plugin.addExtension
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.cocoapods.CocoapodsExtension.CocoapodsDependency
|
import org.jetbrains.kotlin.gradle.plugin.cocoapods.CocoapodsExtension.CocoapodsDependency
|
||||||
import org.jetbrains.kotlin.gradle.plugin.ide.Idea222Api
|
import org.jetbrains.kotlin.gradle.plugin.ide.Idea222Api
|
||||||
import org.jetbrains.kotlin.gradle.plugin.ide.ideaImportDependsOn
|
import org.jetbrains.kotlin.gradle.plugin.ide.ideaImportDependsOn
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.Framework
|
import org.jetbrains.kotlin.gradle.plugin.mpp.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.TestExecutable
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.AppleSdk
|
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.AppleSdk
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.AppleTarget
|
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.AppleTarget
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XCFrameworkTask
|
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XCFrameworkTask
|
||||||
@@ -155,7 +152,7 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
|
|||||||
private fun createDefaultFrameworks(kotlinExtension: KotlinMultiplatformExtension, cocoapodsExtension: CocoapodsExtension) {
|
private fun createDefaultFrameworks(kotlinExtension: KotlinMultiplatformExtension, cocoapodsExtension: CocoapodsExtension) {
|
||||||
kotlinExtension.supportedTargets().all { target ->
|
kotlinExtension.supportedTargets().all { target ->
|
||||||
target.binaries.framework(POD_FRAMEWORK_PREFIX) {
|
target.binaries.framework(POD_FRAMEWORK_PREFIX) {
|
||||||
baseName = cocoapodsExtension.frameworkNameInternal
|
baseName = project.name.asValidFrameworkName()
|
||||||
setIsStaticSilently(true)
|
setIsStaticSilently(true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -296,7 +293,7 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
|
|||||||
|
|
||||||
check(requestedBuildType != null) {
|
check(requestedBuildType != null) {
|
||||||
"""
|
"""
|
||||||
Could not identify build type for Kotlin framework '${cocoapodsExtension.frameworkNameInternal}' built via cocoapods plugin with CONFIGURATION=$xcodeConfiguration.
|
Could not identify build type for Kotlin framework '${cocoapodsExtension.podFrameworkName.get()}' built via cocoapods plugin with CONFIGURATION=$xcodeConfiguration.
|
||||||
Add xcodeConfigurationToNativeBuildType["$xcodeConfiguration"]=NativeBuildType.DEBUG or xcodeConfigurationToNativeBuildType["$xcodeConfiguration"]=NativeBuildType.RELEASE to cocoapods plugin configuration
|
Add xcodeConfigurationToNativeBuildType["$xcodeConfiguration"]=NativeBuildType.DEBUG or xcodeConfigurationToNativeBuildType["$xcodeConfiguration"]=NativeBuildType.RELEASE to cocoapods plugin configuration
|
||||||
""".trimIndent()
|
""".trimIndent()
|
||||||
}
|
}
|
||||||
@@ -377,8 +374,8 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
|
|||||||
cocoapodsExtension: CocoapodsExtension
|
cocoapodsExtension: CocoapodsExtension
|
||||||
) {
|
) {
|
||||||
project.tasks.register(DUMMY_FRAMEWORK_TASK_NAME, DummyFrameworkTask::class.java) {
|
project.tasks.register(DUMMY_FRAMEWORK_TASK_NAME, DummyFrameworkTask::class.java) {
|
||||||
it.frameworkName = project.provider { cocoapodsExtension.frameworkNameInternal }
|
it.frameworkName = cocoapodsExtension.podFrameworkName
|
||||||
it.useDynamicFramework = project.provider { cocoapodsExtension.useDynamicFramework }
|
it.useDynamicFramework = cocoapodsExtension.podFrameworkIsStatic.map { isStatic -> !isStatic }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -402,7 +399,7 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
|
|||||||
it.license.set(cocoapodsExtension.license)
|
it.license.set(cocoapodsExtension.license)
|
||||||
it.authors.set(cocoapodsExtension.authors)
|
it.authors.set(cocoapodsExtension.authors)
|
||||||
it.summary.set(cocoapodsExtension.summary)
|
it.summary.set(cocoapodsExtension.summary)
|
||||||
it.frameworkName = project.provider { cocoapodsExtension.frameworkNameInternal }
|
it.frameworkName = cocoapodsExtension.podFrameworkName
|
||||||
it.ios = project.provider { cocoapodsExtension.ios }
|
it.ios = project.provider { cocoapodsExtension.ios }
|
||||||
it.osx = project.provider { cocoapodsExtension.osx }
|
it.osx = project.provider { cocoapodsExtension.osx }
|
||||||
it.tvos = project.provider { cocoapodsExtension.tvos }
|
it.tvos = project.provider { cocoapodsExtension.tvos }
|
||||||
@@ -425,7 +422,7 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
|
|||||||
it.description = "Invokes `pod install` call within Podfile location directory"
|
it.description = "Invokes `pod install` call within Podfile location directory"
|
||||||
it.podfile.set(cocoapodsExtension.podfile)
|
it.podfile.set(cocoapodsExtension.podfile)
|
||||||
it.podspec.set(podspecTaskProvider.map { podspecTask -> podspecTask.outputFile })
|
it.podspec.set(podspecTaskProvider.map { podspecTask -> podspecTask.outputFile })
|
||||||
it.frameworkName = project.provider { cocoapodsExtension.frameworkNameInternal }
|
it.frameworkName = cocoapodsExtension.podFrameworkName
|
||||||
it.dependsOn(podspecTaskProvider)
|
it.dependsOn(podspecTaskProvider)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -495,7 +492,7 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
|
|||||||
it.pod = project.provider { pod }
|
it.pod = project.provider { pod }
|
||||||
it.sdk = project.provider { sdk }
|
it.sdk = project.provider { sdk }
|
||||||
it.podsXcodeProjDir = podGenTaskProvider.map { podGen -> podGen.podsXcodeProjDir.get() }
|
it.podsXcodeProjDir = podGenTaskProvider.map { podGen -> podGen.podsXcodeProjDir.get() }
|
||||||
it.frameworkName = project.provider { cocoapodsExtension.frameworkNameInternal }
|
it.frameworkName = cocoapodsExtension.podFrameworkName
|
||||||
it.dependsOn(podGenTaskProvider)
|
it.dependsOn(podGenTaskProvider)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -589,7 +586,7 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
|
|||||||
}
|
}
|
||||||
task.outputDir = cocoapodsExtension.publishDir
|
task.outputDir = cocoapodsExtension.publishDir
|
||||||
task.buildType = buildType
|
task.buildType = buildType
|
||||||
task.baseName = project.provider { cocoapodsExtension.frameworkNameInternal }
|
task.baseName = cocoapodsExtension.podFrameworkName
|
||||||
task.description = "Produces ${buildType.getName().capitalize()} XCFramework for all requested targets"
|
task.description = "Produces ${buildType.getName().capitalize()} XCFramework for all requested targets"
|
||||||
task.group = TASK_GROUP
|
task.group = TASK_GROUP
|
||||||
}
|
}
|
||||||
@@ -617,7 +614,7 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
|
|||||||
task.authors.set(cocoapodsExtension.authors)
|
task.authors.set(cocoapodsExtension.authors)
|
||||||
task.summary.set(cocoapodsExtension.summary)
|
task.summary.set(cocoapodsExtension.summary)
|
||||||
task.source.set(cocoapodsExtension.source)
|
task.source.set(cocoapodsExtension.source)
|
||||||
task.frameworkName = provider { cocoapodsExtension.frameworkNameInternal }
|
task.frameworkName = cocoapodsExtension.podFrameworkName
|
||||||
task.ios = provider { cocoapodsExtension.ios }
|
task.ios = provider { cocoapodsExtension.ios }
|
||||||
task.osx = provider { cocoapodsExtension.osx }
|
task.osx = provider { cocoapodsExtension.osx }
|
||||||
task.tvos = provider { cocoapodsExtension.tvos }
|
task.tvos = provider { cocoapodsExtension.tvos }
|
||||||
|
|||||||
Reference in New Issue
Block a user