# Shared Module KMP umbrella module that exports all core and feature modules as a single `Shared.framework` for iOS. On Android, this module is a dependency of `:app` but the framework export is iOS-only. ## Framework Export `shared/build.gradle.kts` configures iOS targets (`iosArm64`, `iosSimulatorArm64`) and exports: - `core:common`, `core:model`, `core:network`, `core:data` — exported via `api()` so iOS sees all public types - `core:ui` + all `feature:*` modules — included via `implementation()` for Compose Multiplatform screen sharing The framework is static (`isStatic = true`) and named `Shared`. ## iOS Platform Files (`src/iosMain/`) | File | Purpose | |------|---------| | `IosKoinHelper.kt` | `startIosKoin()` — called from Swift `iOSApp.init()`. Sets up Kermit logging via NSLog, installs crash reporting, starts Koin with iOS modules. | | `IosSharedModule.kt` | Koin module wiring Darwin Ktor engine, three HttpClient instances (main, streaming, refresh), all 16 API services, SSE client, and `LibreChatSDK`. | | `IosKoinAccessor.kt` | Swift-accessible Koin resolver. `KoinHelper.swift` calls these to get SDK, repos, etc. | | `IosCrashReporting.kt` | Unhandled exception hook — logs via Kermit + raises NSException for readable iOS crash logs. | | `MainViewController.kt` | `MainViewController()` — the Compose Multiplatform entry point wrapped by `ComposeView.swift`. | ## Common Files (`src/commonMain/`) - `LibreChatSDK.kt` — Facade class aggregating all API services, token manager, and SSE client - `navigation/` — Nav 3 route definitions and entry providers shared across platforms - `app/` — Shared app-level composables (root navigation host) ## SKIE The SKIE Gradle plugin is applied here. All features are enabled by default: - Sealed classes → Swift exhaustive enums (`onEnum(of:)`) - `Flow` → `AsyncSequence` - `suspend fun` → `async throws` No explicit SKIE configuration is needed unless disabling a specific feature. ## Adding Platform-Specific Code - iOS implementations go in `src/iosMain/` with `actual` declarations matching `expect` in `commonMain` - For feature-level platform code, prefer adding `iosMain` source sets in the feature module itself rather than here - This module should only contain app-level iOS wiring (DI bootstrap, framework entry point)