Development teams build mobile apps in two ways: Native or Hybrid. In the context of this article, we will consider Progressive Web Applications or PWAs a subtype of hybrid app since they run on a URL and are natively delivered to the device via its browser.
Both Native and Hybrid have pros and cons and offer different trade-offs in features, performance, cost, and development difficulty. Let's have a look at each one of these mobile development approaches.
Native apps are designed and coded specifically for a dedicated operating system and its specific programming language. For example, Java and Kotlin are the native programming languages for Android, while iOS has Swift and Objective-C.
Generally, performance-critical apps (such as video games) take advantage of the naive approach. These apps run directly on the mobile device operating system, allowing for better performance and unrestricted access to the devices' sensors and peripherals.
These advantages come with some trade-offs. Native app development is not easy, there's generally a shortage of native app developers, and development costs are high.
Native development is not multi-platform. If a company needs its app on both Android and iOS, it has to be developed twice. There is usually no reusable code between native platforms.
Objective-C was the first programming Apple used to target mobile applications development. It is object-oriented and uses syntax from C and messaging aspects of Smalltalk.
It's not the most developer-friendly language. The Objective-C syntax can feel cumbersome, and programs may be tough to debug.
While it is still supported, the development community has been continuously asking if its end of life is near.
Objective-C powers some core modules of iOS, and while it is unlikely that Apple will remove support from it, they encourage developers to use Swift instead.
Swift is the preferred language to develop iOS apps. Introduced by Apple in 2014, it is the successor of Objective-C (although both languages are still maintained in parallel). Some developers may find Swift syntax a little similar to Python.
In comparison to Objective-C, it is easier to read, has more up-to-date support, and, in short, it is a mature and modern language.
While Swift is general-purpose, it is also a more modern language that includes mobile development aspects in its design, such as the Cocoa mobile framework.
Swift has many features supported in general-purpose languages like Java and C++, such as closures, generics, and type inference.
The Swift compiler is efficient and modern and will help developers catch errors before running the code.
Developers may find the Swift learning curve a little steep. Swift only works on iOS devices; many developers do not want to constrain their careers to one platform, especially in typical software outsourcing destinations in emerging markets.
Java is an object-oriented language released in 1995 and was primarily used to develop server-side enterprise backends (the acronyms J2EE and EJB will ring a bell to senior developers).
Given the open-source nature of Java at that time, it was adopted by Android as the official language for writing mobile apps since its launch in 2008.
Java runs on top of a virtual machine called the JVM, making it a cross-platform language. Any device with a JVM compiled for its architecture and OS can run Java code (called bytecode).
This multi-platform nature made it a natural choice for mobile devices when smartphones reached the markets.
However, Java is a pre-21st century language developed for a completely different world and carries many legacy aspects. Many see Kotlin as the natural successor for the development of Android apps.
The Kotlin project started in 2010 as an open-source initiative. In 2016 version 1.0 was released. Shortly after, Google announced it would begin to support Kotlin officially.
Kotlin compiles to Java bytecode (the "machine language" of the Java Virtual Machine or JVM). This enabled any device with a JVM to run Kotlin.
Any Java library can be accessed from Kotlin, and many consider Kotlin a cleaner version of Java itself. Popular IDEs like IntelliJ support Kotlin for native app development.
Many developers consider Kotlin to replace Java altogether, while others think they will indefinitely coexist much like their cousins, Objective-C and Swift, from the iOS world.
Several cross-platform frameworks are available for hybrid mobile app development, such as Flutter, React Native and Ionic. PhoneGap and Apache Cordova were also popular hybrid development approaches until Adobe discontinued them in 2020.
The cross-platform nature of hybrid development helps companies reduce development time and costs (apps are developed once and run on different platforms via the chosen framework).
However, this comes with a bit of performance penalty and limits in device hardware access. Also, each particular cross-platform framework has its learning curve, while native development is based on popular languages like Java and C, well-known to programmers worldwide.
According to its GitHub repository, Flutter is one of the most popular hybrid mobile app frameworks, followed closely by React Native and Ionic.
Officially supported by Google, Flutter brought a new hybrid mobile app development approach. It enables the creation of Android and iOS apps from a single codebase.
With React Native and Ionic, Flutter is considered the base alternative for the discontinued PhoneGap and Cordova projects.
Flutter has a massive repository of highly functional widgets and animations that help developers create modern, live-looking user interfaces in less time when compared to other native and hybrid alternatives.
Mobile developers can instantly see their changes when coding or debugging the app thanks to the hot code reloading support, enabling shorter programming cycles.
Flutter runs on top of DVM, the Dart Virtual Machine, which holds a widget tree in memory that allows the aforementioned hot code reloading.
Google Pay, eBay, and Alibaba are some examples of top mobile apps built with Flutter.
Together with Flutter, React Native is one of the most popular hybrid mobile app development frameworks.
Although similar in name to ReactJS (both released by Facebook), React Native does not run in an HTML Webview; instead, it generates native code and renders components via API calls to the Native Modules.
Developers using React Native can deliver impressive UIs for both iOS and Android. This framework supports many third-party libraries that can be easily integrated into a project for enhancing different capabilities.
Some widely known apps built with or including modules developed with React Native are Instagram, SoundCloud, and Wix.
While not as popular as React Native and Flutter, Ionic is undoubtedly a contender in the hybrid apps development world, with more than 13 thousand forks on GitHub.
The first version of Ionic was a UI kit for wrapping AngularJS apps on top of Apache Cordova for mobile cross-platform support. This is not the case anymore.
A couple of years ago, Ionic replaced Cordova (now discontinued by Adobe) with Capacitor. Shortly after, they started supporting other SDKs apart from Angular and added Vue and React support.
Like Flutter and React Native, Ionic also enables cross-platform development based on a single codebase. Because it supports different frameworks, Ionic does allow mobile app development, PWAs, and web applications.
The popular streaming search engine JustWatch, the Diesel brand, and Electronic Arts are examples of apps and companies that use Ionic to build mobile apps.
The world has evolved from web to mobile-first to mobile-only. Companies worldwide strive to become more efficient in mobile apps development, looking to hit the market first with an outstanding user experience.
There are two approaches development teams can take when facing a mobile app project: Native or Hybrid. Native development means coding in a traditional language like Java or Objective-C for each specific platform.
On the other hand, Hybrid development means relying on some framework, library, or SDK to reuse a single codebase for different platforms. Flutter, React Native and Ionic are the top choices at the moment. While sharing a hybrid approach, they have their differences, pros, and cons.
Notably, while Flutter and Ionic enable a more efficient and scalable way of building HTML5 apps, React Native does not rely on HTML and communicates to actual native components for each platform.
We are experts in mobile apps development. Reach us out for your next native or hybrid app project here.