Kotlin Multiplatform Native Bridging 🌉
When the common Kotlin standard library falls short, you must write native platform bridges to access raw iOS Foundation or Android Context APIs.
⚡ When to Use
- When integrating platform-specific hardware, Push Notifications, or third-party proprietary SDKs that lack a KMP wrapper.
🏗️ Core Rules / Pillars
1. The Expect/Actual Paradigm
- Pattern: Avoid trying to pass
Context(Android) orUIViewController(iOS) around in common code via genericAnytypes. - Implementation: Define an
expectclass or interface incommonMain, and provideactualimplementations withinandroidMainandiosMain. Use constructor injection for dependencies if using Koin or Kotlin-Inject.
2. Bridging Coroutines to Swift (iOS)
- Pattern: By default, Kotlin
StateFlowandsuspendfunctions compile to Swift with generic clunkySkieorCompletionHandlersignatures. - Implementation: Rely on libraries like Touchlab's SKIE to seamlessly map Kotlin Coroutines into native Swift Async/Await to provide iOS developers a world-class API.
🚧 Critical Anti-Hallucination Guards
- Trap: Do not attempt to use
java.util.UUIDorjava.timeanywhere incommonMain! Native Java libraries simply DO NOT compile to iOS and will immediately break the KMP build. Instead usekotlinx.datetimeanduuidlibraries.