Fifteen years ago there were a large number of mobile OSs which enjoyed popular support. Though many shared a similar core, practically every manufacturer created both the hardware and the OS for their devices. These days only two OSs have a combined 99.9% worldwide market share: iOS and Android.
Which is a bit of a problem, because there is no compatibility between the two. In the olden days this wasn’t an issue because we only used the apps which came with the device, and stored very little data on it anyway.
The native app problem
Now that apps are a huge part of our daily lives, the lack of compatibility between Android and iOS is an enormous problem. In general, app providers need to have two distinct apps – one for each platform. Often that means writing two so-called “native” apps from scratch – an enormously costly process both at the outset and in ongoing maintenance.
So it’s unsurprising that there have been many major attempts over the years to allow developers to write a single app which can be built automatically for iOS and Android at the push of a button. It’s a lucrative market. Many such technologies have fallen by the wayside, but most have had their own dedicated fanbase.
What the solution looks like
At a cursory glance, it makes sense. Fundamentally the two OSs do the same thing, sometimes even in precisely the same way. For example, an app wanting to use the phone’s camera will trigger a popup dialog asking for that permission, which the user can accept or reject. The user experience of granting that permission is practically identical in iOS as in Android; the only difference being what the dialog looks like.
But this isn’t the case on a technical level. The fundamental problem with the two OSs is that, under the hood, they achieve the same thing in totally different ways. Whilst the permission dialog which pops up belongs to the OS, the way in which apps ask for it to be shown is very different. Once the user has made their choice, apps need to handle the response in very different ways.
As an app development agency, we watch with excitement any technology which claims to solve this problem and others like it. We’d love to be able to tell our customers that there’s no longer any need to maintain two apps.
So what solutions exist now?
Arguably the earliest viable such technology was Apache Cordova, which is still lingering on. It allows you to write apps in HTML5 (like a web page) and deploy to both iOS and Android. But it isn’t workable: the apps it creates are horrifically slow and some things, like using the camera or microphone, cost so much development time to achieve dependably that it’s more cost-effective to write two apps in the first place. Not to mention that maintenance of Cordova apps is enormously time consuming for other technical reasons. We delivered a handful of Cordova-powered apps in the early days and have since discarded it.
Things have improved since then. Google’s Flutter is a technology which shows promise. Despite its existence for several years, it’s tempting to call it an emerging technology because its early releases were lacking in a number of ways, which meant it wasn’t ready for primetime. But Google has doggedly improved it, and it’s much better. Its performance is on a par with real, native apps, and it does solve some of the issues of non-native code. But it still lacks third-party support so usually if you want to do something complex, you have to write it yourself, rather than being able to stand on others’ shoulders.
React Native is technology which benefits from a large community of developers, so is mostly able to overcome Flutter’s issue of lack of third-party libraries. But it isn’t as performant as Flutter and suffers from a slow release cycle, so it’s hard to fully support the latest versions of Android and iOS.
So what’s next?
There are many other technologies available, each with their own fanatical followers, and each of which have their own benefits and disadvantages.
But the simple fact is that none of the technologies produce results that are as good as native apps. They are variously too slow, unable to do certain things, too hard to maintain, imperfect in appearance.
As an industry, this inefficiency is unsustainable in the long term. My prediction is that one day we will do away with app stores and native apps altogether. Phones already have a web browser, and that is as good a delivery mechanism as any. Plus, it works around the severe limitations placed on apps for commercial reasons which exist in both Apple and Google’s worlds.
I’m watching with fascination how things are progressing.