Cross-compiled mobile apps are written in one language and then turned into native-compatible code during a build phase wherein the code is translated into a compiled application for each supported mobile platform. This allows developers to write the application in their language of preference, and then deploy a fully native app for each target platform.
There are solutions for writing mobile apps in Ruby (RubyMotion) and Java (RoboVM, which will be going away in 2017, according to a recent announcement). By far, the most well-known name in this space is Xamarin, which allows mobile app development for iOS, Android and Windows using the C# language. Xamarin was recently acquired by Microsoft and is now officially part of Visual Studio, the integrated development environment typically used by developers on Microsoft’s .NET platform.
If your development team’s skill sets are specifically around Ruby, Java or C#, then cross-compiled apps offer the benefit of leveraging your existing talent and getting near-native performance while still targeting multiple platforms with a single codebase.
For the most part, all of these options are about developing a single solution that can target multiple mobile platforms. When people talk about native mobile app development, however, they are actually talking about multiple solutions that each target a specific mobile platform: Swift or Objective-C for iOS, and Java for Android. This means that if you intend to target both iOS and Android, you would need two codebases, and if you were to add another mobile platform, you’d need a third, and so on.
Despite having multiple codebases, there’s no way to beat native development in terms of optimizing performance and maximizing the capabilities of the individual operating system. In addition, the developer tooling for native mobile app development — for example, Xcode for iOS and Android Studio or Eclipse for Android — tends to be richer and tailored to the specific needs of that operating system. The tradeoff is that you’ll need development teams that are skilled in each platform’s language, and there is no code reuse across platforms or with your existing web application.
Weighing the pros and cons
So, which option should you choose? The final article in this series will tackle that question, so stay tuned.