The mobile application industry has grown tremendously over the last few years. In 2017, revenue from app stores known as App Store, Google Play and other sources sum-up to a whopping amount of US$86 billion. This number is a reflection of the great success of the platforms, which boosted the business of companies and the creation of several applications that revolutionized the way in which the users of mobile devices organize, move, and use the products. In fact, mobile applications have become a necessity in everyday life for people and businesses.
This rapid growth has brought a huge challenge to mobile application developers in order to meet this market demand: creating, in record time, applications that work very well across multiple platforms (Android, iOS, Web, etc). The solution to this was the development of frameworks for creating cross-platform applications, it means that from a single code, the developer can build an application for several platforms. Two of these frameworks are the main focus of this article and will be discussed throughout the text.
This article aims to introduce the reader to existing alternatives for the development of mobile applications (Native or Hybrid) and to show a comparison between two frameworks that promise to be the future of mobile application development: Flutter and React Native.
The “traditional” way to develop a mobile application is to use the tools and languages specific to a particular platform, which in most cases are made available by the companies that own the technology. For example:
- For Native Android Application development, you would utilize the tools, SDK, interface elements, all made available by Google, using Java and/or Kotlin programming languages.
- Devices that have iOS as the operating system use the tools provided by Apple and the languages are Objective-C and Swift.
Native development has many advantages, most of them related to application performance since all the code and tools used were built specifically for that platform. The performance is a determining factor in the usability and performance of the application, as well as making a big difference in the user experience.
The disadvantages are simple and very easy to point out. The first is that if you or your company wants an application running on multiple platforms, you need to have the knowledge of both, hire someone who has it, or hire multiple teams specific to each platform, and it makes development somewhat more costly in many ways.
One of the factors that make this so difficult is the lack of professionals who master native development since learning is an onerous process. In addition to the cost, the development time may be longer, since developing native requires the developer to worry about details that, for smaller applications, could be easily ignored.
Because of the drawbacks in “classic” native development, the popularization of mobile applications and the great financial returns they bring to startups, independent developers, and large companies, there was suddenly a need to create apps faster and less costly. Thus, cross-platform development was born.
Cross-Platform Hybrid Development
This form of development is cheaper since the development time is reduced because the application can be used in different platforms (iOS, Android, etc), and gives the programmer great freedom to create applications that look identical to native applications but are actually running in a browser.
All the freedom comes with a heavy toll. Escaping the platform design pattern is one of them. iOS and Android systems have several peculiarities, such as gestures, actions, colors, shapes, etc. When an application is developed using a hybrid platform, all of the above factors can be compromised if the application interface is not well planned, affecting much of the user experience.
The hybrid development is more attractive for those who need simple applications and will refrain from using complex functionalities of the operating system of the device. It is a cheap and fast alternative, but the performance, UX (User Experience) and difficulty in using native features such as camera, Bluetooth, storage, GPS, etc., can compromise more complex applications. Some examples of these frameworks are Ionic, Cordova, and PhoneGap.
React Native Overview
Given all the problems identified in the native development and the possible solutions proposed by the community with the Cross-Platform approach, some frameworks currently stand out in the market.
Flutter was developed by Google and launched in 2017. Although new, it promises to revolutionize the mobile world. The documentation is amazing, there you can find detailed explanations about every method there is. It has its own widgets, and it is totally based on Google Material Design. Its programming language is what may be surprising to many, the Dart language framework, launched at the GOTO Conference in October 2011. Although it seems bad to adopt a new language not used by the community, Dart closely resembles languages like JAVA, C #, and C ++, promising a small learning curve for programmers with some experience.
Flutter and React Native
Both frameworks are attractive with advantages and disadvantages. React Native, in turn, has been on the market for longer and has more applications in its portfolio. This provides security for large organizations to risk adopting the framework, which further leverages their reputation.
Flutter, since it was released so recently, still needs to be further exploited by the industry in order to make the platform gain the confidence of developers.
According to Google one of the great differences of Flutter is in relation to its speed, being able to natively show 60fps animations and providing early compilation optimization, which makes the application portable by being compiled into code suitable for ARM and x86 architectures, compatible with IOS, Android and others. A disadvantage that can be pointed out is the use of widgets of their own, which can cause the same problem as Cross Platform Hybrid applications. There are up and coming implementations of the iOS UI a.k.a. Cupertino, however, the logistic of implementing the native look and feel for both platforms may be a bit painful.
React relies on native APIs for WiFi and GPS, with good third-party solutions for cameras, sensors, biometrics, Bluetooth and NFC. However, it has a weakness in relation to building custom graphics. There are no good APIs for developing this functionality, making these types of features more complex to perform, implying native code development.
The situation is slightly different on Flutter. Most hardware APIs, with the exception of Bluetooth and NFC, are either under development or are already available. Depending on how fast all of this is done, Flutter can become the winner with respect to hardware APIs.
Part of the comparative framework made by Agile Engine can exemplify some of the differences found in the frameworks, giving an overview of the state of each.
Which should I choose?
Both excel at cross-platform development. However, two things should be taken into consideration in spite of industry adoption. One is Community Size and the other is Documentation.
Though with a smaller community, Flutter has gained a lot of traction over the past year. Google is investing a lot in it since it will be the main way to develop for its up and coming OS, Fuschia. The documentation is another point that should be taken into consideration, which React Native severely lacks.
With that said, Flutter would be the best option as of March 2019.