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:
- 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.
- 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:
- Common business code, separate UI code
- Xamarin.iOS, Xamarin.Android (C# and any .Net language)
- RemObject Elements (choice of Swift, Java, C# and their proprietary language
- and more popping up ....
- Common business code, common UI code
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 .