Hi!
1. Compose Multiplatform (CMP): You write the UI once, and it works everywhere like Flatter.
2. Native UI (Compose + SwiftUI, etc.): This option is chosen for complex work with iOS system APIs, custom animations, or support for specific platforms (e.g., watchOS).
Using the Decompose library, you can extract all business logic, state, and navigation into shared Kotlin code (I have it in a feature module). With this approach, the UI layer becomes "dumb." You can start a project using Compose Multiplatform, and if your business requires a native iOS interface in the future, you can gradually rewrite the screens in SwiftUI without touching the shared logic at all. Here are my open source projects:
Native UI version (Compose for Android, SwiftUI for iOS/macOS/watchOS, Kotlin React, Compose Wear):
https://github.com/yet300/TetrisLite
Completely Compose Multiplatform version:
https://github.com/yet300/BlockBlast