Mobile devices have revolutionized the way we interact with the world around us. With the multitude of apps available, each designed with a specific purpose in mind, it’s no wonder that expectations are high when it comes to their performance.
We want apps to run well, we want them to use the device’s hardware to their advantage, and we want them to be made efficiently. But is there a way to combine that with making them available on multiple platforms?
That may have been the case in the past, but we’ve reached a time when not only is this sort of arrangement no longer a pipe dream, but it’s becoming the norm.
Let’s take a look at the practice of creating apps that are compatible with multiple platforms, also known as cross-platform mobile development.
We’ll show you:
- how you can use it to achieve native-level performance on any device,
- what tools and frameworks are available,
- how cross-platform development can help you optimize your mobile app timeline and budget.
Table of contents
There’s no denying the fact that the mobile app market is currently one of the world’s most lucrative. Pretty much everyone in developed countries has a phone, and many have other mobile devices on top of that. With over 200 billion apps purchased in 2018 alone, mobile apps are definitely something worth looking into if you want to stay ahead of the curve.
So let’s say you do decide to create an app. You’ve already figured out all the important bits: what niche you’re filling, who your target audience is, etc.
But now you still need to decide how you’re going to bring your app to the most popular platforms; limiting yourself to just one is not a viable business option nowadays.
Of course, this situation is less of a problem than it used to be. With the rest of their competitors pretty much eliminated, iOS and Android are the only two mobile operating systems left. It all comes down to the choice between those two operating systems, as well as the various devices that those systems support.
Both systems have a large number of dedicated users. That said, there is very little overlap between the two; people usually stick to either iOS or Android for years. Considering that, creating apps that work well on multiple systems seems like a no-brainer.
This has, understandably, led to the increase in importance of cross-platform app development. One example: iPad app was announced as compatible with the latest macOS during Apple WWDS 2019. This means that all iPad apps become cross-platform apps, which will greatly enrich the app library on macOS devices.
So you’ve decided you want your app to be available on multiple platforms. What are your options?
Native and hybrid apps—what are they and how do they differ?
Before we delve into cross-platform mobile app development, we should clarify what exactly native and hybrid apps are.
Right now, if you want your app to be available both on Android and iOS, you have three options:
- Create two separate native apps.
- Create a hybrid app.
- Create a cross-platform app that translates to native code.
In simple terms, native apps are developed to work on a specific operating system. But going native requires you to create the same app twice, as the two technologies are different enough that you would require two separate teams to work on them. Specifically, you’d need one team to create the Android version in Java or Kotlin, and another team to create the iOS version in Obj-C or Swift.
Hybrid apps, on the other hand, are basically web apps that are designed to work using a web browser’s built-in component, which allows them to be installed from the app stores like any other app, but under the hood they use web technologies mixed with some native plugins. This makes them worse in terms of responsiveness, user experience and gesture handling than native apps, and they have some limitations in terms of using the full range of functionalities of a smartphone or tablet.
While hybrid apps are definitely a solid means of covering multiple platforms, cross-platform apps translated to native code generally have the upper hand as they use platform-specific, native UI components, which results in better performance, responsiveness, and overall user experience.
From the end user’s perspective, native apps and cross-platform apps translated to native UI components will always have an advantage compared to hybrid solutions. Native apps can provide better UX due to better responsiveness and performance; they feel faster and smoother to use. Native apps also follow platform standards in terms of navigation patterns or handling platform-specific gestures. (One example would be the “swipe down to dismiss” gesture on iOS.)
In this article, we’ll focus on solutions from the third category: cross-platform apps that result in native code. Right now, they are very likely the best fit for most mobile projects.
Now, it’s easy to sing praises to cross-platform native app development, but the key question remains: how do you make it happen?
We’ve established that, traditionally, multi-platform apps had to be designed separately by teams who were familiar with given languages and frameworks. The only other option was creating a hybrid app, which had their limitations because they didn’t use native code.
How exactly is it possible, then, for an app to be designed for both platforms simultaneously by one team and run just as well as native apps?
This is where cross-platform native app development tools come in.
There are many cross-platform development frameworks available online that make the entire process much smoother. In essence, a developer only needs to know one framework to develop an app for various devices.
While there are quite a few of these frameworks available out there, the most prominent ones right now are React Native and Flutter.
1. React Native
- open sourced in March 2015
- 79,000 GitHub stars
- ~2,000 GitHub contributors
- loved by 62.5% developers who use it (StackOverflow)
React Native was created by Facebook and it is a framework based on the much loved React library, commonly used in web applications, that uses JSX and a declarative style. It’s a popular tool for developing apps available for both Android and iOS devices, as well as macOS, Windows, and web apps to some degree.
One big advantage it has is that it allows you to use platform-specific code, so it’s easy to utilize native iOS and Android modules. While you’ll need developers specialized in iOS or Android for those modules, you won’t need them on board full-time.
The fact that React Native is open source is probably one of the reasons for its current popularity.
Apps using React Native
If you’re looking for examples of React Native apps, here are some that you could try out on your device right now:
One important comment for this list: keep in mind that any React Native app needs to have native code, too.
So this list doesn’t mean that the entire Facebook Ads Manager or Instagram app is built using React Native—it might be a single screen, one feature, or the whole UI.
When we build React Native apps at STX Next, we do the same: we build the user interface with React Native (shared between platforms), but for more complex or deep-level features, like Bluetooth connectivity, push notifications, or the system audio player, we use native code (separate for iOS and Android).
- first stable release in December 2018
- 70,000 GitHub stars
- ~400 GitHub contributors
- loved by 75.4% developers who use it (StackOverflow)
Flutter is a tool developed by Google. It is still a very fresh framework, but it seems that it has had just enough time to win many people over. It utilizes Dart as its programming language, and it allows for high-quality native apps to be developed in an incredibly short amount of time.
While Flutter is not as mature as React Native, it’s reliable enough to be used by some big mainstream apps, such as Google Ads.
For a deeper comparison of the two frameworks, check out our article: Flutter vs. React Native: A Comparison of Pros and Cons.
We’ve already talked about how cross-platform app development can help you reach a wider audience than ever before. Still, you could reach the same audience by simply developing the app for two platforms separately without the use of cross-platform tools. The true benefits of cross-platform development only really come to light when you dig a little deeper.
The main reason why cross-platform app development is such a game changer is the fact that it is a fast, cost-effective solution.
- You get to target various markets without spending the time and resources on developing the same app twice.
- You can hire a smaller team, as all your developers need to really know is how to use React Native or Flutter.
- And they’ll finish the job quicker, as there’s no need to cross-reference the two apps to make sure they are similar enough.
Without cross-platform solutions, you’d require developers that know their way around both iOS and Android, and not only are they hard to come by, it’s pretty much a fool’s errand. The development time would extend to a massive degree, especially when taking into account the time spent on the meticulous recruitment process, and your costs would skyrocket with the introduction of two separate teams to do a job that can be done by one.
Needless to say, switching to cross-platform development is a great way to save money while still targeting a much wider user base. It also allows you to keep your app consistent between all platforms, so there’s no risk of the app suddenly being unsupported and outdated on iOS, but not on Android.
All of the benefits above combined make this approach very beneficial.
It’s also worth noting that although both React Native and Flutter are relatively new compared to mobile operating systems, they already have a huge open-source community around them. As those technologies have been created to deal primarily with the User Interface (UI), it is also possible to use native modules which expose additional APIs to utilize more hardware features, such as the camera, gyroscope, or Bluetooth connectivity.
Most of such native modules already exist and are open source, so they’re easily available. And even if you can’t use them or you want to develop such native features on your own, you can always integrate native code into a React Native or Flutter app.
So far, we’ve only praised cross-platform app development to high heaven, but, as you can probably expect, there are definite downsides to this approach, as well. Whether these will be deal-breakers or not is really up to you, but no matter what you choose to do, it’s always better to know exactly what you’re going into.
What you should keep in mind right from the start is that, despite the breadth of utility cross-platform frameworks have on offer, they are still a compromise. An app developed for a specific operating system on a specific device will always be a much better fit for that particular platform’s architecture compared to a one-size-fits-all solution. For example, cross-platform apps tend to simply lack features that could be achievable on one platform, but not on the other. This can potentially lead to an app feeling lackluster.
Another potential disadvantage is that you may still need to adjust your cross-platform app to a given platform at least in some part. Sometimes we expect iOS and Android apps to differ. Navigation patterns are slightly different, for example; there is a physical back button on Android after all. The permission management system is also completely different on those platforms and needs to be handled by the app separately.
We also mentioned that there are many existing modules to help you out with introducing additional functionalities. However, you may still find some modules missing for your purposes, at which point you’ll have to resort to introducing your own custom native code for each platform. And of course, a staggering majority of the existing modules are open source, which comes with its own set of pros and cons in terms of security, stability, and support. (This article by TYPO3 helps expand on this point in more detail.)
We’ve laid out some of the most notable pros and cons of cross-platform mobile application development, but you may notice a lack of some important drawbacks that have been reported on numerous times. It’s very likely that they are simply not true, since there’s a lot of misconceptions circling around.
There are two major concerns regarding cross-platform app development that have been disproved. The biggest one is arguably performance. At first, this may have been a problem, as people were still getting accustomed to cross-platform solutions, but nowadays, as long as your programming skills are up to snuff, you should see no performance issues whatsoever.
The other big concern people tend to have is the fact that there might be problems with more niche elements to an app’s development, including home screen widgets, complex background modes, and wearables (such as smartwatches). To be fair, the aforementioned cases may never be fully supported and will always require native code. But for many other niche cases, React Native has become a flexible enough framework to do the job, and it now supports functionalities such as Siri shortcuts, Bluetooth, as well as AR and VR.
In essence, cross-platform mobile app development is the key many have been searching for when it comes to efficient mobile app development. It’s an effective way to maximize the reach of your apps while minimizing the time and costs of development and maintenance.
While this option will always be a compromise of sorts, since you can’t ever really design one app that fits all devices like a glove, it’s a compromise that’s definitely worth the drawbacks.
If you want to learn more about cross-platform development, feel free to take a look at other articles we’ve published on this topic:
- Why Use React Native for Your Mobile App?
- Flutter vs. React Native: A Comparison of Pros and Cons
- React Native vs. Ionic: A Comparison of Pros and Cons
Or take the fastest route and contact us directly; we’ll be happy to discuss how you can create a mobile app you’ll be proud of.