To properly evaluate a platform we often look at our existing experiences and evaluate based on what we know. The set of options below present some of insights about how we match up to other cross platform solutions in the market today. But first lets start up with the Codename One benefits:
- Performance - HTML5 is slow to begin with but made slower on devices due to some architectural choices on iOS devices. Codename One performs as fast and even faster than native.
- Portability - while HTML5 on the server side can be ported with some effort, when embedded using PhoneGap like packaging adapting the UI for multiple DPI's becomes challenging. Web technologies were designed for HTTP delivery not for local execution. Codename One was built from scratch to work on all DPI's and provides the visual tools to do so.
- Power - mobile browsers are fragmented and constantly late with new features requiring a full OS upgrade for new features. Basics such as threads aren't at the moment of this writing supported by any device. Codename One provides most of the power and convenience desktop Java developers are used to.
- Stable target - since your code executes on the device browser you are very likely to have device only issues that can't be debugged properly. Codename One is statically linked to your application which means you will have a stable application with an identical version of Codename One on all devices! Since the code is handled by a single entity if you run into problems we can actually help you fix them!
- Native tools - in order to build an application for iOS you must have a Mac and for Windows phone (if supported) you need a windows machine. This is tedious and painful! Codename One uses a build server to remove that need and provides seamless simulator execution, debugging, profiling etc.
- Standard IDE - most such tools have their own IDE's with limited features. Codename One works with NetBeans/Eclipse, which are mature industry leading IDE's.
- Portability - in order to provide portability a developer is limited to the lowest common denominator approach, this requires coding specifics for every platform. Codename One uses a unique lightweight architecture that enables it to offer high level features on all devices.
- Ease - most such tools don't offer features such as integrated GUI builders, themes, localization etc…
Other than that, the tool just deals with the iOS porting of business logic. Requires a Mac and requires that developers work with xcode. It doesn't include a full featured garbage collector (the OS X GC mentioned in their wiki was deprecated on OS X and ARC is not a GC) and isn't really a cross platform solution.
J2ObjC does not provide any sort of platform-independent UI toolkit, nor are there any plans to do so in the future. iOS UI code needs to be written in Objective-C or Objective-C++ using Apple's iOS SDK (Android UIs using Android's API, web app UIs using GWT, etc.).
- Optimized for phones/tablets, this includes support for gestures and complex key layouts
- Proper styles & themeing
- Resource file format/standard GUI builder
- Truly open source
- Static linking
It is remarkably hard to port a scene-graph implementation consistently to every platform and then integrate it with the native platfrom widgets as we are sure the guys at Oracle have found out. Making this sort of implentation performant is even harder as the guys from Adobe found out.
It works only on iOS with this architecture, where other platforms use a somewhat different architecture. It suffers from all the problems of PhoneGap/HTML (mentioned in the first section) and it adds to that all the complexity of working with a Java backend without removing those other complexities.
To make matters worse, since the VM is embedded into the code you are limited to an interpreted mode which means slow performance on top of the existing HTML5 overhead!
Xamarin uses C# as its base programming language, this is a matter of developer taste. However, it has one major drawback to Java: it is only "native" to Windows Phone where is Java is the native language of Android. So on most of the devices in the field it would require a 3rd party VM to be installed. Xamarin proponents try to spin this as an advantage claiming that their VM is faster than the native Dalvik VM on Android. However Dalvik is optimized for size/security & multi-tasking so its unclear how accurate these claims are in reality.
Codename One differs from Xamarin in the following ways:
- Doesn't need a Mac for iOS development - recent versions of Xamarin allow you to use a Mac hosted on the network but this doesn't solve the issue for a mobile worker.
- WORA (Write Once Run Anywhere) - Xamarin has some portability libraries mostly for IO etc. but it isn't designed to be a WORA solution. Developers need to learn platform native API's and behaviors for every platform.
- Java - Xamarin is a C# solution. This is a matter of developer preferences although Java has the advantage of being the language of Android.
- GUI Builder - Since Xamarin isn't a WORA solution the GUI isn't portable, thus localization, branding and all resources need to be adapted to every platform.
- IDE - Xamarin has its own IDE or Visual Studio from Microsoft. Codename One works with all major Java IDE's NetBeans, Eclipse & IDEA.
- Free Version - Xamarin has a free version with very limiting stipulations which aren't present in the Codename One free version