Following on from my previous post, in this post I rate the various platforms (iOS, Android, Windows Phone and BlackBerry) based on my own experience on their cross platform development ROI. I specifically use to the following key measures I’ve mentioned in the previous post as a basis for my rating:
- The ability to re-use cross platform code developed previously for new projects.
- The ability to leverage the knowledge acquired without having to constantly learn new knowledge.
- The ease of the market deployment process.
Project MyWorldApp
Three years ago I embarked on a personal project codenamed MyWorldApp to keep me busy in the evening and weekends and to further strengthen my knowledge in technologies like Spring, Spring Roo and cross platform mobile development using PhoneGap and Sencha Touch. MyWorldApp is a framework for cross platform mobile apps development that is backed by a multi-tenancy Content Management System (CMS). Anyway, I’ve completed the project two years ago (2012) by setting up a rapid workflow for cross platform mobile development with custom branding and mothballed it.
Recently I needed to develop a cross platform mobile application for OfficeMA Timesheet (one of my many projects). OfficeMA uses ExtJS JavaScript library for the user interface (frontend), so theoretically I should be able to leverage the same code-base on a cross platform mobile app and indeed this was the case. And having the cross platform capability developed as part of my work on MyWorldApp I was in a winning situation, I should be able to leverage the work done previously and maximise my return on the investment of developing MyWorldApp. This is a common scenario with many companies that have an in-house cross platform capability, you expect to leverage the work done for one app in order to develop another. So here is my experience of trying to re-use the cross platform capability developed two years ago.
The Good, the Bad and the Ugly
The Good
Android was the best, I’ve restored the old code base, update with the new frontend code and deployed to a simulator and the application ran fine, then tested on a device and it was all hunky dory. I then headed over to Google Play to deploy the app and everything was a breathe. The developer console was crystal clear, all the fields have help text and instructions clearly highlighting what is needed. So all in all it took less than a day to integrate the common code base, test and deploy the app to Google Play.
The Bad
The iOS (iPhone/iPad) landscape has changed a great deal between iOS 5, 6 & 7. A number of APIs which were public are made private, the layout of the tools (XCode) kept changing between versions, the user interface layout on the phone is changed (i.e. signal bar is now part of the view). All of this meant the code that was developed two years ago didn’t work. It needed to constantly evolve to keep up with all the changes to iOS.
The code is now broken and a series of tools/frameworks needed to be updated to cater for newer versions of iOS, which means spending time learning new things. All in all it took almost a whole week to get the app working on iOS. And what was supposed to be cross platform development turned into native development with deep dives into Objective C code to find what was going wrong, this will be a major challenge if your cross platform developers are primarily frontend developers (JavaScript, HTML, CSS).
The deployment to the App Store wasn’t less painful either, with random errors, out of date documentations and two rounds of updates and rejections it took around a month to get the application to the store!. All of this mean your cross platform development capability needs to stay up to date with iOS changes, otherwise it’s likely that each app development cycle will put a drain on your resources.
The Ugly
Two years ago when I looked at Windows Phone 7, Internet Explorer 9 did not support any touch events, a core feature required for any JavaScript apps that use the Web view. Adding to this obstacle the fact that IE, unlike iOS, Android and BlackBerry browsers, doesn’t use the Apple WebKit engine, you end up developing custom JavaScript/CSS code to cater for the differences. It seems only recently that touch events are added to Internet Explorer 11 running on Window Phone 8.1. It will be very difficult to get your common cross platform code to work in Window Phone without major and tricky changes. It would be easier to start fresh using the platform’s native programming language and SDK.
Moving on to BlackBerry, two years ago BlackBerry OS 6 and 7 were the predominant versions with a range of devices such as BlackBerry Bold and Torch. The BlackBerry platform at the time was undergoing major changes and updates moving from Java to the WebWorks HTML5 framework. At the time the BlackBerry devices struggled a great deal running cross platform mobile apps and showed poor performance compared to iOS and Android devices. Two years on, the BlackBerry landscape has completely changed with the introduction of the BlackBerry 10 and a range of new devices. With less than 1.3% market share and a changing landscape it will be very difficult to maintain a cross platform capability for BlackBerry, not only that your developers will need to learn new skills, but you also need to invest in new devices.
I would love to hear your thoughts or your experience with cross platform mobile development.
Note: I’m not a mobile developer, it’s just that cross platform mobile development should be easy for anyone with basic Web development experience.