It's a bit confusing - from looking at the tutorial videos in the docs, it seems you have to purchase the server in order to actually make the real build for a device, but the site doesn't really clearly state this.
I'd stick with robovm for cross platform capabilities, or, use Haxe.
That's not true, you can build apps for free.
Codename One has a build server on the cloud, which simplifies the whole build env for the developer.(you can use a Win machine to develop for iPhone).
The uses of this build machine has free account and paid accounts.
Please consider adding a support of building locally, without your servers. E.g. when you're already on mac, with iOS SDK and Android SDK set up, you shouldn't need to use some online services.
Their FAQ (http://www.codenameone.com/faq.html) claims that it is possible, though a little complicated (and they'll only provide support if you're on their enterprise plan).
Well, you can already build apps for Mac just using the standard JVM and iOS using http://www.robovm.com/, so I'm not sure what Codename One brings to the table that you couldn't already do?
Codename One has one Java API to access all device capabilities such as:camera, gps, file system, maps and more... and it has one Java API for lightweight GUI, which allows great portability between supported platforms.
robovm is good but mostly relevant for games with libgdx.
Codename One and RoboVM solve different use cases. If you can live with the limitations of a "common denominator" API, a UI toolkit that tries to mimic the native look and feel ala Swing and a limited subset of Java 5, Codename One is great since it allows you to use a single codebase and deploy to many different device types.
RoboVM on the other hand lets you use all the native iOS APIs from within Java and has a runtime library based on Android which limits you only to roughly the Java 6 APIs. As long as you structure your code properly RoboVM makes it possible to reuse large portions of your code between the Android and iOS versions of your app. So if you'd rather build an app that is truly native with a native UI and still want to be able to share code with Android RoboVM may be a better fit. And it's definitely not just for games even though libgdx+RoboVM is a killer combination.
similar, only better.
In Codename One you end up with 1 java project to maintain for all supported platforms, in xamarin you end up with 2 project to maintain in c# (1 for each platform: iOS, Android)
You might want to check out Xamarin's announcement about Xamarin 3. "Xamarin.Forms is a new library that enables you to build native UIs for iOS, Android and Windows Phone from a single, shared C# codebase"
I'd stick with robovm for cross platform capabilities, or, use Haxe.