Tooling

Mobile — Skip (Swift → Kotlin Transpiler)

Write SwiftUI for iOS, get a real native Kotlin/Compose Android app from the same source.

Skip is the unusual approach: a Swift compiler plugin that transpiles Swift + SwiftUI into Kotlin + Jetpack Compose. The iOS build is a native Swift app; the Android build is a native Kotlin app — not a wrapper, not a runtime. It targets the audience that already lives in Swift/SwiftUI and would otherwise have no good cross-platform option short of Kotlin Multiplatform (which forces them into Kotlin) or RN / Flutter.

Skip is free for individual developers and small businesses (Skip Fuse / Skip Lite under specific limits) and paid for larger teams; check current pricing.

What it actually does

  • Skip Fuse — the Swift-to-Kotlin transpiler. Builds two real apps from one source tree.
  • Skip Lite — earlier mode that mixed Skip with native libraries; superseded for most.
  • SkipUI — SwiftUI subset implemented on top of Compose for the Android target.
  • SkipFoundation / SkipFFI — Foundation-shaped Kotlin shims so your Swift code compiles.
  • SkipKit / SkipBridge — JVM/Kotlin platform bindings exposed back to Swift.

What you can share

  • SwiftUI views — most of the SwiftUI surface area; expect to write Skip-flavored escape hatches for things SwiftUI doesn't yet cover on Android.
  • Foundation typesURLSession, JSONDecoder, Date, Data, etc., are mapped to JVM equivalents.
  • Swift Concurrencyasync/await, Task, actors compile to Kotlin coroutines.

What you have to fork

  • Platform-specific UI — system sheets, share sheets, share extensions, background tasks, notifications config — split with #if SKIP / #if !SKIP.
  • Native Android-only APIs — write Kotlin alongside, or use Skip's bridging.

Tooling

  • Xcode 16+ — primary IDE; build and run iOS targets normally.
  • Android Studio — auxiliary; opens the generated Kotlin Gradle project for Android.
  • Skip CLIskip init, skip android run, etc.
  • Swift Package Manager — Skip integrates as SPM packages.

Comparison vs other cross-platform

  • vs KMP: KMP shares logic only by default; Skip shares UI too, but the source language is Swift, not Kotlin.
  • vs Compose Multiplatform: CMP gives you Compose-everywhere from Kotlin; Skip gives you SwiftUI-everywhere from Swift.
  • vs Flutter / RN: Skip outputs real native apps with native widgets; no JS bridge, no Skia layer.
  • vs native double-team: One source of truth, but you still need an Android Studio when something Skip can't transpile crops up.

Watch-list / gotchas

  • Younger ecosystem than KMP / Flutter / RN. Bug surface is real.
  • Pricing model has shifted; check current free tier.
  • Some SwiftUI APIs lag — modal sheets, pickers, accessibility annotations have varied parity.
  • Best fit for greenfield SwiftUI apps that can stay disciplined about avoiding deep UIKit.

Pick this if…

  • You're an iOS shop with SwiftUI as your default and want Android without a second team: Skip.
  • You're a Kotlin/Android shop wanting iOS: Compose Multiplatform instead.
  • You want neutral ground: Flutter, RN, or KMP.
  • You have Web + mobile and want one TS codebase: RN/Expo or Mobile Packaging.

On this page