Cross-Platform Software Development
Why do we need cross-platform software, if we have perfect tools for each platform for native development: Objective-C and XCode for macOS and iOS, Qt and C++ for Linux, Delphi and VCL for Windows? We already have a lot of proven tools for all platforms, but... Earlier, 10-15 years ago, Windows was the leader among other operating systems and we didn't have such a wide range of mobile devices, smart phones, tablets, smart watches. Even macOS was not as popular as it is today, Linux didn't have such beautiful and stable GUI shells as it has today. In the 90s and 2000s it was enough just to develop a Windows desktop application to satisfy almost all business clients. But in the 2010s the market has changed. Today we cannot develop applications only for Windows if we want to create software for a wide range of users. Now we have to think about desktop users (sometimes it's very important to have both Windows and macOS versions), as well as about mobile clients, provide web access and so on.
We had two important paradigm shifts in software development in the 21st century:
- Internet revolution in the 2000s;
- Mobile devices revolution in the 2010s.
After each of these shifts software architecture as well as the ways we get access to software changed. Nowadays we have so many different platforms, devices, operating systems, that if we want to develop native software for each of these platforms it will be an extremely time and money consuming task. That's why today cross-platform development is so highly-demanded.
Someone can say: "We had Java SE many years ago..." - Yes, but Java SE couldn't deal with all the mentioned challenges and it was intended first of all for desktop development.
Nowadays, we can turn to cross-platform development to:
- Create desktop software with or without UI with a single codebase, which will work for Windows (32/64-bit), Linux (32/64), macOS (32/64-bit);
- Build a mobile app (for a mobile phone, tablet, smart watches, etc.) with a single code base, which can be uploaded to Apple App Store and Google Play Market (32 and 64-bit support);
- Or even to develop software, which can work as a Windows desktop application or a mobile app at the same time (yes, that's possible).
From the technological point of view with the help of various cross platform development tools, we can offer the following solutions:
- Software which looks as native for any platform/operating system;
- Software that works/is processed inside a virtualization environment (or interpretation) (platform/operating system - virtualization layer - your software/application). For running your software you may have to install a virtualization environment or it will be already integrated into your executable package;
- Web and hybrid solutions, when your application is like a fully functional website hosted somewhere in the cloud or even on a virtual web server, integrated to the packages and works directly from your machine or mobile phone.
Native cross-platform apps
You can ask a reasonable question:How can a cross-platform app be native? And it can really be confusing. Native cross platform development means that you are writing a source code using one tool and programming language (single codebase), like Delphi and Object Pascal, and this tool compiles it for each platform using a native compiler to a low-level byte code. And as a result you have a native app for each platform, like .exe for Windows, .apk for Android and .ipa for iOS.
- Best performance;
- Deep integration to the platform;
- Possibility to publish apps on the app stores as native apps without any limitations;
- And moreover, you get the same native app like it was built using a native development tool with the same characteristics;
- Dependency from the software development tool vendor and sometimes a step back from the native tools, i.e. not all platform features will be supported (support will be added during some time and depend on the vendor's possibilities and resources);
- Platforms are different anyway and you will need to write some source code for each platform, using, for example, compiler directives;
- If you can easily integrate any 3rd-party SDK to a native development tool - very often it won't have support for your cross-platform tool.
At Softacom, we use RAD Studio, Delphi and its cross-platform framework - Firemonkey (FMX), for developing cross-platform applications (desktop and mobile).
Cross-platform apps developed with the usage of virtualization and middle processing layer
- Better compatibility between platforms. Usually you are developing software using the possibilities of the virtualization environment rather than of a low-level platform.
- Performance is the matter. Your apps will need more calculation and storage resources.
For developing this kind of software we can suggest using Electron framework (for desktop applications) and Xamarin (for mobile apps).
Web and hybrid solutions
- Updates delivery process is much easier - for some solutions you can just update your server-side part and that's all - your version will be delivered to all client apps. Especially, it works for UI updates and app UI customization.
- Limitations in platform features access because of permission restrictions;
- Limitations in publishing software on apps stores;
- Performance issues;
- Offline mode limitations.
Why are we using cross-platform development?
- A single codebase can be usually applied for the whole project (with some exclusions, of course, as for example, when we have different projects inside one solution or one project group);
- We want to save development time resources for projects with a limited budget;
- We want to store the entire source code using a single technology for different platforms;
- We want to develop software faster;
- When we do not have or we can't engage developers with different skills in the same project, i.e. if our budget allows us to have only 1 developer, we cannot have three developers separately, for example, an Android developer, an iOS developer and a Windows desktop developer. In such a case, cross-platform development is a good way-out.
It's very important to perform an initial business analysis and select development tools very carefully. Sometimes instead of saving development time, a cross-platform tool will bring you many problems and as a result this development process will take longer than the development with the usage of native tools for each platform. Your software development contractor company, such as Softacom, should have a very deep understanding of all pros and cons of each tool and framework and should be able to predict what will happen in one or three months after the start of the development. It is also important to bear in mind all deployment nuances, platform restrictions and so on.
Cross-platform development offers us new possibilities. It comprises a really huge part of all software development services today. And we will be glad to help you with this process!
About the AuthorSegre Pilko