From 7d750af710a9abb43a2cd095b568482cef3e81b3 Mon Sep 17 00:00:00 2001 From: ulfrxdev Date: Fri, 24 Apr 2026 18:21:36 +0200 Subject: [PATCH] feat(01-04): add Koin + Kermit bootstrap commonMain + iOS bridge MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add initKoin(config) helper wrapping startKoin { modules(appModule) } (PITFALL #4 single entry) - Add empty appModule placeholder (D-14) — Phase 2+ extends - Add configureLogging() setting Kermit tag "recipe" (D-15) - Add iosMain doInitKoin() bridge — Swift-accessible as KoinIosKt.doInitKoin() - configureLogging() always runs before initKoin() so module loading can log --- .../commonMain/kotlin/dev/ulfrx/recipe/di/AppModule.kt | 8 ++++++++ .../src/commonMain/kotlin/dev/ulfrx/recipe/di/Koin.kt | 10 ++++++++++ .../kotlin/dev/ulfrx/recipe/logging/Logging.kt | 8 ++++++++ .../src/iosMain/kotlin/dev/ulfrx/recipe/di/KoinIos.kt | 8 ++++++++ 4 files changed, 34 insertions(+) create mode 100644 composeApp/src/commonMain/kotlin/dev/ulfrx/recipe/di/AppModule.kt create mode 100644 composeApp/src/commonMain/kotlin/dev/ulfrx/recipe/di/Koin.kt create mode 100644 composeApp/src/commonMain/kotlin/dev/ulfrx/recipe/logging/Logging.kt create mode 100644 composeApp/src/iosMain/kotlin/dev/ulfrx/recipe/di/KoinIos.kt diff --git a/composeApp/src/commonMain/kotlin/dev/ulfrx/recipe/di/AppModule.kt b/composeApp/src/commonMain/kotlin/dev/ulfrx/recipe/di/AppModule.kt new file mode 100644 index 0000000..f0461a6 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/dev/ulfrx/recipe/di/AppModule.kt @@ -0,0 +1,8 @@ +package dev.ulfrx.recipe.di + +import org.koin.dsl.module + +// Phase 2 adds authModule; Phase 4 adds syncModule; Phase 5 adds catalogModule; etc. +val appModule = module { + // intentionally empty in Phase 1 +} diff --git a/composeApp/src/commonMain/kotlin/dev/ulfrx/recipe/di/Koin.kt b/composeApp/src/commonMain/kotlin/dev/ulfrx/recipe/di/Koin.kt new file mode 100644 index 0000000..1ce7e87 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/dev/ulfrx/recipe/di/Koin.kt @@ -0,0 +1,10 @@ +package dev.ulfrx.recipe.di + +import org.koin.core.KoinApplication +import org.koin.core.context.startKoin +import org.koin.dsl.KoinAppDeclaration + +fun initKoin(config: KoinAppDeclaration? = null): KoinApplication = startKoin { + config?.invoke(this) + modules(appModule) +} diff --git a/composeApp/src/commonMain/kotlin/dev/ulfrx/recipe/logging/Logging.kt b/composeApp/src/commonMain/kotlin/dev/ulfrx/recipe/logging/Logging.kt new file mode 100644 index 0000000..8fbd6a6 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/dev/ulfrx/recipe/logging/Logging.kt @@ -0,0 +1,8 @@ +package dev.ulfrx.recipe.logging + +import co.touchlab.kermit.Logger + +fun configureLogging() { + Logger.setTag("recipe") + // Platform log writers (OSLog iOS, LogCat Android, System.out JVM/Wasm) install by default. +} diff --git a/composeApp/src/iosMain/kotlin/dev/ulfrx/recipe/di/KoinIos.kt b/composeApp/src/iosMain/kotlin/dev/ulfrx/recipe/di/KoinIos.kt new file mode 100644 index 0000000..becaab7 --- /dev/null +++ b/composeApp/src/iosMain/kotlin/dev/ulfrx/recipe/di/KoinIos.kt @@ -0,0 +1,8 @@ +package dev.ulfrx.recipe.di + +import dev.ulfrx.recipe.logging.configureLogging + +fun doInitKoin() { + configureLogging() + initKoin() +}