» » Comparing native and cross-platform mobile development approaches in 2022

Comparing native and cross-platform mobile development approaches in 2022

Not so long ago I came across an article from the old days about cross-platform development. It started something like this: “I won’t languish, let’s be clear right away, cross-platform mobile development will never reach the level of native solutions in terms of performance, user experience and / or development.” The year is 2022, and over the past few years, cross-platform development has made a noticeable leap forward. Let's see how things are on the market of cross-platform solutions now.

Comparing native and cross-platform mobile development approaches in 2022

There were many players in the smartphone market with their own approaches to development. Recall at least Symbian, whose history ended in 2012, and Blackberry OS, which we said goodbye to in 2013. Or Windows Phone, which ended support in 2015. History has reduced everything to the fact that two dominant platforms remained on the market - Android and iOS. They took a total of 99% of the market, leaving almost no chance for the rest.

The native languages ​​for Android and iOS development are Java/Kotlin and Objective-C/Swift, respectively. The languages ​​(at least Kotlin and Swift) are backed by the platform companies Google and Apple. And developers get access to all the features and "chips" of the platforms, as fast as they can. Native development, however, has one significant problem - cost. When choosing native development, you will have to support at least two platforms separately. This can lead to difficulties not only from the financial side, but also from the side of further support and development. For a similar problem, a solution was quickly found - the development of cross-platform solutions with a single code base.

There are a sufficient number of different frameworks for creating cross-platform solutions. There are solutions such as hybrid platforms/PWA (Progressive Web Applications). I suggest not to consider them, since they (eg PhoneGap, Cordova, Ionic) not only cannot meet modern requirements for mobile application performance. And they also make you experience an extremely negative experience for both users and developers. I will not mention Cocos2d-x or Unity in this article either. We can end up with an app that looks similar on both platforms but doesn't look native on either platform.

Of the remaining solutions, three of the most promising can be distinguished: Xamarin, Kotlin Multiplatform, Flutter (spoiler: I would choose from the last two). I propose to consider each in more detail.

Xamarin


The framework, consonant with the name of the developer company, which was acquired in 2016 by Microsoft, was developed in 2011. It allows people who write in C# to get into mobile development. With the ability to combine cross-platform code with a portion of native solutions as needed, a Xamarin project can provide a completely native user experience to the user. While the code base can remain almost the same.

Official support from Microsoft to this day is also a coin in the treasury of the merits of this solution. Thanks to the versatility, the cost of developing a product to market and further support can be reduced significantly. Plus there are built-in testing tools. This will simplify the monotonous manual testing on each of the platforms (at least in part).

However, there are also some pitfalls. One of the most obvious is that native skills are still required to work with the platform, since Xamarin libraries often do not cover all the necessary functionality. Often you may encounter the fact that the library becomes obsolete, and no one undertakes to update it. It is difficult to find developers who work decently simultaneously with C #, Kotlin, Swift in our time, but it is possible. However, the cost of such specialists will differ greatly from that of natives.

Summing up, we can say that although this solution may look attractive at first glance, in projects with long-term support, it is more likely to cause a lot of headaches. Sooner or later, the code will still have to be translated into native. And it won't be easy to do so. In 2022, I would not recommend choosing this framework for cross-platform development.

Kotlin Multiplatform


The youngest of the described solutions is Kotlin Multiplatform (KMP), developed by JetBrains (they are also the creators of the Kotlin language, which is the official language for Android development). In concept, this is not a framework for creating cross-platform applications, but rather an SDK that allows you to create modules with a single code base, which are subsequently connected to native applications.

The solution is very attractive in terms of the fact that most of the Android development is already done in Kotlin, and in its syntax, the language is very similar to Swift (and more and more). However, it may still take some time to learn. You should not expect that any team will be able to transfer to work with KMP in a nominal hour.

The platform is ideal if you already have a working application. You can combine parts and get a significant simplification of the process of support and development. However, if you need to develop an application from scratch, then I would rather turn to Flutter.

Flutter


The fastest growing cross-platform development framework. It was introduced in 2017 by Google and managed to make a lot of noise. Development using this framework is carried out in the rather experienced Dart language, the history of which began back in 2011 (the grass was greener, and smartphones were more diverse).

The language itself is very similar to Java. The transition to it is not particularly difficult for experienced Android developers who know not only Kotlin, but also Java. The rest will be a little harder, but I doubt that it is critical. The framework website provides simple and understandable documentation, so it’s quite possible to understand.

With the help of Flutter, a single UI is created (using a declarative approach) for both platforms. And there will be no restrictions on customizing native UI components (in Xamarin, this was a bit tight). There are three categories of widgets:

- Material Widget;
- Cupertino Widget;
- other (generalized) widgets.

The Flutter team has gone to great lengths to ensure that widgets are indistinguishable from native components. Thanks to this, you can get an excellent user experience from the application. And even the thought will not arise that the application is developed using any cross-platform framework.

Another plus - quite distant and transparent - is that at the moment Flutter is the only way to develop under the mythical Fuchsia OS from Google. If it ever comes out (which is not certain), Flutter provides an opportunity to be ready for it.

It is impossible not to mention the Everything is widget paradigm, which is used in Flutter. There is no usual division into some kind of conditional Activity and Fragment. All that we see in front of us is a widget. We create other widgets by adding them together. I find this approach scalable, powerful and easy to understand.

However, interaction with native components is still required to unlock the full potential. That is, in addition to the Dart language, a developer needs experience with Kotlin / Swift. And we are again at a dead end with the problem that the knowledge of a specialist should cover three languages. And this can go sideways for the budget (fortunately, such specialists are not three times more expensive than ordinary natives).

There are also more minor problems, such as problems with code generation, working with Media and JSON. But we must take into account that, firstly, Flutter is still at the stage of active development, and secondly, these minor head problems cover the possibilities and prospects that this framework opens up for us.

Flutter has a huge potential in the world of cross-platform development, and it can be safely chosen as a development framework in 2022. However, you should be prepared to face some restrictions and things that can "slow down" the work.

Results


Summing up, we can say that the need for native solutions was, is and will remain (at least for a long time). I do not belittle her demand at all and I ask her fans not to throw stones at me. However, the times when creating cross-platform solutions was strongly at the expense of performance or user experience are already coming to an end. The choice in favor of native or cross-platform development can be made based on the tasks you are facing.

If you need access to deep platform capabilities, "freedom" in choosing the path of development or solving software problems, and - probably always will be - stability, then your choice is Native (Kotlin / Swift). Whether you need a minimum time to market (TTM), a tight budget, or you already have a working application and the ability to take some risk with a new software product, cross-platform development is waiting for you. As for statistics, if possible, save money when choosing cross-platform development, there are no official statistics. But as a rule, it is possible to save 25%-30% of development time compared to native solutions.

Related Articles

Add Your Comment

reload, if the code cannot be seen

All comments will be moderated before being published.