A few months ago, I decided to write my very first mobile app, and maybe naively, I wanted to make it cross-platform. Without going into great detail, I started writing a location tracking app for auto racing, and to ensure that I would be processing the GPS coordinates the same on both iOS and Android, I had a goal of writing the logic once. Given the current mobile development tools available, I believed this would be possible without much trouble.

I ran across Google’s J2ObjC first and started working with it. However, because various bugs (which have been fixed since) held me back, I began looking into other tools for developing cross-platform mobile applications. Since many of these tools allow you to write code in non-native platform languages, I began worrying about the performance of the various tools and decided to test them. I shared some of my findings with @brunobowden, a fellow J2ObjC hacker and Xoogler, and he suggested I post my results.

These are the tools I surveyed.

J2ObjC — Google’s transpiler that translates Java to Objective-C. It also includes basic Java libraries ported to Objective-C. Basic usage is to develop the app logic in Java to be shared between your Android and iOS app. The Android app would use the logic natively. For iOS, you translate the Java logic to Objective-C and import the translated code into your Swift or Objective-C project. J2ObjC is open-sourced on github and is freely available.

Xamarin — A C# implementation that targets iOS, Android, and Windows Phone. Using Xamarin Studio, you can write your entire app in C# and compile it down to native bytecode. For iOS, Xamarin apps use SGen or Boehm for garbage collection. Pricing starts at $25 per month.

RoboVM — A Java implementation that targets iOS. RoboVM command-line tools compile Java into native iOS bytecode. RoboVM implements its own garbage collector on iOS. Like, J2ObjC, the Android app would be native. Pricing is unavailable as RoboVM is in beta.

RubyMotion — A Ruby implementation that targets iOS, Android, and OSX. RubyMotion command-line tools compile Ruby iOS and Android apps into native bytecode. Ruby gems must target RubyMotion which precludes many existing gems. RubyMotion implements its own garbage collector on iOS. Pricing starts at $15 per month.

A quick thing about me

Given that I'm not a prolific medium-er, twitter-er, share-er, etc, I thought I would “color” this post with my background. I say “color” since I am not attempting to back up what I have found. Instead, I hope you see how I arrived at my conclusions and that, as always, YMMV.

I was one of the original Google engineers back in 1999. I worked on a whole range of things, including scaling our index from 50M to 2B+ docs, creating unified search, and creating enterprise search. Since leaving Google, I haven’t been actively coding on a daily basis, except for a one year stint of helping a friend launch Roostify. Other things like family, angel investing, and car racing (yes, that’s me above) took priority. I will be the first to admit I am a little rusty and out of practice. However, I think that this post will be a little informative as I believe some signal is better than no signal.