Monday, February 13, 2012

Choosing mobile dev platform/framework

After going through all the various frameworks, I'm close to finding which framework I will use for some projects, and which isn't really suited.

Here's some steps that will help you to identify which framework to start with for a project, and one example from me

1. List all the features you need
Figure out ALL the features you need for a project, not only the most important ones. Include anything that might be a function or feature.

My feature list for one project is:
  • Drag and Drop
  • Text to Speech
  • Basic image manipulation
  • Basic access to camera
  • Drawing/painting
  • JSON support
  • HTTP(S)-request support
  • Custom user interface placement
  • Custom user interface elements
  • Audio playback (simple)

Choose all the features that you cannot be bothered to implement yourself, which you feel the framework should handle and you . (Or a third party plugin to the framework)

The critical features for one of my current projects
  • Drag and Drop
  • Basic access to camera
  • HTTP(S) request support
  • JSON support
  • Custom user interface elements (Must be possible)
  • Custom user interface placement  (Must be possible)
  • Audio playback (simple)

Basically the opposite of 2. Critical functions that must exist in the app, but you do feel it's ok to write/implement these yourself.

Only 2 things I think I need to write for myself, and can accept doing.
  • Basic image manipulation
  • Drawing/Painting

Any features you think your app can be release without, but they should be there later, bonus for the framework if it's already in-there/supported

Basically the features from 1 that aren't in 2 or 3. For my project that would be:
  • Text to speech

Any platform you do need and/or your target audience uses.
I need to target:
  • Android (both phones and tablets)
  • iOS (both phones and tablets)
  • Windows Phone 7 (currently only phones, but most likely tablets in the autumn)

If there are any languages you don't want to learn, and therefore need to avoid, write them down so you don't end up choosing a framework that only supports a language you don't like.
I only have 1 language I prefer to never write software in, as it usually ends up limiting what you can do on a platform: (And the syntax sucks)
  • Visual Basic/Basic (I've used it way back, and it "does not compute...")

Any framework you think it's worth considering. Later on you will need to consider why you should choose a framework or why you should avoid it. There are many factors worth considering when choosing your framework.

The frameworks I consider for this project are:

This one isn't always easy, as you probably want both desktop, mobile, web-based and non web-based. Consider what your target audience is. Usually it's easy to combine web-based mobile app with an actual app or a desktop app with an web-based app, but making it to all three with one codebase is most likely going to be diffucult, or will require a lot of hacks in your code.

I needed an web-based app for integration in VLE's as well as a actual app in the appstore. As my current target audience are schools with VLE's, but they are moving fast forward into tablets, I found this difficult. I chose to target tablets and phones through the appstore first, then VLE's through web later.

This is the timeconsuming part. You probably want to use a few days for this one, and there are tons of articles to read up on various frameworks. 

Update 14/02/12: I missed a few features I need for the project I'm using as an example

I'll follow up on this post going through each step, and with some links to pages that are worth reading regarding frameworks, as well as how I narrowed down which frameworks I'm considering for this project.

Steps in details:

  1. Listing all the features you need.
  2. Identify critical functions, you don't want to implement yourself
  3. Identify which critical functions you think it's OK to implement/write for yourself
  4. Choose which features that isn't critical, but is "nice" if the framework handles
  5. Choose the platforms you need to target
  6. Any programming languages you want to avoid?
  7. Make a list over frameworks you do want to look into
  8. Choose if your app should be web-based or an actual app in the appstore or both, should it be mobile and desktop?
  9. Start investigating the features of each framework
    1. Marmalade SDK
    2. Appcelerator Titanium
    3. Moai SDK