Mobile Development

Mobile Development Today, Part 2: Native with Swift and Kotlin

Swift on iOS, Kotlin on Android: native development means the deepest platform integration but twice the effort. When is that worth it, and where does cross-platform fall short?

Illustration: laptop and monitor with source code, a smartphone showing code, an Android figure, and multimeters on a desk under a lamp AI-generated image

Some developers nod immediately when they hear the word "native," and others roll their eyes. Both reactions are understandable. Native development means writing Swift for iOS and Kotlin for Android, and the two codebases have about as much in common as a soldering iron and a touchscreen. Nothing. And yet, or precisely because of that, a closer look is worth it.

What "Native" Actually Means

Native means you talk directly to the operating system. No abstraction layer in between, no framework that translates, mediates, or buffers. Your app uses the platform APIs exactly as Apple and Google intended, and it shows. Animations run smoothly, system integration is seamless, and new operating system features are available to you the moment the update ships. Cross-platform frameworks often lag months behind here.

From an electronics engineer's perspective, this is easy to place: it is the difference between a driver that sits directly on the hardware and a middleware layer that first has to be interpreted. Both work, but not in the same way.

Swift: Apple's Answer to Objective-C

Swift appeared in 2014 and almost completely displaced Objective-C within a few years. That says a lot. The language is modern, expressive, and far less error-prone than its predecessor, thanks to its type system and its clear handling of optional values alone. Anyone who has ever sunk into nil-pointer chaos in an Objective-C project knows what I am talking about.

SwiftUI changed UI development on Apple platforms yet again, and fundamentally so. Declarative, reactive, tightly interwoven with the Apple ecosystem. For someone with a modern development background, getting started feels far more natural than the old UIKit world. That said, SwiftUI still has rough edges, especially when more complex layouts or older iOS versions come into play. Then you reach for UIKit after all, and suddenly the new mixes with the old in a way that quickly makes the code hard to follow.

The tie to Apple's ecosystem is a strength and a weakness at the same time. Xcode is a powerful development environment, but a stubborn one. And if you are not sitting at a Mac, you simply do not develop for iOS. That is a hard constraint that cannot be argued away.

Kotlin: The Grown-Up Path on Android

Kotlin replaced Java on Android at a speed that surprised the entire community. Google declared Kotlin an official language in 2017, and since then Java has not really been a serious topic in new Android projects. The language is concise and type-safe, and coroutines turned asynchronous programming on Android from a nightmare into something manageable.

Jetpack Compose, Google's answer to SwiftUI, rethinks UI development on Android from the ground up. Instead of XML layouts, you write the UI directly in Kotlin code, declaratively and reactively. It is a paradigm shift you first have to internalize. But once it clicks, you do not want to go back.

What makes Kotlin even more interesting than Swift: it does not run only on Android. Kotlin Multiplatform opens the door to shared business logic on iOS, desktop, and web; more on that in Part 4 of this series. That lifts Kotlin out of the pure Android corner and gives the language a strategic dimension that Swift simply lacks.

When Is the Double Effort Worth It?

Two codebases mean two teams, two development cycles, and twice the maintenance. At first that sounds like an argument against native, but it is not automatically one. When performance is decisive, when the app reaches deep into the system, when platform-specific features leave no room for compromise, native is the right choice. Games, AR applications, low-level tools: this is where native plays to its strengths.

For a business app that mainly displays data and submits a form? Then you really have to be able to justify the second codebase. That is not a weakness of native development. It is simply an honest assessment of the cost.

Conclusion for Part 2

Swift and Kotlin are both mature, modern languages that are fun to work with, provided you commit to their respective platforms. The strength of native development lies not in prestige but in the depth of platform integration and in reliability. If you have the resources and refuse to compromise on performance or user experience, you are on the right track with native. Everyone else should read Part 3 first.