Thursday, June 15, 2017

Native Mobile Cross Platform development tools and frameworks war ... part 1

 There are two main mobile platforms on the market, namely iOS and Android.. These are followed by platforms not having too much impact on revenue streams of software mobile developers , for example Blackberry, Windows Phone, and some other I really don't care about .

A native way of developing apps for  iOS (iPhone, iPad, iWatch, iPod ) is using Objective-C and/or Swift. The Objective-C is one of the best languages I have ever seen but unfortunately other people think otherwise, that's why Swift have been invented.

A native way of developing apps for Android is using Java (Dalvik) . Or one can use any language running in the JVM.

Writing and maintaining applications written for these major platforms may be difficult and expensive, if you want to keep these apps in sync across the different platforms. What is needed, is a layer, that will abstract away the hardware and platform differences and that will make it possible to code a program against a generic platform . Whatever is a non UI code, it is easy to write a code that will be the same across the platforms. The UI code is tougher to write because the way of rendering the native controls is different and the navigation mechanism between pages is different too across the platforms.

There are two major approaches to write the apps:

  1. Write a common code which contains no UI functionality and does not access any hardware feature of the devices and put it to a library , which will be shared by iOS and Android while maintaining a separate code base for UI on these two platforms. 
  2. Write a code that will abstract away even UI rendering so we can write a common UI code for all supported platforms. 
In order to be able to use these two approaches, it is necessary to use a single programming  language per an approach. 

These approaches are supported by major players on the market: 
  1. Common business code, separate UI code 
  2. Common business code, common UI code
    • Xamarin.Forms (C# and any .Net language) 
    • NativeScript   (Javascript, Typescript and any language transpiling to Javascript)
    • and more popping up ....
In next article I will try to dive in to cons and pros of these different approaches. I have picked only those as outlined above , there are many more frameworks trying to achieve the same thing .