Mikko Seppä

Mikko Seppä

Tech Director

mikko.seppa@vincit.fi
+358 40 151 4642

LinkedIn

There are numerous ways to build mobile applications, and this blog post is all about comparing the pros and cons of the different approaches. My former colleague Juha Riippi started this blog post series around eight years ago, and the mobile tech field has been constantly evolving ever since.

Today native app technologies still persist as a strong choice for many applications. React Native and Flutter are both getting a strong foothold in the application development field. There are also other rising cross-platform technologies like Kotlin Multiplatform that I’m going to introduce in this post. So what is actually a cross platform technology? It means developing a mobile app for two or more operating systems, like iOS and Android, and sharing at least some of the codebase. This approach has many advantages including significantly faster and more cost-efficient development.

When selecting a mobile technology we always first consider the requirements and future roadmap of the project, including the business requirements and the existing technology environment. The most important thing is that the mobile technology choice is made based on real data and requirements, instead of just selecting a tech which feels the most comfortable for a developer. This way the best available technology is always chosen for the project in an objective manner.

Native Apps

Native App development means developing mobile applications using tools and programming languages provided by the mobile platform (iOS, Android). Native app development always provides the best performance that the platform can offer. Using the native tools it’s also really easy to build user interfaces that follow the user interface guidelines of the platform, and feel natural for the user. One downside of this, when compared to cross platform technologies, is that the code must be written separately for each platform, which increases the amount of work in the development and maintenance of the app.

Vincit has wide knowledge of native application development, for example Hesburger, Superoperator and Moovy projects have been developed with native technologies.

Pros:

  • Officially supported by the device and operating system manufacturers.
  • Native performance.
  • Native look and feel.
  • A good selection of well maintained 3rd party libraries available.
  • New OS features available immediately.

Cons:

  • Amount of work is higher compared to the cross platform technologies.
  • Developers need to master two totally different mobile platforms and programming languages.

React Native

React Native is a cross platform technology developed by Facebook, and supported by the open source community. The technology was released back in 2015, and it has been developed actively since. React Native can be used to develop mobile applications for iOS and Android (and lately also for Windows) using a single codebase.

React Native is based on React, which is a really popular framework for building websites. It shares many of the same features, including the JavaScript/TypeScript programming language. This can make transitioning to mobile development much easier for many developers. Many companies already use React in their web projects, so it makes sense to select React Native as their mobile technology.

Vincit has already used React Native in various projects, one great example is the NaviWheel app for G-Boats.

Pros:

  • Well maintained and actively supported.
  • Less work. Most of the code can be written once.
  • Easy to learn for web developers that have used React.
  • Plenty of 3rd party libraries available.

Cons:

  • Adds an extra layer of dependency for the whole project.
  • Operating system updates might complicate things, and it might take time before they are fixed.
  • New operating system features might come available later than in native development.
  • Missing some officially supported 3rd party libraries (open source alternatives usually available).
  • Slightly slower performance than native apps.

Flutter

Flutter is also a cross platform technology. It’s developed by Google, it was initially released in 2017 and it’s also supported by the open source community. With Flutter you can write all of the application’s code for iOS and Android with a shared codebase. Flutter’s programming language is called Dart, which is a fairly new but already a well adopted language.

One big benefit of Flutter if compared to React Native is the performance. The application code is compiled directly into machine code, giving similar performance as running native application code. One thing to note is that a Flutter application draws its own user interface, meaning it doesn’t take advantage of the native UI elements of the platform. In practise it means there might be slight differences in the look and feel of the UI components, if compared to a native application. Vincit has already done numerous successful projects using Flutter.

Pros:

  • Well maintained and actively supported.
  • Less work. Most of the code can be written once.
  • Good performance.

Cons:

  • Harder to follow platform specific UI guidelines than native development.
  • 3rd party library availability is fairly good, but still limited.
  • Adds an extra layer of dependency for the whole project.
  • New operating system features might come available later than in native development.
  • Missing some officially supported 3rd party libraries (open source alternatives might be available).

Kotlin Multiplatform

This technology has been developed on top of the Kotlin language, which is nowadays the preferred programming language for native Android development. The technology allows writing code also for the iOS platform using the Kotlin language, which normally would not be possible.

Kotlin Multiplatform is a great tool for a project where benefits of native app development are desired, but the amount of duplicated work is wanted to be reduced. Something to note is that it doesn’t yet allow writing the UI code in the shared codebase, meaning that at least part of the code needs to be written separately per platform.

Pros:

  • Android developers don’t need to learn a new programming language.
  • Kotlin language is fairly easy to learn for iOS-developers that have used Swift.
  • Fairly easy to integrate into an existing native mobile application project.

Cons:

  • More duplicated work if compared to React Native and Flutter development.
  • UI related code still needs to be written separately for each platform.

Progressive Web Apps (PWA)

Progressive Web Apps are basically just regular websites, but with some additional capabilities that bring them closer to actual mobile applications. Their biggest benefit is that the user doesn't have to install anything, which makes the onboarding new users to the service much easier.

Pros:

  • Web technologies that many developers are familiar with can be used to develop PWA apps.
  • Can be used with any mobile device or computer with a modern web browser.
  • Less work. All of the code can be written once.

Cons:

  • Limited capabilities if compared to real mobile applications.
  • Available capabilities vary per platform, for example push notifications, camera, maps, geolocation and other mobile operating system features.

Unity

Unity is a little different than the previous technologies, because it’s actually a game engine. Unity supports developing applications for over 25 platforms, including mobile, desktop, consoles, and virtual reality. It has been estimated that Unity is used to make around 50% of all of the mobile games released, so it’s really popular.

But Unity is not restricted for creating purely games only. So for what has Vincit used Unity for in the past? Yes, we have written pure games with it, but also any type of applications that have some gamification elements in them, and also applications that include virtual reality or augmented reality features.

So which one to use?

  • What's the lifecycle of the app? If it's intended to be long, remember that investing in a third-party framework always involves a risk. Native apps won't likely stop getting support from Apple and Google.
  • What is the scope and budget of your project? Using cross-platform technologies reduces the amount of work it requires to get a first release out to the public.
  • Does you app include hardware intensive features, or other features that might not be available
  • What is your existing technology environment? Is your company already familiar with some technology stack? For example companies that have already invested in React, it might make sense to select React Native.
  • Is your app a game, or does it include gamification or AR/VR features? You might want to consider Unity as the technology choice.
  • Take a look at the features and requirements of your app. Would PWA application work for your use case?

Would you like to learn more about this topic? Download the Everything you always wanted to know about buying mobile apps but were afraid to ask guide!

 

Tykkäsitkö artikkelista?

Anna pienet aplodit!