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?
Re xamarin... anything they do well that you do not (yet)?
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.