~repos /only-bible-app

#kotlin#android#ios

git clone https://pyrossh.dev/repos/only-bible-app.git

The only bible app you will ever need. No ads. No in-app purchases. No distractions.



file:

composeApp/build.gradle.kts



import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import com.codingfeline.buildkonfig.compiler.FieldSpec.Type
import com.codingfeline.buildkonfig.gradle.BuildKonfigExtension
import org.jetbrains.kotlin.konan.properties.Properties
import java.io.FileInputStream
val secretProperties = Properties().apply {
load(FileInputStream(rootProject.file("secrets.properties")))
}
val pkgName = "dev.pyrossh.onlyBible"
plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidApplication)
alias(libs.plugins.jetbrainsCompose)
alias(libs.plugins.compose.compiler)
alias(libs.plugins.kotlinx.serializer)
alias(libs.plugins.buildkonfig)
// alias(libs.plugins.kotlinCocoapods)
}
kotlin {
androidTarget {
@OptIn(ExperimentalKotlinGradlePluginApi::class)
compilerOptions {
jvmTarget.set(JvmTarget.JVM_11)
}
}
// cocoapods {
// version = "1.15.2"
// ios.deploymentTarget = "13.5"
// pod("MicrosoftCognitiveServicesSpeech-iOS") {
// version = "1.40"
// }
// }
listOf(
iosX64(),
iosArm64(),
iosSimulatorArm64()
).forEach { iosTarget ->
iosTarget.binaries.framework {
baseName = "ComposeApp"
isStatic = true
}
}
sourceSets {
androidMain.dependencies {
implementation(compose.preview)
implementation(libs.androidx.activity.compose)
}
commonMain.dependencies {
implementation(compose.runtime)
implementation(compose.foundation)
implementation(compose.material)
implementation(compose.material3)
implementation(compose.materialIconsExtended)
implementation(compose.ui)
implementation(compose.components.resources)
implementation(compose.components.uiToolingPreview)
implementation(libs.androidx.lifecycle.viewmodel)
implementation(libs.androidx.lifecycle.runtime.compose)
implementation(compose.components.resources)
implementation(libs.multiplatform.settings)
implementation(libs.androidx.navigation.compose)
implementation(libs.androidx.lifecycle.viewmodel.compose)
implementation(libs.speech.client.sdk)
implementation(libs.kotlinx.serialization.json)
implementation(libs.kotlinx.coroutines.core)
}
commonTest.dependencies {
implementation(libs.kotlin.test)
}
}
}
android {
namespace = pkgName
compileSdk = 35
sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
sourceSets["main"].res.srcDirs("src/androidMain/res")
sourceSets["main"].resources.srcDirs("src/commonMain/resources")
defaultConfig {
applicationId = pkgName
minSdk = 32
targetSdk = 35
versionCode = 14
versionName = "3.0.0"
}
packaging {
resources {
excludes += "/META-INF/{AL2.0,LGPL2.1}"
}
}
signingConfigs {
create("release") {
keyAlias = secretProperties["KEY_ALIAS"] as String
keyPassword = secretProperties["KEY_PASSWORD"] as String
storeFile = file(secretProperties["STORE_PASSWORD"] as String)
storePassword = secretProperties["STORE_FILE"] as String
}
}
buildTypes {
release {
signingConfig = signingConfigs.getByName("release")
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
buildFeatures {
compose = true
}
dependencies {
debugImplementation(compose.uiTooling)
}
}
compose.resources {
publicResClass = true
packageOfResClass = "${pkgName}.resources"
generateResClass = auto
}
@Suppress("TooGenericExceptionCaught")
configure<BuildKonfigExtension> {
packageName = "${pkgName}.config"
defaultConfigs {
buildConfigField(
Type.STRING,
"SUBSCRIPTION_KEY",
secretProperties["SUBSCRIPTION_KEY"]?.toString() ?: ""
)
buildConfigField(
Type.STRING,
"SUBSCRIPTION_REGION",
"centralindia"
)
}
}