Emirhan Emmez
05/22/2024, 2:05 PMMaicol
06/05/2024, 3:44 PMEmirhan Emmez
06/05/2024, 3:59 PMMaicol
06/05/2024, 4:01 PMimport com.android.build.gradle.internal.cxx.configure.gradleLocalProperties
import com.codingfeline.buildkonfig.compiler.FieldSpec
import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType
import org.jetbrains.kotlin.ir.backend.js.compile
import java.util.Properties
plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidApplication)
alias(libs.plugins.jetbrainsCompose)
alias(libs.plugins.compose.compiler)
alias(libs.plugins.googleServices)
kotlin("native.cocoapods")
// alias(libs.plugins.completeKotlin)
alias(libs.plugins.sekretPlugin)
kotlin("plugin.serialization")
alias(libs.plugins.androidGitVersion)
alias(libs.plugins.konfig)
// Add the Crashlytics Gradle plugin
alias(libs.plugins.firebase.crashlytics)
}
kotlin {
androidTarget {
@OptIn(ExperimentalKotlinGradlePluginApi::class)
compilerOptions {
jvmTarget.set(JvmTarget.JVM_17)
}
}
@OptIn(ExperimentalKotlinGradlePluginApi::class)
compilerOptions {
freeCompilerArgs.add("-Xexpect-actual-classes")
}
listOf(
iosX64(),
iosArm64(),
iosSimulatorArm64()
).forEach { iosTarget ->
iosTarget.binaries.framework {
binaryOption("bundleVersion", "0.5")
binaryOption("bundleId", "eu.prepsoil.app")
export(libs.kmpnotifier)
baseName = "ComposeApp"
isStatic = true
}
}
cocoapods {
// Required properties
// Specify the required Pod version here. Otherwise, the Gradle project version is used.
version = "1.0"
summary = "Some description for a Kotlin/Native module"
homepage = "Link to a Kotlin/Native module homepage"
podfile = project.file("../iosApp/Podfile")
// Optional properties
// Configure the Pod name here instead of changing the Gradle project name
ios.deploymentTarget = "15.4"
if (DefaultNativePlatform.getCurrentOperatingSystem().isMacOsX) {
// pod("FirebaseMessaging", libs.versions.ios.firebaseMessaging.get())
// pod("FirebaseCrashlytics", libs.versions.ios.firebaseMessaging.get())
pod("GoogleMaps") {
version = libs.versions.ios.maps.get()
extraOpts += listOf("-compiler-option", "-fmodules")
}
pod("GooglePlaces", libs.versions.ios.places.get())
}
framework {
// Required properties
// Framework name configuration. Use this property instead of deprecated 'frameworkName'
baseName = "ComposeApp"
// Optional properties
// Specify the framework linking type. It's dynamic by default.
isStatic = true
// Dependency export
export(libs.kmpnotifier)
//// export(project(":anotherKMMModule"))
// transitiveExport = false // This is default.
// Bitcode embedding
// embedBitcode(BitcodeEmbeddingMode.BITCODE)
}
// Maps custom Xcode configuration to NativeBuildType
xcodeConfigurationToNativeBuildType["CUSTOM_DEBUG"] = NativeBuildType.DEBUG
xcodeConfigurationToNativeBuildType["CUSTOM_RELEASE"] = NativeBuildType.RELEASE
}
sourceSets {
androidMain.dependencies {
implementation(libs.compose.ui)
implementation(libs.compose.ui.tooling.preview)
implementation(libs.androidx.activity.compose)
// Maps SDK for Android
implementation(libs.play.services.maps)
// Android Maps Compose composables for the Maps SDK for Android
implementation(libs.maps.compose)
// Utilities for Maps SDK for Android (requires Google Play Services)
// You do not need to add a separate dependency for the Maps SDK for Android
// since this library builds in the compatible version of the Maps SDK.
implementation(libs.android.maps.utils)
// Optionally add the Kotlin Extensions (KTX) for full Kotlin language support
// See latest version at <https://github.com/googlemaps/android-maps-ktx>
implementation(libs.maps.utils.ktx)
implementation(libs.places)
implementation(libs.koin.android)
implementation(libs.kotlinx.coroutines.android)
implementation(libs.kotlinx.coroutines.play.services)
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.core.splashscreen)
implementation(libs.ktor.client.okhttp)
implementation(libs.customactivityoncrash)
// Import the BoM for the Firebase platform
implementation(project.dependencies.platform(libs.firebase.bom))
// Add the dependencies for the Crashlytics and Analytics libraries
// When using the BoM, you don't specify versions in Firebase library dependencies
implementation(libs.firebase.crashlytics)
implementation(libs.firebase.analytics)
}
commonMain.dependencies {
implementation(compose.runtime)
implementation(compose.foundation)
implementation(compose.material3)
implementation(compose.materialIconsExtended)
implementation(compose.components.resources)
api(libs.kmpnotifier)
implementation(libs.compottie)
api(libs.permissions)
api(libs.permissions.compose)
implementation(libs.koin.core)
implementation(libs.kotlinx.coroutines.core)
implementation(libs.koin.compose)
implementation(libs.oidc.appsupport)
implementation(libs.oidc.ktor)
implementation(libs.rebugger)
api(libs.image.loader)
implementation(libs.kotlinx.datetime)
implementation(libs.ktor.client.core)
implementation(libs.ktor.client.auth)
implementation(libs.ktor.client.json)
implementation(libs.ktor.client.logging)
implementation(libs.ktor.serialization.kotlinx.json)
implementation(libs.kotlinx.serialization.json)
implementation(libs.ktor.client.content.negotiation)
api(compose.animation)
api(libs.precompose)
api(libs.precompose.viewmodel) // For ViewModel intergration
api(libs.precompose.koin) // For Koin intergration
implementation(libs.multiplatform.settings)
implementation(libs.multiplatform.settings.coroutines)
implementation(libs.kermit)
implementation(libs.youtubeplayer.compose)
implementation(libs.spraypaintkt.core)
implementation(libs.spraypaintkt.koin.integration)
implementation(libs.spraypaintkt.ktor.integration)
implementation(libs.flagkit)
api(libs.konnectivity)
implementation(libs.precompose.navigation.typesafe)
implementation(libs.richeditor.compose)
implementation(libs.composeSettings)
implementation(libs.composeSettings.extended)
implementation(libs.sheetsComposeDialogs.core)
implementation(libs.sheetsComposeDialogs.list)
implementation(libs.peekaboo.image.picker)
implementation(libs.crashlytics)
}
iosMain.dependencies {
implementation(compose.material)
implementation(libs.stately.common)
implementation(libs.ktor.client.darwin)
}
}
}
android {
namespace = "eu.prepsoil.app"
compileSdk = libs.versions.android.compileSdk.get().toInt()
sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
sourceSets["main"].res.srcDirs("src/androidMain/res")
sourceSets["main"].resources.srcDirs("src/commonMain/resources")
defaultConfig {
applicationId = "eu.prepsoil.app"
minSdk = libs.versions.android.minSdk.get().toInt()
targetSdk = libs.versions.android.targetSdk.get().toInt()
versionCode = if (androidGitVersion.code() == 0) 1 else androidGitVersion.code()
versionName = androidGitVersion.name()
addManifestPlaceholders(
mapOf("oidcRedirectScheme" to "prepsoilapp")
)
signingConfigs {
val secrets = Properties().apply {
load(project.rootProject.file("local.properties").inputStream())
}
getByName("debug") {
storeFile = file("commpla.keystore")
storePassword = secrets.getProperty("KEYSTORE_PASSWORD")
keyAlias = "commpladebugkey"
keyPassword = secrets.getProperty("KEYSTORE_PASSWORD")
}
create("release") {
storeFile = file("commpla.keystore")
storePassword = secrets.getProperty("KEYSTORE_PASSWORD")
keyAlias = "commplareleasekey"
keyPassword = secrets.getProperty("KEYSTORE_PASSWORD")
}
}
}
buildFeatures {
compose = true
}
packaging {
resources {
excludes += "/META-INF/{AL2.0,LGPL2.1}"
merges += "values**"
}
}
buildTypes {
getByName("release") {
// Enables code shrinking, obfuscation, and optimization for only
// your project's release build type. Make sure to use a build
// variant with `isDebuggable=false`.
isMinifyEnabled = true
// Enables resource shrinking, which is performed by the
// Android Gradle plugin.
isShrinkResources = true
// Includes the default ProGuard rules files that are packaged with
// the Android Gradle plugin. To learn more, go to the section about
// R8 configuration files.
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
signingConfig = signingConfigs.getByName("release")
}
getByName("debug") {
isDebuggable = true
isJniDebuggable = true
isMinifyEnabled = false
}
}
compileOptions {
isCoreLibraryDesugaringEnabled = true
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
dependencies {
debugImplementation(libs.compose.ui.tooling)
}
}
dependencies {
implementation(libs.play.services.location)
implementation(libs.androidx.browser)
coreLibraryDesugaring(libs.desugar.jdk.libs)
}
sekret {
properties {
enabled = true
packageName = "eu.prepsoil.app"
encryptionKey = packageName
nativeCopy {
androidJNIFolder.set(File("src/androidMain/jniLibs"))
}
}
}
buildkonfig {
packageName = "eu.prepsoil.app"
defaultConfigs {
buildConfigField(
FieldSpec.Type.BOOLEAN,
"isDev",
gradleLocalProperties(rootDir, providers).getProperty("USE_STAGING_SERVER") ?: "false"
)
}
}
Emirhan Emmez
06/05/2024, 4:13 PMMaicol
06/05/2024, 4:42 PM