Research & Development projects
In today’s world, the mobile app market is vast and diverse. Consequently, developers and companies must make challenging decisions when choosing technologies for their mobile projects. Android, iOS and React Native, are just some of the available options. However, another question has emerged in recent years: What about Kotlin Multiplatform? Which of these technologies is best for a specific project? This article will attempt to answer these questions and examine various aspects of choosing technologies for mobile app development.
The first dilemma every mobile app creator faces is choosing between Android and iOS. Native development, which involves building separate apps for both platforms, offers the most control over the product but requires more work and potentially hiring more developers. The choice between these two platforms can depend on the nature of the app and the planned maintenance timeline.
React Native, a technology introduced by Meta (formerly Facebook) used to be a popular cross-platform solution (1). However, Meta recently withdrew its support, which could be a significant problem for app creators planning to simultaneously release their products on Android and iOS. Additionally, to use new features of Android and iOS systems in a cross-platform technology like React Native, these features must first be implemented within React Native itself.
In the world of React Native, there is a division between applications developed with Expo and those created without it. Expo offers many features and conveniences but comes with certain limitations. The choice of tools depends on the project’s nature; for simple apps like calculators, Expo can be an excellent choice. However, for more advanced solutions requiring integration with external libraries, React Native CLI may provide greater flexibility.
The availability of external libraries is also a crucial aspect of technology selection. Companies often boast React Native support, but it’s essential to carefully examine the documentation because not all features are always available on both platforms. Integrating some libraries may require significant effort and encounter performance issues.
Performance is one of the key factors affecting the quality of mobile app user experiences. While React Native introduced a multi-threading model, there is still much room for improvement. Performance can be a concern for more advanced apps, especially when native system functions are necessary.
React native will probably never be able to cope with performance (2). Why is it like that? When the application is started, the “emulator” for interpreting the Java script is started, which the application contains. It’s like a computer launches a browser, and an application is launched in the browser. We have an additional layer that must perform calculations. On the other hand, we can ask ourselves: is the performance sufficient?
Kotlin Multiplatform is a relatively new technology that addresses many issues in other cross-platform technologies. Kotlin allows you to write code that compiles Android and iOS, eliminating the need for “emulators” to interpret the code. This approach can significantly improve performance compared to other technologies.
For some time, Google (Android) has been supporting Kotlin-multiplatform solutions. Composse has been introduced in Android. It seems that in the near future, writing UI in one code will be possible (3).
It’s worth noting that mobile apps can be divided into backend (business logic) and UI components. Kotlin Multiplatform primarily supports the backend layer, enabling shared code for data handling, algorithms, and other dependencies. However, separate user interfaces for Android and iOS are still necessary.
To better understand the differences between various approaches, let’s examine two apps: “Fitness” and “Habits.” Both have a similar structure, but “Fitness” was developed natively for Android and iOS, while “Habits” was built using React Native. In the case of “Fitness,” development went smoothly, thanks to the use of native tools available on Android, which allowed for efficient technical problem-solving. In contrast, “Habits” faced performance issues and challenges with certain features, extending the project’s timeline.
One of the functionalities that increased the working time in the case of React native is the adaptation of the library that saves data to storage and which can then be quickly read. In the case of a native approach, it is not too time-consuming because we have many such ready-made solutions. In the case of React, this is not so obvious, and a poorly selected solution may cause the application to freeze. Loading svg is also not such a simple solution in the case of React native. After implementing the library, it turns out that not all icons display well on Android. In the case of native solutions, there is no major problem with this.
Choosing the right technology for mobile app development is a challenging task that depends on various factors. There is no one-size-fits-all answer to which technology is the best because each project has unique requirements. However, Kotlin Multiplatform seems promising, enabling shared code for Android and iOS and addressing many performance and library availability issues.
It’s important to remember that each technology has limitations and may not always be suitable for all projects. In some cases, especially for more advanced apps or those requiring specialized solutions, a native approach may be better. Each project should be assessed individually, considering its characteristics and goals. Kotlin Multiplatform may revolutionize the cross-platform technology market and enhance the efficiency and effectiveness of mobile app development, but time will tell if it becomes a dominant technology.
Android Developer, Sigma IT Poland