Which cross-platform technology will the rockstars go for?
Tips and tricks
So, you’re developing a mobile app and want to save money and time by cross-platforming. The list of technologies now available is mind-blowingly long and keeps on growing. Which one should you choose?
The current trend is that all the big corporations (Microsoft, Facebook and Google) now have decent options for cross-platform mobile development. All three technologies are supported by an extensive community and have their big mother company’s support for the platform’s development. Xamarin has Microsoft, and Flutter has Google, while React Native’s development is based in the Open Source community, even if their bumper has Facebook on it.
Xamarin, acquired a couple of years ago by Microsoft, is built completely differently than the others listed above. In Xamarin, application development is done through the C# language and the user can interface with either native tools or (in the case of Xamarin Forms) with XAML notation. Xamarin’s toolkit then translates the C# code into each of the different platforms: Android, iOS, UWP (used in Windows devices), and Samsung’s Tizen. With Xamarin, the developer has full access to the device’s sensors and API interfaces.
Xamarin stands out from other tools for a number of reasons: if other application development is being done with Microsoft tools, their business logic is easier to make use of as a part of Xamarin apps; it’s easier to get experienced .NET developers to work with Xamarin; and the other options all rely more heavily on web technologies. However, Xamarin applications have large installation packages; their performance and capacity does not quite match that of native applications; and, at the start, one of the biggest gripes with Xamarin was the lack of development tools. Nowadays Xamarin is developed within Visual Studio which has an integrated toolkit and so the developer experience is among the best, and now even a Hot Reload function (which was previously lacking in Xamarin development) has for some time been in the preview stage.
React Native was created by web technologies, or more precisely, React and its maker Facebook. Applications made with React Native are muy bueno, and when done right, they can rival native applications, although they take longer to start up. Both React and React Native have a strong component approach at their core.
In practice, the application has various different modules or separable independent components. This is a big benefit especially when building several different kinds of mobile applications for the needs of one company. With React, it is easy to build component libraries where components are available for developers to re-use in different applications. If a company is building web applications with React, parts of these can then be used with mobile applications and vice versa.
The problem with React Native is the multiplicity of libraries. The use of device APIs varies a lot with competing libraries. The end-user or developer experience are therefore not always the best. If the developer sets out to build their own extensions and libraries, they will have to resort to Java, Kotlin, Objective-C and Swift implementations for different platforms, and not all developers will have these skills if their background is in web technologies.
Google’s input to cross-platforming is Flutter, with an emphasis on fast user interface development. Development uses the DART programming language via configurable widgets. In practice, all the widgets look the same regardless of the platform. The user experience is first-class with Flutter, thanks to the extremely short start-up time and near-native performance.
When it comes to developer experience, however, this addition to the list is still a bit behind the others. CI and CD systems do not yet support Flutter applications that well, so publishing and testing take up more time with each version compared to Xamarin and React Native. Google’s support for developers is well-known for being excellent, so it’s likely that this developer experience will soon be greatly improved. Due to Flutter’s own support libraries, the installation packages are large, though not compared to Xamarin. Flutter offers tolerable support for iOS and Android devices’ API, though not everything has been built yet.
CHALLENGERS: PHONEGAP, CORDOVA, AND NATIVESCRIPT