plugins { // AGP must apply BEFORE recipe.kotlin.multiplatform — the latter calls androidTarget(), // which requires the Android Gradle Plugin to already be on the project. Gradle applies // plugin IDs in declaration order, so com.android.library is listed first. alias(libs.plugins.androidLibrary) id("recipe.kotlin.multiplatform") id("recipe.quality") } kotlin { explicitApi() // Override framework baseName: shared exposes "Shared.framework" to Swift, while // composeApp's convention-plugin default is "ComposeApp.framework". (D-07 / PITFALL #10) targets.withType().configureEach { binaries.withType().configureEach { baseName = "Shared" } } sourceSets { commonMain.dependencies { // Phase 1: intentionally empty. Domain models + DTOs land Phase 2+. // D-19 / INFRA-06: Do NOT add Ktor, Compose, or SQLDelight deps here — EVER. } } } android { namespace = "dev.ulfrx.recipe.shared" compileSdk = libs.versions.android.compileSdk .get() .toInt() compileOptions { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } defaultConfig { minSdk = libs.versions.android.minSdk .get() .toInt() } }