/* * SPDX-FileCopyrightText: 2026 NewPipe e.V. * SPDX-License-Identifier: GPL-3.0-or-later */ import org.jetbrains.compose.desktop.application.dsl.TargetFormat plugins { alias(libs.plugins.android.library) alias(libs.plugins.jetbrains.kotlin.multiplatform) alias(libs.plugins.jetbrains.kotlin.compose) alias(libs.plugins.jetbrains.compose.multiplatform) alias(libs.plugins.jetbrains.compose.hotreload) alias(libs.plugins.google.ksp) alias(libs.plugins.jetbrains.kotlin.serialization) } kotlin { jvmToolchain(17) androidLibrary { namespace = "net.newpipe.app" compileSdk = 36 minSdk = 21 } listOf( iosArm64(), iosSimulatorArm64() ).forEach { iosTarget -> iosTarget.binaries.framework { baseName = "ComposeApp" isStatic = true } } jvm() sourceSets { commonMain.dependencies { implementation(compose.runtime) implementation(compose.foundation) implementation(compose.material3) implementation(compose.ui) implementation(compose.components.resources) implementation(compose.components.uiToolingPreview) // Lifecycle implementation(libs.jetbrains.lifecycle.viewmodel) // Koin api(libs.koin.annotations) implementation(libs.koin.core) implementation(libs.koin.compose) implementation(libs.koin.viewmodel) // Settings implementation(libs.russhwolf.settings) // Navigation implementation(libs.jetbrains.navigation3.ui) implementation(libs.jetbrains.serialization.json) } commonTest.dependencies { implementation(libs.kotlin.test) implementation(libs.koin.test) } androidMain.dependencies { implementation(compose.preview) implementation(libs.androidx.activity) implementation(libs.androidx.preference) } jvmMain.dependencies { implementation(compose.desktop.currentOs) implementation(libs.jetbrains.coroutines.swing) } } // Koin sourceSets.named("commonMain").configure { kotlin.srcDir("build/generated/ksp/metadata/commonMain/kotlin") } } // Koin dependencies { add("kspCommonMainMetadata", libs.koin.annotations) add("kspAndroid", libs.koin.compiler) add("kspIosArm64", libs.koin.compiler) add("kspIosSimulatorArm64", libs.koin.compiler) } tasks.matching { it.name.startsWith("ksp") && it.name != "kspCommonMainKotlinMetadata" } .configureEach { dependsOn("kspCommonMainKotlinMetadata") } compose.desktop { application { mainClass = "net.newpipe.app.MainKt" nativeDistributions { targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb) packageName = "net.newpipe.app" packageVersion = "1.0.0" } } }