With KMM (Kotlin Multiplatform Mobile) maturing every month, more and more teams are putting it in production on both Android and iOS. But as the adoption grows, new problems arise.

Today we will discuss an issue that may occur in modular applications, which have multiple KMP (Kotlin Multiplatform) frameworks shared and used in the iOS application. These KMP frameworks should use a common code from a 3rd module or library exposed to the iOS app.

Real-world example

Imagine a simple application that allows keeping track of favorite authors and books for all authenticated users. All data is persisted on the backend, so…


I'm a happy user of MasterClass for almost 3 months now, during which I've watched about 5 courses from experts in (very) different domains. These were probably the most engaging lessons I had online in my life.

I've got curious about how they engaged me and millions of other people worldwide to spend time on their platform and pay money for it. If you are as interested in the EdTech solutions as I am, let's try to figure that out together.

With this article, I'm finally starting the series of reviews for EdTech products — the subject I'm passionate about…


Firebase is usually considered a substitute for a "real" backend, mainly used by mobile teams to ship POC / MVP solutions without hiring backend developers and adding another technology (complexity) into a stack.

With the emergence of Ktor, it's now possible to write a real independent backend in Kotlin, which is widely popular among Android developers. See Backend for mobile engineers with Kotlin and Ktor for more details.

Does it mean that Firebase can't be useful for mobile development anymore? Of course, it doesn't! …


Legal matters can make sad even the most sober-minded developer. Especially when it comes to crafting documents, on which corporations, like Google or Facebook, spend thousands of man-hours.

But no worries, to each problem, there should be a solution on GitHub. And there is a great project call App Privacy Policy Generator created and open-sourced by Nishant Srivastava, which solves exactly this problem.

In the article, I'll show you how I generated and hosted Privacy Policy and Terms & Conditions documents for my open-source app Codeforces WatchR in 3 simple steps and about 5 minutes of my time.

Step 1: App information

Generator supports…


Most iOS (and Android) apps are written as a single module with features / layers separated by folders. If done right, modules can be extracted simply by moving whole folders to newly created modules. It’s rarely the case, though.

Modularization is known to be a good architecture decision for many reasons: better separation of concerns and features, cleaner code, easier communication and collaboration in the team.

With a number of modules growing, one day you will surely face a transitive framework dependency problem, which produces “ITMS-90562: Invalid Bundle” issue after uploading the build to App Store.

Disclaimer: We are using…


Let’s make things clear from the beginning. There is no way in which cross-platform mobile apps can match native mobile apps in performance, user, and developer experience. And they won’t ever be able to do it. Everything else is just marketing ;)

Native mobile apps are developed separately for Android (Kotlin) and iOS (Swift). Ecosystems are supported by Google and Apple correspondingly, so developers get the newest, the most stable, the most convenient tools (Android Studio, XCode), SDKs, and libraries for work.

There are only two issues about native mobile development: cost and consistency. If there is a problem, there…


How many times were you thinking about writing your backend for mobile apps you are working on? And how many times have you chosen Firebase instead? Are there any better options at the moment?

In this article, I'll describe our experience of writing Kotlin backend for Codeforces WatchR mobile apps using Ktor, which is officially positioned as follows:

An asynchronous framework for creating microservices, web applications, and more. It’s fun, free, and open source.

Why backend is needed?

Codeforces WatchR started almost 3 years ago as a pet-project, which used official Codeforces API to simply fetch and display data from server. But with time…


Developing breakthrough products is hard. Be it web or mobile, native or cross-platform, proof of concept, or production-ready app. By supporting several platforms, you multiply the difficulty by a factor of 2 or 3.

In this article, we will cover the following questions:

  • what is difficult about developing for multiple operating systems
  • why consistency is important
  • how to decrease complexity and increase the conformity of codebase

I’m going to share our experience of making native mobile applications more consistent, increasing our team’s coherence and bandwidth, and finally making our end-users happier 🤗

Inconsistent by design

As a mobile engineer with experience in both…


Kotlin Multiplatform is a great technology in the maturing period, which means that it's not always possible to find what you need for your project and you must craft it yourself. Are you ready for a challenge?

In this article, I'll share a step-by-step guide to creating and publishing of KMP library for JVM, Android, and iOS targets. Target, if simply put, is just a type of device where you want your library to work.

Update: Bintray has been closed, so the publishing section of this article doesn't make sense anymore. Refer to https://dev.to/kotlin/how-to-build-and-publish-a-kotlin-multiplatform-library-going-public-4a8k


There are dozens of cross-platform technologies, which promise you "write-once run-anywhere" experience out of the box without any considerable drawbacks. But in the end, we all know it's not 100% true.

To be honest, there are only a few viable solutions for cross-platform application development when it comes to the mobile world: React Native, Flutter and Kotlin Multiplatform.

The latter is the youngest player in the field, but the most promising one. It's super-flexible, concentrates on sharing business-logic, ensures native UI/UX, and enables native development experience.

In this article, I want to share our migration journey of native iOS and…

Yev Kanivets

Professional Mobile Engineer since 2014, passionated by #EdTech, learning and teaching. Competitive programming enthusiast. Marathon Finisher.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store