Mobile Development, Solution Design
When talking to new customers about developing a mobile app we often get asked the same question: "which mobile platform should we release our app on?" This is often motivated by two concerns: they always want to reach as many users as they can in their target demographic but they understand that releasing an app on multiple platforms will cost more. While there may not always be a right answer here we try to dig a little more into this seemingly simple question.
A reassuring answer is that there are in the region of 2 billion smartphone users in the world, varying by country, and that the two dominant mobile platforms are Android and iOS, so an app should be built to target both.
As simple answers go, this will answer most concerns, but as professional developers, it is important to point out two additional elements here: platform market share is not so clear cut, and developing for each platform will have its own quirks and costs.
It was the case a while ago that Android and iOS roughly shared 50% of the market each, with other platforms such as Blackberry and Windows making up the noise. However, this has changed significantly over the last couple of years, probably because Android is available via multiple hardware vendors, whereas iOS is a purely Apple device.
Globally, Android seems to dominate with around 82% of the market, with iOS around 15% and this is predicted to remain fairly stable until 2020 at least. Blackberry's market share has fallen to below 1%, and while some think that Windows Phone is dead, its market share is predicted to sit somewhere around 1% to 5% over the next few years.
If cost really is a concern of your customer, then maybe going down the Android only route is an option after all, but (and this is a big "but"), these market share statistics can be misleading. Although it is clear that Apple has lost market share recently, iOS penetration depends on which country you are targeting. For example, in the UK, iOS has 39% while Android has 52%, compared to Germany's 20% and 73%. It seems we should therefore use these statistics carefully depending on the market we wish to penetrate.
Other cross-platform tools say they overcome these limitations, such as Appcelerator and Xamarin to pick just two. Taking Xamarin as an example, they compile C# into native code to increase performance, while allowing you to use common code for your business logic. They even provide new releases of their software rapidly after new versions of Android and iOS come out. However, Xamarin does expect you to write separate Android and iOS specific code in C# since the user interface elements of both platforms are distinct. In this case, you still need to develop two separate user interfaces. The advantage is that your business logic is only developed once. The disadvantage is that you still essentially need to develop separate apps, but this time you are having to do it in C#. So, while there are lots of examples of Android Java and iOS Objective-C and Swift source code out there, there are far less that do the same in C#. You are going to therefore need someone who understands your target platform anyway, and be sufficiently skilled to translate this into C#. What you gain in re-use of your business logic code may therefore be eroded by longer development times for the platform-specific parts of the app.
Of course, your development team experience will vary, as will the requirements on common business logic and user interface. My own experience developing for both platforms says that platform-specific development is the only way to go if you want to take advantage of all that a platform offers, including the latest features in each new release. Cross-platform tools may therefore save you some time and cost, but only if they meet the customer's requirements in terms of technologies supported and whether you want to take advantage of all the latest platform features.
There is, of course, always an exception. If you're developing a game, then you are somewhat less constrained by wanting to use the latest platform features. For example, games tend to have their own user interface requirements, and do not rely upon, say, using Android's "Material" design look and feel. Here then, a tool such as Unity is the only way to go, and with features such as augmented reality via support of the Vuforia SDK, you can include elements which were once only the domain of platform-specific code.
Having looked at developing for multiple platforms, a question we have to ask that customers often do not appreciate the importance of, is which version of each platform should we target? Older versions of Android or iOS will not have the latest features that new smartphones are advertising. Some apps (in my own experience, particularly for iOS) work only on the latest version of the platform. This culture of always having to have the latest hardware and software is not prevalent though, even if Apple report that 84% of their devices are running iOS 9. Android has a much more diverse picture with slower early adoption and a longer tail of older platform versions.
Just like our selection of platform, we must therefore consider carefully what versions of each platform the app should support. Android's excellent use of support libraries means that writing code for older versions of Android is far easier than iOS. Indeed, Android's reporting of version distribution is much clearer than Apple's. For example, currently 97% of all Android devices are running API 15 (Ice Cream Sandwich) or above. Apple, however, only report major release numbers on their own site, with 85% running iOS 8 or above. If you want more detail on older versions, head over to David Smith's statistics or Fiksu iOS Trackers, but if you want to know who is using iOS 7.0 vs iOS 7.1, then you are stuck. Why would I want to know? Because Xcode now only supports iOS 7.1 and above so testing 7.0 becomes very difficult. Apple have never been good at being transparent in its developer documents or the choices it makes.
So, is our reassuring answer sensible? For the most part, yes, but the real key is to focus on the customer's requirements and the user's needs. These will determine the best platform, platform versions and development tools.
Personally, I think that developing an Android app in Java using Android Studio, and an iOS app in Swift (and if I really have to, Objective C) using Xcode are the best approaches. I would also target Android API version 15 and above, and iOS 7.1 and above, since these cover the majority of devices across the world. Common business logic, including MySQL database structure and queries, state machines and even class hierarchies are relatively easy to translate between platforms without needing to resort to C# or other tools, and this then leaves the tricky part of developing the right user interface for each platform where it sits best — in their own development tools and languages (even if they are sometimes clunky and difficult).
And the last thing that I would point out to a customer? That releasing an app to 2 billion people is not the same as getting them to install it. Having a great app is the first step, but putting money into marketing the app is essential otherwise all that effort is for nothing.
Digital processing is at the heart of innovation. It may be that you have a difficult or complex problem. Pervasive Intelligence have the expertise to cut through the complexity to give you a solution you can use in the real-world.