Expose some methods and properties related to Cocoapods dependencies to access them in Apple gradle plugin

This commit is contained in:
konrad.sztenderski
2021-04-20 16:04:43 +02:00
committed by Florian Kistner
parent 81b09ca09f
commit e338c5651b
2 changed files with 22 additions and 18 deletions
@@ -75,6 +75,9 @@ private fun String.toSetupBuildTaskName(pod: CocoapodsDependency): String = lowe
this this
) )
fun KotlinNativeTarget.toSetupBuildTaskName(pod: CocoapodsDependency) =
this.toValidSDK.toSetupBuildTaskName(pod)
private fun String.toBuildDependenciesTaskName(pod: CocoapodsDependency): String = lowerCamelCaseName( private fun String.toBuildDependenciesTaskName(pod: CocoapodsDependency): String = lowerCamelCaseName(
KotlinCocoapodsPlugin.POD_BUILD_TASK_NAME, KotlinCocoapodsPlugin.POD_BUILD_TASK_NAME,
pod.name.asValidTaskName(), pod.name.asValidTaskName(),
@@ -87,23 +90,24 @@ private val CocoapodsDependency.toPodDownloadTaskName: String
name.asValidTaskName() name.asValidTaskName()
) )
private val KotlinNativeTarget.toValidSDK: String
get() = when (konanTarget) {
IOS_X64 -> "iphonesimulator"
IOS_ARM32, IOS_ARM64 -> "iphoneos"
WATCHOS_X86, WATCHOS_X64 -> "watchsimulator"
WATCHOS_ARM32, WATCHOS_ARM64 -> "watchos"
TVOS_X64 -> "appletvsimulator"
TVOS_ARM64 -> "appletvos"
MACOS_X64 -> "macosx"
else -> throw IllegalArgumentException("Bad target ${konanTarget.name}.")
}
open class KotlinCocoapodsPlugin : Plugin<Project> { open class KotlinCocoapodsPlugin : Plugin<Project> {
private fun KotlinMultiplatformExtension.supportedTargets() = targets fun KotlinMultiplatformExtension.supportedTargets() = targets
.withType(KotlinNativeTarget::class.java) .withType(KotlinNativeTarget::class.java)
.matching { it.konanTarget.family.isAppleFamily } .matching { it.konanTarget.family.isAppleFamily }
private val KotlinNativeTarget.toValidSDK: String
get() = when (konanTarget) {
IOS_X64 -> "iphonesimulator"
IOS_ARM32, IOS_ARM64 -> "iphoneos"
WATCHOS_X86, WATCHOS_X64 -> "watchsimulator"
WATCHOS_ARM32, WATCHOS_ARM64 -> "watchos"
TVOS_X64 -> "appletvsimulator"
TVOS_ARM64 -> "appletvos"
MACOS_X64 -> "macosx"
else -> throw IllegalArgumentException("Bad target ${konanTarget.name}.")
}
/** /**
* Splits a string using a whitespace characters as delimiters. * Splits a string using a whitespace characters as delimiters.
* Ignores whitespaces in quotes and drops quotes, e.g. a string * Ignores whitespaces in quotes and drops quotes, e.g. a string
@@ -527,7 +531,6 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
} }
override fun apply(project: Project): Unit = with(project) { override fun apply(project: Project): Unit = with(project) {
pluginManager.withPlugin("kotlin-multiplatform") { pluginManager.withPlugin("kotlin-multiplatform") {
val kotlinExtension = project.multiplatformExtension val kotlinExtension = project.multiplatformExtension
val cocoapodsExtension = CocoapodsExtension(this) val cocoapodsExtension = CocoapodsExtension(this)
@@ -444,7 +444,7 @@ open class PodSetupBuildTask : DefaultTask() {
lateinit var pod: Provider<CocoapodsDependency> lateinit var pod: Provider<CocoapodsDependency>
@get:OutputFile @get:OutputFile
internal val buildSettingsFile: Provider<File> = project.provider { val buildSettingsFile: Provider<File> = project.provider {
project.cocoapodsBuildDirs project.cocoapodsBuildDirs
.buildSettings .buildSettings
.resolve(getBuildSettingFileName(pod.get(), sdk.get())) .resolve(getBuildSettingFileName(pod.get(), sdk.get()))
@@ -483,7 +483,8 @@ open class PodBuildTask : DefaultTask() {
@get:PathSensitive(PathSensitivity.ABSOLUTE) @get:PathSensitive(PathSensitivity.ABSOLUTE)
@get:InputFile @get:InputFile
internal lateinit var buildSettingsFile: Provider<File> lateinit var buildSettingsFile: Provider<File>
internal set
@get:Nested @get:Nested
internal lateinit var pod: Provider<CocoapodsDependency> internal lateinit var pod: Provider<CocoapodsDependency>
@@ -533,10 +534,10 @@ open class PodBuildTask : DefaultTask() {
} }
internal data class PodBuildSettingsProperties( data class PodBuildSettingsProperties(
internal val buildDir: String, internal val buildDir: String,
internal val configuration: String, internal val configuration: String,
internal val configurationBuildDir: String, val configurationBuildDir: String,
internal val podsTargetSrcRoot: String, internal val podsTargetSrcRoot: String,
internal val cflags: String? = null, internal val cflags: String? = null,
internal val headerPaths: String? = null, internal val headerPaths: String? = null,