diff --git a/build-logic/src/main/java/Config.kt b/build-logic/src/main/java/Config.kt index f4f99b92..2d4891cb 100644 --- a/build-logic/src/main/java/Config.kt +++ b/build-logic/src/main/java/Config.kt @@ -10,7 +10,7 @@ object Config { const val compileSdkVersion = 36 const val minSdkVersion = 28 const val targetSdkVersion = 36 - const val versionName = "1.4" + const val versionName = "1.5" const val versionCode = 1 const val testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" diff --git a/composeApp/build.gradle.kts b/composeApp/build.gradle.kts index 9bc52423..5d3d0841 100644 --- a/composeApp/build.gradle.kts +++ b/composeApp/build.gradle.kts @@ -4,6 +4,7 @@ plugins { id("com.streamplayer.kmp-library") alias(libs.plugins.jetbrains.compose) alias(libs.plugins.compose.compiler) + alias(libs.plugins.kotzilla) } kotlin { @@ -16,6 +17,7 @@ kotlin { implementation(libs.firebase.crashlytics) } commonMain.dependencies { + implementation(libs.kotzilla.sdk.compose) implementation(projects.featureListStreams) implementation(projects.featureDetail) implementation(projects.featureSearch) @@ -33,9 +35,8 @@ kotlin { implementation(libs.bundles.compose) implementation(libs.koin.core) + implementation(libs.koin.core.coroutines) api(libs.kmpnotifier) - - implementation(libs.kotzilla.sdk.compose) } } } diff --git a/composeApp/kotzilla.json b/composeApp/kotzilla.json new file mode 100644 index 00000000..f62cf1f7 --- /dev/null +++ b/composeApp/kotzilla.json @@ -0,0 +1,11 @@ +{ + "keys": [ + { + "appId": "019cca1a-c2ae-79d5-bf91-20316edd8f11", + "applicationPackageName": "com.codandotv.streamplayerapp", + "keyId": "019dfef9-3830-749f-a89e-77c18e51f663", + "apiKey": "ktz-sdk-5N2sXcaobPbX6erWh9cF4lC1HGztC9qBIXzvMc873o8", + "isDefault": true + } + ] +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt index 5da57d51..c10fa4a8 100644 --- a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt +++ b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt @@ -5,23 +5,47 @@ import com.codandotv.streamplayerapp.core_local_storage.di.LocalStorageModule import com.codandotv.streamplayerapp.core_networking.di.NetworkModule import com.codandotv.streamplayerapp.core_shared.qualifier.QualifierDispatcherIO import com.codandotv.streamplayerapp.feature_list_streams.list.di.ListStreamModule +import com.codandotv.streamplayerapp.feature_news.di.NewsScreenModule +import com.codandotv.streamplayerapp.feature_search.di.SearchModule +import com.codandotv.streamplayerapp.feature_search.presentation.widgets.StreamsError +import com.codandotv.streamplayerapp.profile.di.ProfilePickerStreamModule +import io.kotzilla.generated.monitoring import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.IO import org.koin.core.KoinApplication import org.koin.core.context.startKoin +import org.koin.core.lazyModules import org.koin.dsl.module import org.koin.ksp.generated.module fun streamPlayerApplication(platformBlock: KoinApplication.() -> Unit): KoinApplication { return startKoin { platformBlock() + lazyModules(PermissionsModule.module) + modules( - module { single(QualifierDispatcherIO) { Dispatchers.IO } }, + module { + single(QualifierDispatcherIO) { + Dispatchers.IO + } + }, NetworkModule().module, LocalStorageModule.module, SyncModule.module, + + // region feature_modules ListStreamModule.module, + SearchModule().module, + NewsScreenModule().module, + ProfilePickerStreamModule().module + // endregion ) + + monitoring { + onConfig { + useIosCrashReport = false + } + } } } diff --git a/core-permission/build.gradle.kts b/core-permission/build.gradle.kts index c20e96af..ba47d694 100644 --- a/core-permission/build.gradle.kts +++ b/core-permission/build.gradle.kts @@ -16,6 +16,7 @@ kotlin { implementation(libs.moko.permissions.camera) implementation(libs.moko.permissions.gallery) implementation(libs.koin.core) + implementation(libs.koin.core.coroutines) } } } diff --git a/core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_permission/di/PermissionsModule.kt b/core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_permission/di/PermissionsModule.kt index e6cb1bfd..281c3461 100644 --- a/core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_permission/di/PermissionsModule.kt +++ b/core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_permission/di/PermissionsModule.kt @@ -1,9 +1,9 @@ import com.codandotv.streamplayerapp.core_permission.permission.PermissionsManager -import org.koin.dsl.module +import org.koin.dsl.lazyModule object PermissionsModule { - val module = module { + val module = lazyModule { single { com.codandotv.streamplayerapp.core_permission.permission.PermissionsManagerImpl( controller = com.codandotv.streamplayerapp.core_permission.permission.PermissionFactory() diff --git a/feature-news/build.gradle.kts b/feature-news/build.gradle.kts index a3f9747e..733114e7 100644 --- a/feature-news/build.gradle.kts +++ b/feature-news/build.gradle.kts @@ -4,6 +4,7 @@ plugins { id("com.streamplayer.kmp-library") alias(libs.plugins.jetbrains.compose) alias(libs.plugins.compose.compiler) + id("com.streamplayer.koin-annotations-setup") } kotlin { diff --git a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_news/di/NewsScreenModule.kt b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_news/di/NewsScreenModule.kt index bbc52bfe..0b1ab285 100644 --- a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_news/di/NewsScreenModule.kt +++ b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_news/di/NewsScreenModule.kt @@ -1,13 +1,8 @@ package com.codandotv.streamplayerapp.feature_news.di -import com.codandotv.streamplayerapp.feature_news.presentation.NewsScreenViewModel -import org.koin.core.module.dsl.viewModel -import org.koin.dsl.module +import org.koin.core.annotation.ComponentScan +import org.koin.core.annotation.Module -object NewsScreenModule { - val module = module { - viewModel { - NewsScreenViewModel( permissionsManager = get()) - } - } -} +@Module +@ComponentScan("com.codandotv.streamplayerapp.feature_news") +class NewsScreenModule diff --git a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_news/presentation/NewsScreenViewModel.kt b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_news/presentation/NewsScreenViewModel.kt index 6188c6d2..005fe60d 100644 --- a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_news/presentation/NewsScreenViewModel.kt +++ b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_news/presentation/NewsScreenViewModel.kt @@ -13,6 +13,8 @@ import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch +import org.koin.android.annotation.KoinViewModel +import org.koin.core.annotation.Provided data class NewsScreenUiState( val showPermissionDialog: Boolean = false, @@ -23,8 +25,9 @@ sealed class NewsScreenActionTakeImage { data object Gallery : NewsScreenActionTakeImage() } +@KoinViewModel class NewsScreenViewModel( - val permissionsManager: PermissionsManager + @Provided val permissionsManager: PermissionsManager ) : ViewModel() { private val _actionTakeImage = MutableSharedFlow() val actionTakeImage: SharedFlow = _actionTakeImage diff --git a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_news/presentation/navigation/NewsNavigation.kt b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_news/presentation/navigation/NewsNavigation.kt index 7641657b..56ada54d 100644 --- a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_news/presentation/navigation/NewsNavigation.kt +++ b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_news/presentation/navigation/NewsNavigation.kt @@ -4,19 +4,12 @@ import androidx.navigation.NavGraphBuilder import androidx.navigation.NavHostController import androidx.navigation.compose.composable import com.codandotv.streamplayerapp.core_navigation.routes.BottomNavRoutes -import com.codandotv.streamplayerapp.core_navigation.routes.Routes.DETAIL_COMPLETE -import com.codandotv.streamplayerapp.feature_news.di.NewsScreenModule -import com.codandotv.streamplayerapp.feature_news.presentation.screens.NewsScreen import com.codandotv.streamplayerapp.feature_news.presentation.screens.NewsScreenContent -import org.koin.compose.module.rememberKoinModules import org.koin.core.annotation.KoinExperimentalAPI @OptIn(KoinExperimentalAPI::class) fun NavGraphBuilder.newsStreamNavGraph(navController: NavHostController) { composable(BottomNavRoutes.NEWS) { _ -> - rememberKoinModules { - listOf(NewsScreenModule.module,PermissionsModule.module) - } NewsScreenContent(navController) } } diff --git a/feature-profile/build.gradle.kts b/feature-profile/build.gradle.kts index 59bc51e2..36b4c3b0 100644 --- a/feature-profile/build.gradle.kts +++ b/feature-profile/build.gradle.kts @@ -4,6 +4,7 @@ plugins { id("com.streamplayer.kmp-library") alias(libs.plugins.jetbrains.compose) alias(libs.plugins.compose.compiler) + id("com.streamplayer.koin-annotations-setup") } kotlin { diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/data/ProfilePickerStreamRepository.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/data/ProfilePickerStreamRepository.kt index 793670c5..827f6151 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/data/ProfilePickerStreamRepository.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/data/ProfilePickerStreamRepository.kt @@ -7,11 +7,13 @@ import com.codandotv.streamplayerapp.profile.domain.toProfiles import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.map +import org.koin.core.annotation.Factory interface ProfilePickerStreamRepository { suspend fun getProfiles(): Flow> } +@Factory class ProfilePickerStreamRepositoryImpl( private val service: ProfilePickerStreamService ) : ProfilePickerStreamRepository { diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/data/ProfilePickerStreamService.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/data/ProfilePickerStreamService.kt index e071ddf2..f1d6ca32 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/data/ProfilePickerStreamService.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/data/ProfilePickerStreamService.kt @@ -5,13 +5,16 @@ import com.codandotv.streamplayerapp.core_networking.handleError.safeRequest import com.codandotv.streamplayerapp.profile.data.model.ProfilesResponse import io.ktor.client.HttpClient import io.ktor.client.request.url +import org.koin.core.annotation.Factory +import org.koin.core.annotation.Provided interface ProfilePickerStreamService { suspend fun getProfiles(): NetworkResponse } +@Factory class ProfilePickerStreamServiceImpl( - private val client: HttpClient + @Provided private val client: HttpClient ) : ProfilePickerStreamService { override suspend fun getProfiles(): NetworkResponse = client.safeRequest { diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/di/ProfilePickerStreamModule.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/di/ProfilePickerStreamModule.kt index 76e222d8..f06a7da4 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/di/ProfilePickerStreamModule.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/di/ProfilePickerStreamModule.kt @@ -1,39 +1,8 @@ package com.codandotv.streamplayerapp.profile.di -import com.codandotv.streamplayerapp.profile.data.ProfilePickerStreamRepository -import com.codandotv.streamplayerapp.profile.data.ProfilePickerStreamRepositoryImpl -import com.codandotv.streamplayerapp.profile.data.ProfilePickerStreamService -import com.codandotv.streamplayerapp.profile.data.ProfilePickerStreamServiceImpl -import com.codandotv.streamplayerapp.profile.domain.ProfilePickerStreamUseCase -import com.codandotv.streamplayerapp.profile.domain.ProfilePickerStreamUseCaseImpl -import com.codandotv.streamplayerapp.profile.presentation.screens.ProfilePickerStreamViewModel -import org.koin.core.module.dsl.viewModel -import org.koin.dsl.module +import org.koin.core.annotation.ComponentScan +import org.koin.core.annotation.Module -object ProfilePickerStreamModule { - val module = module { - viewModel { - ProfilePickerStreamViewModel( - useCase = get() - ) - } - - factory { - ProfilePickerStreamUseCaseImpl( - profilePickerStreamRepository = get() - ) - } - - factory { - ProfilePickerStreamRepositoryImpl( - service = get() - ) - } - - factory { - ProfilePickerStreamServiceImpl( - client = get() - ) - } - } -} +@Module +@ComponentScan("com.codandotv.streamplayerapp.profile") +class ProfilePickerStreamModule diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/domain/ProfilePickerStreamUseCase.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/domain/ProfilePickerStreamUseCase.kt index abf1a4a6..490d855b 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/domain/ProfilePickerStreamUseCase.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/domain/ProfilePickerStreamUseCase.kt @@ -3,6 +3,7 @@ package com.codandotv.streamplayerapp.profile.domain import com.codandotv.streamplayerapp.profile.data.ProfilePickerStreamRepository import kotlinx.coroutines.flow.Flow +import org.koin.core.annotation.Factory interface ProfilePickerStreamUseCase { suspend fun getProfile(): Flow> @@ -21,6 +22,7 @@ interface ProfilePickerStreamUseCase { ): Pair } +@Factory class ProfilePickerStreamUseCaseImpl( private val profilePickerStreamRepository: ProfilePickerStreamRepository ) : ProfilePickerStreamUseCase { diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/navigation/ProfilePickerStreamNavigation.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/navigation/ProfilePickerStreamNavigation.kt index eb885448..a50acfc5 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/navigation/ProfilePickerStreamNavigation.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/navigation/ProfilePickerStreamNavigation.kt @@ -6,17 +6,12 @@ import androidx.navigation.compose.composable import com.codandotv.streamplayerapp.core_navigation.routes.BottomNavRoutes.HOME import com.codandotv.streamplayerapp.core_navigation.routes.BottomNavRoutes.PARAM.PROFILE_ID import com.codandotv.streamplayerapp.core_navigation.routes.Routes -import com.codandotv.streamplayerapp.profile.di.ProfilePickerStreamModule import com.codandotv.streamplayerapp.profile.presentation.screens.ProfilePickerStreamScreen -import org.koin.compose.module.rememberKoinModules import org.koin.core.annotation.KoinExperimentalAPI @OptIn(KoinExperimentalAPI::class) fun NavGraphBuilder.profilePickerStreamNavGraph(navController: NavHostController) { composable(Routes.PROFILE_PICKER) { - rememberKoinModules { - listOf(ProfilePickerStreamModule.module) - } ProfilePickerStreamScreen( onNavigateListStreams = { profilePic -> navController.navigate("$HOME?$PROFILE_ID=$profilePic") diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/screens/ProfilePickerStreamViewModel.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/screens/ProfilePickerStreamViewModel.kt index 1eac734f..2dc3c90f 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/screens/ProfilePickerStreamViewModel.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/screens/ProfilePickerStreamViewModel.kt @@ -11,7 +11,9 @@ import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch +import org.koin.android.annotation.KoinViewModel +@KoinViewModel class ProfilePickerStreamViewModel( private val useCase: ProfilePickerStreamUseCase, ) : ViewModel() { diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/navigation/SearchStreamNavigation.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/navigation/SearchStreamNavigation.kt index a46a09fd..bddaadad 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/navigation/SearchStreamNavigation.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/navigation/SearchStreamNavigation.kt @@ -4,20 +4,12 @@ import androidx.navigation.NavGraphBuilder import androidx.navigation.NavHostController import androidx.navigation.compose.composable import com.codandotv.streamplayerapp.core_navigation.routes.Routes -import com.codandotv.streamplayerapp.feature_search.di.SearchModule import com.codandotv.streamplayerapp.feature_search.presentation.screens.SearchScreen -import org.koin.compose.module.rememberKoinModules import org.koin.core.annotation.KoinExperimentalAPI -import org.koin.ksp.generated.module @OptIn(KoinExperimentalAPI::class) fun NavGraphBuilder.searchStreamsNavGraph(navController: NavHostController) { composable(Routes.SEARCH) { _ -> - rememberKoinModules { - listOf( - SearchModule().module - ) - } SearchScreen( navController = navController, onNavigateDetailList = { id -> diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/screens/SearchScreen.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/screens/SearchScreen.kt index c3067ecb..885f13b6 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/screens/SearchScreen.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/screens/SearchScreen.kt @@ -4,6 +4,7 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material3.CircularProgressIndicator @@ -87,6 +88,7 @@ private fun SetupSearchScreen( topBar = { val currentText by viewModel.currentSearchText.collectAsState() SearchableTopBar( + modifier = Modifier.statusBarsPadding(), currentSearchText = currentText, onSearchTextChanged = { value -> viewModel.setCurrentSearchText( diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/widgets/SearchStreams.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/widgets/SearchStreams.kt index 01775583..b86c064f 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/widgets/SearchStreams.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/widgets/SearchStreams.kt @@ -49,9 +49,10 @@ fun SearchableTopBar( onSearchDispatched: () -> Unit, onSearchIconPressed: () -> Unit, onBackPressed: () -> Unit, - onCleanTextPressed: () -> Unit + onCleanTextPressed: () -> Unit, + modifier: Modifier = Modifier, ) { - Column { + Column(modifier = modifier) { StreamPlayerTopBar( onBackPressed = onBackPressed ) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a39e80bc..86b8306d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,7 +4,7 @@ android_gradle_plugin = "9.1.0" koin = "4.2.0" koin-annotations = "2.3.1" ksp = "2.3.5" -kotzilla = "2.0.8" +kotzilla = "2.1.3" lifecycle-viewmodel-compose-version = "2.9.6" dokka = "1.9.10" @@ -66,7 +66,7 @@ serialization = { module = "org.jetbrains.kotlin.plugin.serialization:org.jetbra com-google-devtools-ksp-gradle-plugin = { module = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin", version.ref = "ksp" } coil = { group = "io.coil-kt.coil3", name = "coil-compose", version.ref = "coil" } -coil-network-ktor3 = { module = "io.coil-kt.coil3:coil-network-ktor3", version.ref="coil"} +coil-network-ktor3 = { module = "io.coil-kt.coil3:coil-network-ktor3", version.ref = "coil" } lottie = { group = "com.airbnb.android", name = "lottie-compose", version.ref = "lottie" } @@ -90,6 +90,7 @@ koin-annotations = { module = "io.insert-koin:koin-annotations", version.ref = " koin-ksp-compiler = { module = "io.insert-koin:koin-ksp-compiler", version.ref = "koin-annotations" } koin_compose = { module = "io.insert-koin:koin-compose", version.ref = "koin" } koin_compose_viewmodel = { module = "io.insert-koin:koin-compose-viewmodel", version.ref = "koin" } +koin_core_coroutines = { module = "io.insert-koin:koin-core-coroutines", version.ref = "koin" } #Networking okhttp = { group = "com.squareup.okhttp3", name = "okhttp", version.ref = "okhttp" } @@ -124,9 +125,9 @@ activity-compose = { module = "androidx.activity:activity-compose", version = "a #Firebase -firebase-bom = { group = "com.google.firebase", name = "firebase-bom", version.ref = "firebase-bom"} -firebase-analytics = { group = "com.google.firebase", name = "firebase-analytics"} -firebase-crashlytics = { group = "com.google.firebase", name = "firebase-crashlytics"} +firebase-bom = { group = "com.google.firebase", name = "firebase-bom", version.ref = "firebase-bom" } +firebase-analytics = { group = "com.google.firebase", name = "firebase-analytics" } +firebase-crashlytics = { group = "com.google.firebase", name = "firebase-crashlytics" } #Test kotlin_test = { group = "org.jetbrains.kotlin", name = "kotlin-test", version.ref = "kotlin" } @@ -155,7 +156,7 @@ compose_ui-util = { module = "org.jetbrains.compose.ui:ui-util", version.ref = " [bundles] test = ["junit", "mockk", "mockk_android", "viewmodel_test", "koin_test", "coroutines_test"] -test_multiplatform = ["kotlin_test", "kotlin_test_common", "coroutines_test",] +test_multiplatform = ["kotlin_test", "kotlin_test_common", "coroutines_test", ] camera = [ "androidx-camera-camera2", "androidx-camera-core", @@ -180,6 +181,6 @@ ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" } buildkonfig_plugin = { id = "com.codingfeline.buildkonfig", version.ref = "buildkonfig" } -google-services = { id = "com.google.gms.google-services", version.ref = "google-services"} +google-services = { id = "com.google.gms.google-services", version.ref = "google-services" } -firebase-crashlytics = { id = "com.google.firebase.crashlytics", version.ref = "firebase-crashlytics"} +firebase-crashlytics = { id = "com.google.firebase.crashlytics", version.ref = "firebase-crashlytics" } diff --git a/iosApp/iosApp.xcodeproj/project.pbxproj b/iosApp/iosApp.xcodeproj/project.pbxproj index afe73fa0..780eecb4 100644 --- a/iosApp/iosApp.xcodeproj/project.pbxproj +++ b/iosApp/iosApp.xcodeproj/project.pbxproj @@ -207,7 +207,8 @@ 7555FF77242A565900829871 /* Sources */, B92378962B6B1156000C7307 /* Frameworks */, 7555FF79242A565900829871 /* Resources */, - ); + + 5B6CA7F380A0493998D6B4A3 /* Kotzilla Dsym */,); buildRules = ( ); dependencies = ( @@ -326,6 +327,24 @@ shellPath = /bin/sh; shellScript = "if [ \"YES\" = \"$OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED\" ]; then\n echo \"Skipping Gradle build task invocation due to OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED environment variable set to \\\"YES\\\"\"\n exit 0\nfi\ncd \"$SRCROOT/..\"\n./gradlew :composeApp:embedAndSignAppleFrameworkForXcode\n"; }; + 5B6CA7F380A0493998D6B4A3 /* Kotzilla Dsym */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Kotzilla Dsym"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# KOTZILLA_SCRIPT_VERSION=9\nset -e\nM=$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app/kotzilla-debug\n[ \"$CONFIGURATION\" = Release ] && rm -f \"$M\" 2>/dev/null || touch \"$M\" 2>/dev/null\n[ -z \"$DWARF_DSYM_FOLDER_PATH\" ] && exit 0\ncd \"$SRCROOT/..\"\n./gradlew ':composeApp:uploadDsymFile' --dsymPath=\"$DWARF_DSYM_FOLDER_PATH\"\n"; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */