I've cloned the compose multiplatform template (https://github.com/JetBrains/compose-multiplatform-template) and I've been trying to add sqldelight to the project following the instructions here: https://cashapp.github.io/sqldelight/2.0.0/multiplatform_sqlite/
given that my build.gradle.kts in shared directory now looks like this
plugins {
kotlin("multiplatform")
kotlin("native.cocoapods")
id("com.android.library")
id("org.jetbrains.compose")
id("app.cash.sqldelight") version "2.0.0"
}
kotlin {
androidTarget()
jvm("desktop")
iosX64()
iosArm64()
iosSimulatorArm64()
cocoapods {
version = "1.0.0"
summary = "Project shared module"
homepage = ""
ios.deploymentTarget = "14.1"
podfile = project.file("../iosApp/Podfile")
framework {
baseName = "shared"
isStatic = true
}
extraSpecAttributes["resources"] = "['src/commonMain/resources/**', 'src/iosMain/resources/**']"
}
val sqlDelightVersion = "2.0.0"
sourceSets {
val commonMain by getting {
dependencies {
implementation(compose.runtime)
implementation(compose.foundation)
implementation(compose.material)
@OptIn(org.jetbrains.compose.ExperimentalComposeLibrary::class)
implementation(compose.components.resources)
implementation("app.cash.sqldelight:runtime:$sqlDelightVersion")
}
}
val androidMain by getting {
dependencies {
api("androidx.activity:activity-compose:1.7.2")
api("androidx.appcompat:appcompat:1.6.1")
api("androidx.core:core-ktx:1.10.1")
implementation("app.cash.sqldelight:android-driver:$sqlDelightVersion")
}
}
val iosX64Main by getting
val iosArm64Main by getting
val iosSimulatorArm64Main by getting
val iosMain by creating {
dependsOn(commonMain)
iosX64Main.dependsOn(this)
iosArm64Main.dependsOn(this)
iosSimulatorArm64Main.dependsOn(this)
dependencies {
implementation("app.cash.sqldelight:native-driver:$sqlDelightVersion")
}
}
val desktopMain by getting {
dependencies {
implementation(compose.desktop.common)
implementation("app.cash.sqldelight:native-driver:$sqlDelightVersion")
}
}
}
}
android {
compileSdk = (findProperty("android.compileSdk") as String).toInt()
namespace = "com.project"
sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
sourceSets["main"].res.srcDirs("src/androidMain/res")
sourceSets["main"].resources.srcDirs("src/commonMain/resources")
defaultConfig {
minSdk = (findProperty("android.minSdk") as String).toInt()
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlin {
jvmToolchain(11)
}
}
sqldelight {
databases {
create("TestDatabase") {
packageName.set("com.project.shared.db")
}
}
}
I've added sqldelight related configuration and in shared module I've added a Database.sq file in the directory src/commonMain/com/project/shared/db (I've even tried setting srcDirs explicitly to this directory) but I've been getting the following error while trying to build the project
e: D:\Users\mlovrekov\AndroidStudioProjects\GymBro\shared\build.gradle.kts:10:5: Unresolved reference: androidTarget
SQLDelight Gradle plugin was applied but there are no databases set up.
The Kotlin source set commonTest was configured but not added to any Kotlin compilation. You can add a source set to a target's compilation by connecting it with the compilation's default source set using 'dependsOn'.
See https://kotl.in/connecting-source-sets
All of a sudden androidTarget is no longer a valid function? And what about SQLDelight Gradle plugin was applied but there are no databases set up.? I have done all the required steps so it should start building the database.
This error only shows up once I add id("app.cash.sqldelight") version "2.0.0" to plugins. If I remove it, the project builds but without a database
Can anyone tell me what I'm doing wrong here?
androidinstead ofandroidTarget? I'm also not sure about native driver for desktop, since it runs on jvm, and native driver doesn't support jvmandroidit is crossed over and set as deprecated with the following link: kotlinlang.org/docs/… As for the driver, I wasn't sure what is the proper one for desktop. I will change itcom.squareup.sqldelightand the issue was gone. Seems like cashapp sqldelight plugin doesn't know aboutandroidTargetcom.squareup.sqldelight? Did you stopped using the plugin?