import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.JvmTarget import java.util.Properties plugins { alias(libs.plugins.kotlinMultiplatform) alias(libs.plugins.androidApplication) alias(libs.plugins.composeMultiplatform) alias(libs.plugins.composeCompiler) } // ── 버전 관리 ──────────────────────────────────────────────────── // 기본값은 gradle.properties. CI/릴리스 스크립트는 // ./gradlew assembleRelease -PappVersionName=1.2.0 -PappVersionCode=7 // 처럼 덮어쓴다. val appVersionName: String = (findProperty("appVersionName") as String?) ?: "0.0.1" val appVersionCode: Int = ((findProperty("appVersionCode") as String?) ?: "1").toInt() kotlin { androidTarget { @OptIn(ExperimentalKotlinGradlePluginApi::class) compilerOptions { jvmTarget.set(JvmTarget.JVM_17) } } // iOS 타깃은 뺐다 (2026-09-24 결정). Apple Developer Program 연 $99 + 맥이 // 필요해 비용 대비 실익이 없다고 판단. 아이폰은 웹 PWA(tetrig.pages.dev)로 커버한다. // 구조는 commonMain 중심 그대로라, 나중에 iosTarget 만 다시 추가하면 된다. sourceSets { commonMain.dependencies { implementation(compose.runtime) implementation(compose.foundation) implementation(compose.material3) implementation(compose.ui) implementation(compose.components.resources) implementation(libs.androidx.lifecycle.viewmodel) } commonTest.dependencies { implementation(libs.kotlin.test) } androidMain.dependencies { implementation(compose.preview) implementation(libs.androidx.activity.compose) } } } android { namespace = "kr.tkrmagid.tetrig" compileSdk = 36 defaultConfig { applicationId = "kr.tkrmagid.tetrig" minSdk = 24 targetSdk = 36 versionCode = appVersionCode versionName = appVersionName } sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") sourceSets["main"].res.srcDirs("src/androidMain/res") // keystore.properties 가 있으면 릴리스 서명을 붙인다. 없으면 unsigned. val keystorePropsFile = rootProject.file("keystore.properties") val keystoreProps = Properties().apply { if (keystorePropsFile.exists()) keystorePropsFile.inputStream().use { load(it) } } if (keystoreProps.isNotEmpty()) { signingConfigs { create("release") { storeFile = file(keystoreProps.getProperty("storeFile")) storePassword = keystoreProps.getProperty("storePassword") keyAlias = keystoreProps.getProperty("keyAlias") keyPassword = keystoreProps.getProperty("keyPassword") } } } buildTypes { getByName("release") { isMinifyEnabled = false if (keystoreProps.isNotEmpty()) { signingConfig = signingConfigs.getByName("release") } } getByName("debug") { applicationIdSuffix = ".debug" } } compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } packaging { resources.excludes += "/META-INF/{AL2.0,LGPL2.1}" } } dependencies { debugImplementation(compose.uiTooling) }