You can reply to this article at https://medium.com/@jacobras/apps-using-compose-multiplatform-on-ios-now-beta-in-2024-developer-insights-fe24b224d754.
A year ago I wrote Popular apps using Kotlin Multiplatform (KMP) in 2023 — and what you can learn from them. More apps have joined since then (like Forbes and Bolt), but in this post I’m focusing on one step further: user interface. Compose Multiplatform for iOS has been officially promoted to beta today, but companies have already successfully been using it in production for a while! Let’s take a look at a couple of these apps. I asked several developers to describe their experience with using Compose Multiplatform (informally abbreviated “CMP”) on iOS, and here’s what they said.
Links are included to both the Android and iOS versions of publicly available apps, so you can give them a try for yourself (and maybe see if can spot some Material ripples 😉).
To give an indication of the size/popularity, I include download numbers from Android, as Apple doesn’t publish those numbers. Screenshots are marketing pictures provided by the developer.
Instabox (internal apps)
The developers at Swedish logistics company Instabox started building their internal iOS apps (used by many thousands of users) with SwiftUI, but after seeing a Compose demo running on iOS they built a prototype, showed it to their CTO, who liked it, and then continued working on it. They were able to build the prototype in only a couple of weeks, because the app was already structured for and with Kotlin Multiplatform.
In 🎥 an episode of the Talking Kotlin podcast (from August 2023), the developers elaborated their choice and process of working with CMP. They’re particularly happy about how native APIs are simple to use with KMP and how “just being able to move files to [common]” is a strong point of Kotlin Multiplatform.
“It’s fantastic just to keep your expertise in Kotlin and to be able to make this nice app still. I feel it’s cross-platform done right.”
Instabee developer Johannes Svensson
At KotlinConf 2024 a talk called “Compose Multiplatform on mobile at Instabee for over a year” will be given. I will update this article once a recording is available.
When asked what the biggest thing was they had to rewrite themselves, they mentioned navigation. At the time it wasn’t multiplatform yet, but lead developer Johannes told me they’ll most probably adopt the now-multiplatform Compose Navigation in the near future. Currently, the apps are using Voyager for navigation with some custom code on op of it (for back gesture handling, for example).
Markaz (1M+)
Users can buy and sell products online through this app. Everything from business logic to UI is shared Kotlin code. It’s aimed at the Pakistan market, so it may not be available in all countries. In a recent update, iOS’ back swipe gesture was added, on top of the basic iOS look & feel offered by Compose Multiplatorm out of the box, like native scrolling.
“We started working with KMP back in 2021. We had only ten days to build an app for both Android and iOS. We thought about Flutter, but we needed camera features, QR scanning et cetera. So, Kotlin Multiplatform made more sense. We went with a native UI + KMP for sharing business logic and we were able to complete the app in only seven days. Our main product was pure native at that time but we revamped it in November 2022 and shared the business logic with KMP and UI in Jetpack Compose.
We did not have ios app at that time. The motivation was that whenever we needed an iOS app, we would have the business logic ready and we would only need to build the native UI layer. In November 2023, the number of customers asking for an iOS app shot up and we decided what to do. Again, working in a startup we had tight deadlines. Compose was pre-alpha, but we decided to go with it. We ported our Jetpack Compose code to Compose Multiplatform. Dialogs, flow rows and such were not yet available, so we wrote custom components. We were using voyager and wrote custom code on top of it for our needs.
We ported the app to iOS in only 28 days with camera experience, payment integrations and much more. When we launched, there were memory leaks initially, but it’s very smooth now. The team had zero experience on UIkit prior to this, but writing UIkit in kotlin really helped us in writing custom components.”
Markaz developer Kashif Mehmood
Wrike (1M+)
Unveiled at KotlinConf today: Wrike is using Compose on iOS in production, for their calendar part of the app. The lead developer said the following during the keynote video (link at the end of this post):
“We’ve decided to go ahead with Compose Multiplatform for building the calendar view. In less than 3 months, it was live on the App Store and Google Play. And the best part: this efficiency came without the need to learn a new language or hire a new development team, by just leveraging our existing knowledge of Kotlin.”
Wrike technical lead Alex Askerov
Campus (100K+)
Campus – Schedule of classes (original name: Кампус – Расписание занятий) is an app for university students to keep track of their lesson schedule. The app is mostly native, but uses Compose Multiplatform for the “courses” section (the second tab in the app). The developer integrated CMP in the middle of 2023, shortly after it reached alpha state.
“We wanted to test a hypothesis with new content for our users. It was supposed to be a new standalone section, practically unrelated to the rest of the application. Since it was just a hypothesis and we were unsure if we would keep it in the app at all, we needed a solution with minimal effort. However, in case the experiment was successful, we wanted the ability to develop this section further and integrate it more tightly with the application.
At that time, the project already used shared Kotlin Multiplatform logic, but the entire UI was native. For the new section, we considered either Compose Multiplatform or WebView. Both solutions allowed us to conduct the experiment quickly. But with WebView, if the experiment succeeded, we would have to discard the work done and re-implement it using native tools (and shared Kotlin logic), whereas with Compose we immediately get ready-made shared logic, a ready-made Android UI, and if desired, we could replace the UI on iOS with a native version. Therefore, we chose Compose Multiplatform.
Subsequently, the section remained on Compose Multiplatform (and is still available). However, we integrate Redwood by CashApp too – the main screen of the application is made using it. With Redwood, we can get a native UI from the shared Compose code, without drawing with Skia, providing users with a 100% native look and feel. Compose Multiplatform on iOS still has drawbacks compared to the native UI, but it allows for very fast deployment on both platforms, and in the future, if desired, we can replace the iOS UI with a native one while keeping the shared logic.”
IceRock (Campus developer) CTO Aleksey Mikhailov
Кампус – Расписание занятий (Campus)
App Store: https://apps.apple.com/ru/app/кампус-расписание-занятий/id1534975833
Play Store: https://play.google.com/store/apps/details?id=ru.dewish.campus
Ashampoo Photo Organizer (upcoming)
The first version of Ashampoo Photos for iOS was written in SwiftUI. As soon as Compose Multiplatform became available, the developer switched development. The new version built with Compose UI is being tested and not yet available at the time of writing this post. However, with Compose Multiplatform running on more than “just” mobile platforms, the software is also available for Windows (and soon MacOS) at https://www.ashampoo.com/photo-organizer.
“The first version of Ashampoo Photos iOS was written in SwiftUI until Compose for iOS was available. I dropped that SwiftUI version, because it was tiresome to do double work and also it had not all the features because (to my surprise) SwiftUI APIs are lacking. There are a lot of things you just can’t do with SwiftUI – for example handling scrollstates of a list.”
Ashampoo developer Stefan Oltmann
Ashampoo Photo Organizer
App Store: coming soon
Play Store: https://play.google.com/store/apps/details?id=com.ashampoo.photos
Open source: KotlinConf (5K+), Twine RSS Reader (10K+) & FindTravelNow
The last three apps in this list are open source! Don’t skip checking these out if you’re curious to see how exactly they’re built. First off: the official KotlinConf app!
KotlinConf
App Store: https://apps.apple.com/us/app/kotlinconf/id1299196584
Play Store: https://play.google.com/store/apps/details?id=com.jetbrains.kotlinconf
Source code: https://github.com/JetBrains/kotlinconf-app
Then Twine, which is an RSS reader with 10K+ downloads:
Twine – RSS Reader
App Store: https://apps.apple.com/us/app/twine-rss-reader/id6465694958
Play Store: https://play.google.com/store/apps/details?id=dev.sasikanth.rss.reader
Source code: https://github.com/msasikanth/twine
And finally FindTravelNow is a “metasearch travel application” for finding cheap airplane tickets around the world:
FindTravelNow
App Store: https://apps.apple.com/gr/app/findtravelnow/id6471192930
Play Store: https://play.google.com/store/apps/details?id=com.travelapp.findtravelnow
Source code: https://github.com/mirzemehdi/FindTravelNow-KMM
Closing thoughts
I hope this round-up inspires those wanting to move into cross-platform development. Remember that, like with Kotlin Multiplatform in general, if you try any of it but decide to not move further with the multiplatform part, you’re always left with a functioning and modern Android app.
Check out the JetBrains site for more information on how to get started: https://www.jetbrains.com/lp/compose-multiplatform/ and today’s KotlinConf keynote for the Compose iOS beta announcement.
Special thanks to the developers mentioned above who provided valuable input for this article and the community 🚀.