During the last few years the mobile market has grown in a pace that is so fast than sometimes even me, a mobile developer, feel that I cannot keep up. And as the market grows everybody is looking to build the next great mobile app. Of course optimally you want to cover as much user base as possible. Unfortunately this means supporting quite a few different operating systems. Now this is the answer I give to every customer who asks how many operating systems a mobile application should support: iOS and Android. That’s more than 90% of the market. Blackberry is dying and Microsoft already focused Windows 10 on PC’s and tablets mostly. The addition to cost and time is substantially larger than the percentage of users you will gain. And once we get past this, the next question is: Should you go native or build a cross platform app? And the correct answer is: there is no correct answer! Sounds a lot like a politician’s answer when asked to comment on a controversial subject and he is trying to keep everybody happy. Very useful, huh?
Native development means using the platform-specific tools provided for the mobile operating system by Apple and Google. For Android is Java as a programming language and the Android SDK, for iOS is either Objective C or Swift as a programming language and the iOS SDK.
Cross-platform development is a solution in which one code base (usually HTML5/CSS and JavaScript) is used which is then compiled for multiple platforms. You can choose to use one of the many available solutions (Appcelerator, PhoneGap, Xamarin, Corona SDK, Unity) or write the code from scratch. Then you can wrap the code in a web view container. Some solutions go as far as claim that they compile the code into native but that is not exactly true.
Now that we sorted out the terminology let’s go back to the original question: Native or Cross-Platform? There is a longer answer that is much more enlightening but before I go on I want to set the record straight. The short version of the long answer is still there is no correct answer!
First every situation is different and for every mobile app the developer has to weigh in the pros and cons of both solutions against the needs based on the mobile app requirements and make a decision. The right answer lies in balancing out cost, time to market, app performance and providing a great user experience.
In certain cases the answer is easier: Are you building a 2D game? Choose Corona SDK. Will your app have a lot of 3D graphics? If you can afford it choose Unity. When high performance is essential, when you need to process large amount of data on the client side or when your app relies heavily on native capabilities of the OS (like Location, Push Notifications or the Camera) you have no choice (if you are sane) than to go native. Are you just trying to get an app in the app store presenting your company because everybody has a mobile app? A better solution is a responsive / mobile optimised website.
As I said before to make a decision you need to consider the cost, time to market, app performance and providing a great user experience. So before making a decision here is what you need to know:
There are two major risks when developing a cross-platform app:
One final piece of information: Facebook and LinkedIn started by developing HTML5 apps but then decided to drop HTML5 and move to native development.
Do you still except a short answer? Choose cross-platform if you are looking for a cheap, fast way to get to the market. If you truly want to build the next great app and stand out of the competition then go native.