Android App Development, IOS App Development & Cross-Platform App Development(React Native) - Which one to choose? 
Tags: android, ios, reactnative, beginners
Published: 2020-05-31 10:09:45

Application development is quite popular nowadays and of course who wouldn't like to develop a real time working application that works on an Android or IOS device. Even webapps nowadays are gaining quite popularity, but let's keep that aside for a moment.

I have been learning React native for a while for developing cross platform applications. I have been quite familiar with developing Android apps using Java and Kotlin in Android studio as well as IOS apps using Swift in XCODE.

Now developing cross platform apps ,and developing apps for respective Operating systems has its own advantages as well as disadvantages. So, let's take a look into that.

I would like to tell you the benefits of each development procedure rather than performing a versus competition between these.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/cypxyveyv6sm5l14ztit.png)

<center><h1>CROSS-PLATFORM APP DEVELOPMENT</h1></center>
***********************************************************
So, I used React-Native for developing apps. And talking about my experience it was good, i liked it a lot. So, what actually is React-native ?

*""React Native is an open-source mobile application framework created by Facebook. It is used to develop applications for Android, iOS,and Web  by enabling developers to use React along with native platform capabilities.""*-Wikipedia

So, feels great, right? A single framework that develops Android, IOS as well as Webapps. So, is this the idle choice for app developers?Let's take a look into it.
>#Advantages-

<ul>
<li><h3>Single code for developing apps for different platforms-
</h3>
</li>
</ul> 
Yes it does make it easy, using simple codes in javascript and JSX (Javascript XML) does make it easier to code apps. I found the codes to be quite simpler and i didn't require much effort to access various components and portions. While using Java/Kotlin i found myself messed up at certain types trying to access different objects from different classes and as everything in Java is based on classes it does become hectic at times.But comparing this to swift yes it wasn't that difficult. I found the code difficulty level of React-Native and Swift to be quite same, but java and kotlin were at a quite higher level as considered in terms of code difficulty.

<ul>
<li><h3>Layout-
</h3>
</li>
</ul>
Now it hugely matters how beautiful your app looks. And i strongly feel the User interface of the app is what makes it so beautiful. Regarding this i feel React native has an upper hand above native development. 
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/xg16q42jntnugmo6zqcv.png)
React native will provide you with a lot of options to make your app beautiful. Using libraries such as REACT NATIVE PAPER apps get a beautiful native look. Now if taken a look into native development, can't apps be given such a beautiful look?
The answer is yes it is possible but yet difficult. Designing is quite easier is what i found while using react native,rather than native app development. The best part about react native is that creating animation for different components of your app is far more easier than in native development. 

<ul>
<li><h3>Other basic advantages-
</h3>
</li>
</ul>

-Highly time saving since you need to work on a single codebase.
-Faster app building
-Responsive UI

####Another advantage which i often notice is the fast reload....it basically is a feature which reloads your phone to view the changes in your app immediately. Unlike native android development, you don't have to build the app again and again to view the changes and of course it gets included under the time saving advantage of react native.
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/dl5b06wn3fpdz7x2hwha.png)
####Another important advantage of React native is that you can work on it on a low end PC or laptop. Generally in native development you will need Android studio or XCODE which requires a good PC/Laptop to work upon, and the worst thing you can run XCODE only in a MAC (Bad apple, very bad apple). And then comes the simulator part IOS simulators require the hell lot of memory out of your laptop/PC, and the same goes for Android. For someone using a AMD processor laptop its more hectic.

>#Disadvantages-

<ul>
<li><h3>Average Documentation -
</h3>
</li>
</ul>
 
Being a coder documentation is something one does refer to most of the times ,once he/she has learnt the basics. And what i observed was that React native has a average documentation. I also took a look into flutter but i wasn't much impressed but thats my own opinion after all. But talking about documentation of native app development, cross platform stands no chance against it. Not only they have sufficient examples but also their documentation is brief and well explained.

<ul>
<li><h3>Third Party Dependency-
</h3>
</li>
</ul>

React native tho has its own libraries of widgets they are not sufficient. Rather what i observed was the fact that React native depends a lot on third party libraries , which may be good for some and bad for some. Comparing this to native development, their widget collection is vast and are highly customizable. Another thing to note is that customizability of react native components (Own/ Third party) is sometimes limited. Also you have to install packages for different libraries when you need them which is not the case most of the times in Native development.

<ul>
<li><h3>Layout-
</h3>
</li>
</ul>

Wait! i just said that react native has an upper hand in terms of layout, then why in the world am i including it here? Its due to the fact that IOS and Android have their own design rules and regulations. You will become more clear about this as you see the below picture.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/bowz5sm96s9tqkbijgtd.png)

Airbnb has its own design guidelines so even if the app is based on React native, developers have to edit its code regarding the layout. But this is not the case in native development since their default UI elements follow all OS and design guidelines.
Also most of the times you will observe just building the apk or ipk or web modules of the React native app wont make it work out. You will often face designing and aligning issues in different platforms. So, even if the codebase remains the same, you will have to edit out the layouts and designs in Xcode / Android studio in order to make them work in different platforms.

<ul>
<li><h3>CONFUSION-
</h3>
</li>
</ul>

One big confusion which I faced was whether Cross platforms could produce IOS apps on windows. Being a windows user and I always wanted to produce IOS apps on windows. So, I thought cross platforms would help me for the same. But if you are new to application development, it will be quite good for you to note that React native produces the same codebase for all platforms but in order to build them, you will have to follow their way. Basically I mean you can't produce IOS apps without a MAC. The only way I found was to run MAC OS on VMware and then use Xcode to get my job done.
Wait why don't I just simply get a MAC to get my job done? Simple answer, I belong to a middle class family, so I can't afford one(#SYMPATHY for me).

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/22bvf3hfnv5s12bau658.jpg)

<center><h1>NATIVE APP DEVELOPMENT</h1></center>
******************************************************** 
Ok so coming towards native app development. I generally use Java and Kotlin in Android studio for android apps and Swift plus Xcode for IOS apps.
So, lets directly get to the point, i have already explained a lot of advantages that natives have over cross platforms in disadvantages of react native and disadvantages of native development in advantages of react native. So , here i will discuss in general what are some more advantages and disadvantages of Native app development.

Ever heard about storyboards? Ahh i love them, a lot. They just make my work so easy. So what basically is a storyboard?

__*""A storyboard is a visual representation of the user interface of an iOS application, showing screens of content and the connections between those screens. A storyboard is composed of a sequence of scenes, each of which represents a view controller and its views; scenes are connected by segue objects, which represent a transition between two view controllers.""*__

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/3quaz19i5m7sbl5o60j6.png)

So, storyboards in Xcode will give you a brief idea about your app and this is something Xcode/ native development specifically native IOS development has an upper hand over cross platform development. So this takes me to my next point-

In Native app development you can make the most out your respective OS. If you develop android apps then native android development will allow you access to most of the features of a Android device like GPS,bluetooth etc and the same goes for IOS app developers but this is not the case for cross platforms. Their access is limited.

Now if you come from a background of a Android app developer using native development then you will find it quite familiar to work with JSX which is the layout format of React native since native development uses XML. But if you develop apps for IOS you will find it quite difficult to switch to React native.

<center><h1>CONCLUSION</h1></center>
**********************************************
So, we are at the end. So, by now you would be wondering which is good cross platforms or Native Development? The answer solely depends upon your need. Every form of development have made their sacrifices in order to achieve their aim. Cross platforms may not be that easy, may have limitations but they do achieve their aim that is what they are named!! They do provide a single codebase. On the other hand native development might not be that responsive and flexible but they do achieve their aim that is to get their apps get the best out of their respective OS.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/cgqylz22jsjppvluykmi.jpg)

If you are still wondering about which development way is better do take a look into a real life example i.e. Telegram and instagram. While instagram uses React native, Telegram uses Native app development and is developed using Java. So you might be using these apps now on a daily basis as they are too popular so this will give you an idea about both the development methods. You will ofcourse find that both of the apps have quite good and beautiful UI/UX. So this does show the fact that no development language is better than the other one, every development platform has its own benefits and advantages. So, in the end it all comes to you, which suits you cross platform development/native development.
I have also made some good beautiful User responsive apps using both native development as well as cross platform development.Do take a moment to check them out-

Native development :- https://github.com/Hyper-Matrix/CORONA-DETECTOR

Cross platform development :-https://github.com/Hyper-Matrix/RESTAURANT-APP

Choosing a development platform isn't that difficult just try to identify what prerequisites do you need for learning to develop apps in natives or in cross platforms and tadaa you have your answer. If you know Java and have a windows machine, Android app development using Android studio is the best option for you. If you come from the background of web development then React native will work like a charm for you. And if you have a MAC, swift is damn easy to learn and you own a beast so developing an IOS app in Xcode will be beneficial for you.

*So, this was my first technical post. If you find me wrong at any point do tell me in the comments below. And do share your views i would love to hear them.*

And yes regarding who won the battle between Cross platform Development and Native app development....THERE WAS NEVER A BATTLE BETWEEN THEM AT ALL......

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/cnivtc7qkhatnldbpvgo.jpg)

<center>__*THANK YOU*__</center>