One of the joys and pains of being a software developer is choosing the right tools for the job. Technology moves so fast, and everyday there are new frameworks and libraries being shared with the world to help you do your job better. You would think this would always be a good thing, but choices can be hard. The best you can do is make the best choices with the information you have, and that information is always changing. We are going to take a look at some of the leading frameworks that might be able to help you create your mobile applications a little more efficiently.
Before we look at some of the frameworks, we have to set the stage for why there are options. When the latest mobile movement emerged during the release of the first iPhone there were limited choices on how you could produce your applications. Your only real option was Objective C; that was what Apple was pushing and all their SDK documentation and examples revolved around that..
Then Google got involved in the game, and everything their team produced and documented for doing development was with Java. Of course some people were still dabbling with their Palm and Blackberry at this time, which would have their own set of tools and learning curve.
What’s the ultimate goal for cross-platform technology?
- Focusing on learning one language well and leveraging that across different platforms.
- Coding once and distributing to all the leading mobile devices.
- Using your favorite programming language versus the language the mobile vendor prefers.
- Not having to hire team members that have niche expertise and can’t be used across platforms.
- Developing quality code faster.
- Getting products to market faster.
- Supporting current and future devices quickly.
- Being happier.
Has this cross-platform development dream been realized?
Not exactly. There are still plenty of choices available and options that will get you some of the above but no Utopia yet. Let’s take a look at some of the leaders in cross-platform, mobile frameworks and briefly review some of their benefits. It’s always going to depend on what you are creating and choosing the right platform for your needs. But this list should help you get started with some research to help you choose.
Appcelerator – Titanium
Appcelerator has been in the cross-platform space since 2006. They originally had an application that was targeted towards making it easy to write desktop apps for both Windows and Apple. They then changed their focus to work on building a tool that made it easier to program cross-platform mobile applications.
Appcelerator also claims that their framework is supporting Windows and Blackberry, but from what I’ve read, it’s been mixed results and certainly isn’t a one click process to get your application running on those platforms. Appcelerator has paid subscription options, but they still have a free, open-source version that has majority of what you need to succeed. The biggest downside to Titanium is that you can’t access everything in the core frameworks. Titanium tries to model and make methods available to you for the most popular device features, but unlike other options, everything is not available out of the box. The good news is that you can always create a custom Titanium module that calls a core feature you need and include that in your project.
“Xamarin” has only been around for a couple years, however the team and technology behind it has been in the cross-platform industry for many years. Before developers were concerned about cross-platform mobile apps they were concerned about cross-platform desktop applications. Members of the Xamarin team were behind the very popular Mono project and later the MonoTouch project, which was acquired, spun off, and things happened… then poof: Xamarin.
If you are a Microsoft .Net developer, then you’ll know that Mono was the rogue project that worked tirelessly to keep the C# language running and available on Linux. They know a thing or two about working with cross-platform technologies, and they are huge C# fans. Therefore, the programming language preferred for Xamarin is C#. If you are a .NET developer this will probably be your favorite. Xamarin has been excelling at building really cool cloud-testing tools as well. This makes it easier for developers to test their applications across a variety of different devices.
With Xamarin it’s not a build once experience; you can build core, shared libraries but do have to specifically tailor your project to a platform. This creates a little more work, but is still nothing compared to developing an app specifically for each platform (Objective C / Java). To utilize Xamarin for business, you are looking at around $2,000 per year for iOS/Android per developer.
RubyMotion came out of a passion for wanting to deliver Mac apps using Ruby. It’s as simple as that. Since that time, it’s grown in popularity and has gone from just supporting the Apple ecosystem to also supporting Android. RubyMotion is also pretty cool because you can tap into any of the native APIs. Essentially, everything is available to you as a developer. With a framework like Titanium the core native APIs are abstracted away; as a developer you don’t have to know what specific things are called in the iOS world or Android world. With RubyMotion it still feels like you have to have a complete understanding of both iOS and Android native APIs. Pro – you can get at anything you need. Con – you still have to become more intimate with each of the device platforms. Like I said, no Utopia, but you do have to remember that all mobile devices are not the same. It’s still a huge win to be able to know one rogramming language inside and out and focus your efforts on learning specifics between platforms. RubyMotion is very reasonable at $350/yr.
Unity – Game Engine
http://unity3d.com/ This is going to be the cross-platform option included in here that will be a surprise to many mobile developers. You may have never heard of it, or have thought of it exclusively as a gaming platform. Unity is a really cool game engine that allows you to develop and deliver games on over 20 different platforms. We’re talking more than just Android and Apple here, think: Linux, Web, PC, Windows Phone, XBox, PlayStation, etc.
Cordova, PhoneGap and Ionic
The last options I’ve included are Cordova, PhoneGap and Ionic Framework. These are grouped together because they seek to solve the problem in a similar way, and both PhoneGap and Ionic are dependent on Cordova.
You can accomplish a lot, very easily by going this direction with your mobile development. It’s easy because you can leverage your teams experience with web development and put that to work for you with mobile applications. However, I feel this route is the most limiting to the developer and the future of the mobile product. You can really get boxed in by the types of features you can ultimately deliver since you are so abstracted from the core device APIs.
This route is going to be good if you have a very sound understanding of the application you are creating and all of it’s current and expected future features. If you can with 100% confidence determine everything you need is do-able with this route, then go for it. I, however, often have a fear that 6, 12, 24 months down the road I’ll get a feature request from a client that will seem like a common mobile feature or no big deal and get completely stone-walled by this approach to mobile development. For that reason I’m pretty hesitant to do anything terribly complex with these technologies. However, they are awesome for mimicking a set of website features on mobile or enabling a website to work offline via a mobile “app.”
The Winner Is?
Hah! There is never a winner when it comes to programming languages and frameworks. The winner is the option you think will be best for you and your product now and into the future. It very well might be that the best option is to write Objective C or Swift for iOS and Java for Android, just because you’re awesome at those. Then you can learn C# if needed for Windows later. The choice is yours, and that’s the beauty of it. You can weigh your options, you can choose and if you’re not satisfied with your options, you can always make your own framework! 🙂