This was a small app made as a proof of concept for, then emerging, Kotlin Multiplatform framework. The idea was to find a multi-platform tool which had a gentle learning curve, a native look, feel \& performance and can be used to share code amongst Android, iOS and possibly Web for our customers requiring simple apps.
Despite having many conceptual advantages it drastically fell short in terms of stability at the time and we went with Flutter instead
Kotlin Multiplatform is an experimental language feature that allows us to share common code between various platforms (in our case Android, iOS and Web) which we would otherwise write for each platform separately.
The UI and maybe some other parts of the app which requires a native component needs to be implemented separately and is not meant to be shared with this approach. We believed that most of the code for business logic, presentation logic and some basic components like HTTP client and databases could be shared among the platforms which could save a lot of development time.
The time and effort required to setup the project for just Android and iOS was quite high as the framework was just in its early stages of development. Even though the setup for both the mobile platforms was documented moderately well, the fact that we were asked to include web itself created a lot of problems as there was no documentation for the combined project setup.
There were also some cryptic error messages during compilation time and version mismatch errors between kotlin native libraries.
In the end, we did complete the proof of concept and the app was working in all the three platforms with a Kotlin based HTTP client and a database. The only platform specific code was the UI of the mobile platforms.
The technology had many shortcomings and the fact that the framework was very premature led us to conclude that the technology is not yet ready to be used (at least back then).
Having said that, conceptually it had a lot of points on its favour. Since, Kotlin is interoperable with Java, Objective-C and Javascript, the performance of the app would be exaclty like a native app. The fact that the UI had to be platform specific meant that the feel of the app will also be native.
Also, the framework supports almost all platforms such as Desktop, Mac, Raspberry Pi and even Backend. Basically, it supports all platforms which is either Java, C or Javascript based!
It would be great for developing small to medium apps especially, if they share similar functionalities across many platforms.
Hope that in the near future it becomes stable!
Date: Jun, 2019
Company: intive GmbH