By far, one of the biggest challenges as a mobile developer is finding a good framework. In history, there have been two ways to develop mobile apps: Natively and Web-based.
Designing an app natively just simply means writing for the device's specific Operating System. Designing a Web-based application means to design an HTML page that looks
like a mobile app, but in essence is powered by the phone's browser. Native apps give excellent performance, but will take more time to develop and will only run on
the specified Operating System (Android OR iOS). Web-based apps on the other hand will give excellent portability, allowing the app the run on any device
(Android AND iOS). However, since web-based apps are essentially ran though the phone's browser, we don't utilize the full potential 'power' of the phone. Therefore,
much efficiency lacks in our application.
When designing a phone app natively, we usually use Java + Android SDKs for Android, and Objective-C/Swift + iOS SDKs
with iOS. Designing an app natively will always produce the most efficient application, since we are 'tuned into' the device's specific Operating System. However, if we design an app natively,
we sacrifice portability. We are forced to write the same application twice on both platforms, and learn both device's languages, frameworks, and caveats.
Therefore, in order to have this app run on the phone, it needs to essentially execute the code within the phone's internet browser. Some popular frameworks
used to achieve this are Cordova and Ionic. Essentially, Cordova and Ionic take advantage of something called a 'Web View', which iOS and Android both have.
A web view is nothing more than a bare-bones internet browser; it takes in web code, and outputs the web view to the screen. Note that in order for a web-based
application to truly look like a native application, the 'browser-bar' (AKA where you type URLs into) is cut off completely. However, a browser wasn't designed
to compute somewhat 'expensive' operations, which a phone app might need. This is where efficiency lacks in web-based apps.
React Native is by far the perfect balance between portability, and efficiency.
In React Native,
The funny thing is that React Native apps are not web-based apps, and their not quite native apps either. It's somewhere in-between.
Now by far, React Native is not perfect. It is still a very new open-source project. Various tools (ex. web-sockets)
have been difficult to implement in React Native. However, the beauty of React Native is that we can tinker with
I have been using React Native for about a year now, and have absolutely been loving it. And don't get me wrong, it never hurts to learn native app development as well. Learning native development is
actually beneficial if you want to write custom, native modules in the future. However, if you only want to write your apps natively, it will take more time and effort to produce two, identical apps for iOS and Android.
For web-based app development, I personally do not recommend Cordova and Ionic.
I have used these in the past and have seen the efficiency truly lack for non-intensive applications. In my opinion, the portability benefit does NOT outweigh the cost of
the poor efficiency. I believe that React Native is by far the perfect balance between portability, and efficiency while
developing mobile applications, and is 'the next big thing' when it comes to mobile development.
- Jonathan Mitchell, 20 Sep. 2016