Cross-Platform Tools For Mobile App Development

This summer I'll be experimenting with different cross-platform tools in order to be more efficient with my time. The development tools that I'm mainly looking at will create native code code for each platform that the app runs on. The biggest reason for this is performance and having a native UI that users are used to with their platform.

So, the collection that follows are my notes I took when researching many of different cross-platform tools.

In doing background research for the cross-platform tools, they are great for basic app creation. But, app can quickly become non-basic as soon as they start accessing native APIs that are only available for a specific platform. Some of the biggest pain points with the cross-platform tools may be integrating other open-source codes, using multi-touch, gestures, and native UI features/paradigms. But, there are cross-platform mobile development tools that help with those features.

A big note on using cross-platform tools to create native apps: It is not "write once, run anywhere" (WORA). The idea of creating these native apps is to maximize code reuse and/or provide a higher abstraction level for development. Up to 50-95% of the code you write can be reused depending on the type of app you are creating.

My Results:
These final choices I made are bias because I didn't want to spend over $1000 for Unity3D. I don't even want to spend $200 for MonoDroid/MonoTouch, but I will if I don't care for the free options as follows. I chose these options mainly because of their documentation, sample APIs, developer communities, and active development. Both of the following are free up to a certain point, but because I am in academia I get to go a little further with the tools.
1. MoSync
2. Titanium by Appcelerator

The following I'm not trying the following until at mid- to late- summer likely (because of cost, it can wait longer...)
1. MonoDroid/MonoTouch: ($99 academic rate per developer, per platform) The regular Mono library is free, but it is just an open source implementation of the .NET framework. It does not include tools for integrating with iOS or Android. Both of these tools integrate Mono into them.

More Specific Notes: (I take a lot of notes directly in Notepad++/Notepad)
/* Cross-platform SDK */

- Mono (native app, C#) (open source): This is just an open source version of the .NET framework to be used anywhere, like in Apple and Linux OS. http://www.mono-project.com
  - Mono for Android (proprietary): Free version only allows small apps and no access to 3rd-party libraries. Lowest paid version is $199 per platform/developer. Academic cost is $99 per platform, per developer (http://support.xamarin.com/customer/portal/articles/177042-do-you-have-any-student-or-academic-pricing-)
  - MonoTouch (for iOS) (proprietary): 
Conclusion: Good if already have much code in C#, or prefer the .NET framework.
- Unity3D - high costs
- Marmalade (native app, C++) ($15 per seat/month;$149 per seat/year): http://www.madewithmarmalade.com/
- Rhodes (HTML/Ruby): Says native app, but seems to be web app with just a native UI. http://www.motorolasolutions.com/US-EN/RhoMobile+Suite/Rhodes
- MoSync (native app, HTML/JS w/optional C/C++ extensions) (open source | Free): Seems promising. Needs Mac for iOS publishing.
- Titanium by Appcelerator (native app, JS) (Free): Uses JavaScript mainly, but it is not a web app. It is translated to native code (but, a web UI ‘could’ be made instead of a native UI). Android, iOS, and web only.
- PhoneGap (web app, HTML/JS): Very limited, though has basic access to camera, contacts, some sensors.

Conclusion: For free, use possibly MoSync or Titanium. For paid, use Xamarin’s MonoTouch/MonoDroid ($99 per developer, per platform)

Wikipedia also has a very long list of potential cross-platform tools to choose from. It may be helpful if you are trying to do more background research into the many different types of development tools that provide non-native code when compiling for different platforms.

Source: I originally put this on my developer blog.

~ Simply Advanced ~

No comments: