All Downloads are FREE. Search and download functionalities are using the official Maven repository.

dev.icerock.gradle.MobileTargetsPlugin.kt Maven / Gradle / Ivy

/*
 * Copyright 2019 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license.
 */

package dev.icerock.gradle

import org.gradle.api.Plugin
import org.gradle.api.Project
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension

class MobileTargetsPlugin : Plugin {
    private val androidManifestPlugin = AndroidManifestPlugin()
    private val androidSourcesPlugin = AndroidSourcesPlugin()

    override fun apply(target: Project) {
        // backward compatibility apply
        androidManifestPlugin.apply(target)
        androidSourcesPlugin.apply(target)

        target.plugins.withId("org.jetbrains.kotlin.multiplatform") {
            val kmpExtension =
                target.extensions.findByType(KotlinMultiplatformExtension::class.java)!!

            setupMultiplatformTargets(kmpExtension, target)
        }
    }

    private fun setupMultiplatformTargets(
        kmpExtension: KotlinMultiplatformExtension,
        project: Project
    ) {
        val logTargetTypeStr = project.findProperty(PROPERTY_IOS_WARNING) as? String
        val logTargetType = logTargetTypeStr?.toLowerCase() != "false"
        kmpExtension.apply {
            android()
            val useShortcutStr = project.findProperty(PROPERTY_USE_IOS_SHORTCUT) as? String
            val useShortcut = useShortcutStr?.toLowerCase() != "false"
            if (useShortcut) {
                if (logTargetType) project.logger.warn("used new ios() shortcut target")
                ios()
            } else {
                if (logTargetType) project.logger.warn("used old iosArm64() and iosX64() targets")
                iosArm64()
                iosX64()
            }
        }
    }

    private companion object {
        const val PROPERTY_IOS_WARNING = "mobile.multiplatform.iosTargetWarning"
        const val PROPERTY_USE_IOS_SHORTCUT = "mobile.multiplatform.useIosShortcut"
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy