From 37f61915237cd2c7ba396b1ff14f2a7790923de4 Mon Sep 17 00:00:00 2001 From: ulfrxdev Date: Fri, 24 Apr 2026 18:22:47 +0200 Subject: [PATCH] feat(01-04): wire JVM + Wasm main + Swift iOSApp to bootstrap Koin + Kermit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Desktop main() calls configureLogging() → initKoin() before application { Window { App() } } - Wasm main() calls configureLogging() → initKoin() before ComposeViewport { App() } (PITFALL #8 future-proof) - iOSApp.swift imports ComposeApp and calls KoinIosKt.doInitKoin() in init() — single iOS call site (PITFALL #4) - MainViewController.kt and App.kt unmodified (anti-pattern guards) --- .../jvmMain/kotlin/dev/ulfrx/recipe/main.kt | 20 ++++++++++++------- .../webMain/kotlin/dev/ulfrx/recipe/main.kt | 6 +++++- iosApp/iosApp/iOSApp.swift | 5 +++++ 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/composeApp/src/jvmMain/kotlin/dev/ulfrx/recipe/main.kt b/composeApp/src/jvmMain/kotlin/dev/ulfrx/recipe/main.kt index d7717c9..9467cf1 100644 --- a/composeApp/src/jvmMain/kotlin/dev/ulfrx/recipe/main.kt +++ b/composeApp/src/jvmMain/kotlin/dev/ulfrx/recipe/main.kt @@ -2,12 +2,18 @@ package dev.ulfrx.recipe import androidx.compose.ui.window.Window import androidx.compose.ui.window.application +import dev.ulfrx.recipe.di.initKoin +import dev.ulfrx.recipe.logging.configureLogging -fun main() = application { - Window( - onCloseRequest = ::exitApplication, - title = "recipe", - ) { - App() +fun main() { + configureLogging() + initKoin() + application { + Window( + onCloseRequest = ::exitApplication, + title = "recipe", + ) { + App() + } } -} \ No newline at end of file +} diff --git a/composeApp/src/webMain/kotlin/dev/ulfrx/recipe/main.kt b/composeApp/src/webMain/kotlin/dev/ulfrx/recipe/main.kt index 8490d3d..be8e22c 100644 --- a/composeApp/src/webMain/kotlin/dev/ulfrx/recipe/main.kt +++ b/composeApp/src/webMain/kotlin/dev/ulfrx/recipe/main.kt @@ -2,10 +2,14 @@ package dev.ulfrx.recipe import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.window.ComposeViewport +import dev.ulfrx.recipe.di.initKoin +import dev.ulfrx.recipe.logging.configureLogging @OptIn(ExperimentalComposeUiApi::class) fun main() { + configureLogging() + initKoin() ComposeViewport { App() } -} \ No newline at end of file +} diff --git a/iosApp/iosApp/iOSApp.swift b/iosApp/iosApp/iOSApp.swift index 927e0b9..500c459 100644 --- a/iosApp/iosApp/iOSApp.swift +++ b/iosApp/iosApp/iOSApp.swift @@ -1,7 +1,12 @@ import SwiftUI +import ComposeApp @main struct iOSApp: App { + init() { + KoinIosKt.doInitKoin() + } + var body: some Scene { WindowGroup { ContentView()