Mobile applications are becoming more important in the digital landscape and mobile projects explode. The mobile world is completely different from the web as I propose to share my experience to help you make the right choice when developing an application.
Currently, there are three ways to develop a mobile and / or tablet applications.
This is obviously the first solution that comes to mind. Native development is to develop with the tools / specific to each operating system languages.
• Objective C with Xcode IDE for iOS (You will need a Mac for dev and compile the app)
• Java with Eclipse for Android
• C # with Visual Studio for Windows Phone
The advantage of this method is that you will be able to benefit from the elements specific to each operating system for faster and cleaner development. We can even create their own components inheriting the properties of native components.
The development is fairly intuitive with dedicated IDE (XCode is one of the most pleasant development tool to use, it can not be said of the Eclipse solution …).
However there still has a downside. Android becoming increasingly used companies want to have an application that runs on Android and iOS AND it quickly becomes very problematic.
• 2 = 2 different platforms completions codes
• An increased development time
• Updates to painful days (since it is necessary to postpone the change between platforms)
The price of a native development so skyrockets when you want to have an application that runs on multiple systems. In addition we must add to this price problem, quite a learning time (1-2 months per language) which can be problematic for a freelancer (the time spent in training is not profitable)
For example if you want to create a table we use the following code
And the system will compile it in a tableView on iOS and Android. The advantage is multiple:
• 1 Code = multiple platforms
But all is not rosy. We quickly realized that the API elements that are available on both iOS and Android are not numerous. And even the common elements have a completely different behavior from one platform to another. For example, a tabGroup will have its tabs down on an iPhone app and Android app on top (over the rendering is horrible on android).
The other problem is the rather limited customization of native elements. One has only to see the hundreds of people trying to put a forum for understanding the tabs extended to the problem.
I think this solution, while interesting theory turns out to be unusable in the case of an app with a slightly different format than the native format.
“HTML An app that’s not really an application!” – The guy in the background
// For example if we want to take a picture with the phone app with PhoneGap // More info on the doc: http://docs.phonegap.com/en/2.9.0/index.html navigator. device.capture.captureImage (…)
However, even if our app is coded in HTML there are some parameters to consider:
• The phone does not have the same flow as a computer, be careful when loading remote content
• The cross domain AJAX is forbidden, you will be limited to calls JSONP
Which solution to choose?
I tested 3 solutions mentioned in the development of several applications and I came to the following conclusion.
If you want to develop a specific application for an operating system can be incessant to form in the required language and develop using the tools specific to the chosen system. Beware though if like me you were raised with web languages. Mobile development software development is close, you will discover the joys of Compilation and Memory Management
HTML development is in my opinion the most viable choice in general. It allows to develop an application that operates quickly and quite the same way between the different platform. Be careful though to mobiles (super slow flow, an i frame on iOS is not scrollable, we can not cross domain Ajax, fixed position to forget …). Regarding the compilation you can use either Phone Gap or Titanium (Phone Gap even offering a compilation cloud, sending your html => it returns the app you compiled).
Finally, the hybrid development is in my opinion not very interesting as, despite an interesting promise, you get faster with the same disadvantages that a native app: A code, platform and time off putting compilations during the debug phase.