Kotlin Multiplatform makes you write a hand-maintained bridge layer on iOS — one file per domain that wraps, streams, and re-maps every Kotlin type into Swift. This is the anti-corruption layer, what it costs, and why a Rust + UniFFI core deletes it as a standing module.
On iOS, Kotlin Multiplatform ships your whole shared layer as one linked framework. So does a change to any shared module rebuild everything? I measured it — cold and cached, low-dependency and high-dependency modules, and as the shared layer grows. Real numbers, and the levers that move them.