March 21, 2023
Building digital products using a cross-platform approach has its apparent benefits. It not only saves you time as you can launch your application faster without the need to release two or more versions for Android, iOS, and the web, but it is also cost-effective as you don’t need to have multiple developer and designer teams taking care of different platform-specific products.
It’s also easier for your team to track and analyze your software’s usage and error reporting, implement A/B tests, and maintain the product.
In this article, I’ll write in detail about what cross-platform development is and what it isn’t, and how it differs from native development and hybrid approaches.
Let’s dive in.
The first ever mobile application that we built at Monterail was created using the hybrid development approach, so developing outside of the usual native scope has been and still is the backbone of our mobile team’s expertise and experience.
Cross-platform development is the process of building applications with one, shared code base which can then be delivered onto different platforms. In our context, it includes iOS, Android, web, and desktop (macOS and Windows).
As I’ve mentioned above, at Monterail, the most commonly used cross-platform technologies are Flutter, React Native, and Ionic - read more about these frameworks on our cross-platform development website.
At this stage, it’s worth mentioning that the use of each of these technologies will depend on the needs of a particular project. While React Native may be the most complex and all-encompassing technology, with the possibility of developing a mobile application first with web and desktop versions built in the next steps or building three wide-scoping applications (mobile, web, and desktop) at the same time.
On the other hand, Ionic with Capacitor represents the web-first approach, with the ability to adjust web applications to quickly deliver them to mobile devices as well.
The biggest advantage of Flutter is the fact that Dart - a language used in Flutter - implies high quality of the code. Flutter also offers a wide range of ready-to-use widgets and has its own rendering engine where you can use designs and app mechanics in whatever way suits your product best. So, when it comes to performance, Flutter and React Native are comparable - it’s down to your development team’s skills and abilities.
Some of the benefits of the cross-platform development approach include:
You don’t need to switch between platforms and adjust or build applications for these separately - this way the design, testing, bug fixing, and introducing new features are consistent and coherent between different platforms;
Lower maintenance and development costs;
Time-to-market is shorter: depending on how large your application is, we can deliver three applications in weeks rather than months
Native iOS and Android development approaches are very different. It is very hard for even experienced developers with knowledge of both technologies to develop apps at the same time on both platforms natively. Different languages, different APIs, and different tools used for development make the development process platform-specific.
As a result, it is almost impossible to avoid two separate teams when developing iOS and Android applications.
Of course, to have a well-working product we have to know how things work in native apps, but it is important to remember that some parts of the cross-platform apps can be written natively, so cross-platform is not a limitation in case we need something purely natively written.
There are vivid benefits of the cross-platform approach such as time and costs of development, flexibility in connecting with native parts, and access to the npm or pub dev libraries.
It is a part of the cross-platform development approach and one of the frameworks that can be used for developing digital products using it is Ionic with Capacitor. It runs within the native app in the embedded browser. Ionic components provide the application with multiple UI components and animations so for the end users the product feels like a native one.
Web support of all of the described cross-platform frameworks works well, but we have to consider the pros and cons for each of them, including the category our application falls into and what elements will be important to us in its web version.
Some of the things that we should take into account here are SEO optimization, accessibility, user experience, and flexibility in development.
Flutter has in-built web support and its development is advanced and important for the Google team. It’s then easy to use your code and deliver apps to the web. As of now, Flutter offers two renderers: HTML and CanvasKit renderer. HTML uses HTML, CSS, canvas, and SVG elements which makes the application smaller from the download size perspective. CanvasKit renderer is the same as for the mobile and desktop apps and has faster performance but adds an additional 2MB to the download size.
Even in HTML, the renderer is not pure HTML and CSS so not every element may behave as expected. Flutter in their documentation describes that is not the best solution for text-rich, flow-based content.
It is not SEO-optimized and does not support server-side rendering. Also, one of the disadvantages is the lack of support for web libraries and tools, and that in itself can be a limitation in web apps. When we have a more app-centric, mobile-first service we can use Flutter and have a web app as a great extension to the mobile experience.
React Native does not have support for the web by default and the most popular library to achieve it is React Native Web developed by Nicolas Gallagher and used for the Twitter web app. The library translates React Native components and API to the web ones.
As a result, we write an app similarly to how we do it using pure React Native and the library compiles components to accessible HTML that is interoperable with React DOM. It supports server-side rendering, so we can achieve great SEO optimization. It is very easy to use separate components per web and mobile app and in the web ones, we can use pure HTML and React API which makes development really flexible and allows us to use any web features and libraries we want.
Using web technologies is the core of the Ionic platform which means web support for this technology is pretty straightforward. Ionic is a great tool for building web-first apps.
Development for mobile can be done partially on the web, only the features with native features have to be developed using iOS and Android devices or simulators.
Initially, Ionic used to be an Angular-backed framework, but currently, we can also use React or Vue, so it is great if we have a web development team. We can easily wrap our web application in a native container using Capacitor and adjust the UI to be more application-specific with the app user experience.
Cross-platform development is not only about mobile and web development - it also includes desktop platforms such as macOS, Linux, or Windows, and embedded software for AppleTV and Android TV devices.
In React Native, support for the devices is delivered by partner or community libraries. For macOS and Windows, the libraries are maintained under Microsoft's Github which is also engaged in the further development of React Native as a framework.
Flutter by default supports macOS, Linux, and Windows - the Google team invests in this direction and we can be quite confident that it will be stable in the next few years.
In Ionic, desktop support is achieved by Electron, which is quite a common tool and widely used in the industry.
With the growing popularity of such cross-platform development frameworks as Flutter, React Native, and Ionic, it’s not surprising that more and more companies are looking into this domain and considering using it to build their mobile applications.
If you’d like to know more about our approach to cross-platform development, check our website where we detail our use of the most popular cross-platform frameworks: Flutter, React Native, and Ionic.
Development React Native Mobile DevelopmentNativeScript vs. React Native in 2023 - Which One to Choose?