At first, you have to know that there are two ways to make cross-platform apps: a language compiled to the native or HTML5. This article is only about compiled to native.
It’s a better idea to use the first option if you’re not a web developer because the web development is already a complex ecosystem. Trying to learn web + mobile in the same time may not be the best thing to do, even more if you want to bootstrap quickly.
The current platforms that I know are :
There are a lot of other platforms but or they are so new that it’s too premature to use in production, or they didn’t get a good community to support them.
Their advantages are undeniable :
- Run faster than HTML5 (because it’s compiled)
- Native UI elements
- Access to low-level APIs (Bluetooth, NFC, etc.) This argument is partly wrong with HTML5, I will explain in the next post.
But unfortunately, it comes with drawbacks :
Lot of them are paid
It doesn’t bother me to pay, but I hate when you have different plans, and you need to take the most expensive one to unlock some features. Corona will build your app offline only if you pay $79/month/developer!
Compilation & Debugging
All of these platforms come with an IDE that help you to debug your application. Normally they covered all the possible errors but if by any chance you got a naughty bug in your console, I don’t think you will be able to debug it. You don’t have hands on the native language of the OS; the platform builds your app without the sources.
I tried Titanium, and I was disappointed that there isn’t a default GUI editor. The documentation is well explained, but the way you drag’n’drop elements with Xcode or Android Studio is damn good. Corona has one. I’m not sure for the others.
Access to native code
Not all of them allow you to call native code. So if you’re looking for an SDK of your favorite service and there is no access to native code, you need to wait the platform to add that SDK precisely.
I think it’s the most painful drawback. Even if it’s a language that you already know, the APIs & architecture are certainly different. You will have to learn (it takes time) and in the end, you don’t become a mobile developer but a “Titanium” or “Corona” developer.