Cross-platform mobile development is getting lots of attention. Why? Well, there are two types of app development projects – native and cross-platform. Native apps are written for specific platforms, like Android or iOS (Apple). Producing a native app for both Android and iOS requires developing two apps. Cross-platform mobile development, however, takes aim a single app that can work on both platforms. Over the past few years, we’ve noticed a general misunderstanding about when to go with cross-platform app development over native apps. The reasoning we hear most is that cross-platform development cuts costs and development time.
The expectations of cross-platform development are high: develop an app that runs everywhere, at less cost and within a shorter time frame. But, let’s do a little reality check and take a look at how these high expectations could end up being a problem. Our goal is to leave no stone unturned so that you can make an informed decision on cross-platform app development. In the process, we’re likely to dispel some misconceptions and myths surrounding the cross-platform approach.
What’s cross-platform development all about?
Cross-platform development has been around since the 1970s, with the programming language C being the first well-known cross-platform solution. There are a lot of different programming languages out there, many with variants of their own like C, C#, C++, and Objective-C, not to mention ones such as Basic, Fortran, and Pascal. Today though, while you’ll come across some exceptions, the field narrows quite a bit by sticking to the most-used languages for mobile app development.
- iOS Native: Swift and Objective-C are used today in native apps for iOS devices. Many legacy projects still use Objective-C. But, now iOS developers have two options: Swift or Objective-C. Most prefer Swift.
- Android Native: Java is the official programming language used by Android, but Kotlin is also becoming very popular, Google is putting in a lot of work to make developers happy with Kotlin. C, and C++ could also be options with Java for native features where low-level code execution is needed without the Java Virtual Machine for performing tasks such as encoding/decoding.
Build Once – Run Everywhere.
There are dozens of tools and solutions for cross-platform mobile development. Developers and clients alike love the concept, since it’s often marketed as a way to cut costs and time by writing once and running everywhere. Sounds great, right?
The illusions vanish when they realize that platforms are incompatible, and cannot provide the same functionality as native software. These illusions create problems for many software development projects. They create risks. And risks can kill the benefits.
Risks include variations in how the app is displayed, features not working as intended, security vulnerabilities, and more – all on a device by device and operating system basis.
Devices and Operating Systems
There are thousands of different mobile devices out there. Globally-speaking, about 88% of them use Android (with 16 operating system versions) and 12% use iOS (with 11 versions). The Android vs. iOS market share is not the same everywhere though. It is also important to note that technically most stats only compare Android and iOS. There are other devices using a variety of other operating systems, albeit with a collective market share of perhaps 4-5%.
In most cases, these can be safely ignored by businesses in the United States. They are usually older mobile phones persisting in some countries where the average lifespan of a mobile phone exceeds 7 years; one good example was South Africa, which until quite recently was the world’s #1 Blackberry audience. Blackberry has since adopted Android, too.
The different iOS and Android versions go back to at least 2007, so there’s always a question of how far back you want to go to be backwards-compatible. Many developers, however, will only support the two most recent OS versions. For iOS, providing for users going back to iOS 9.x covers about 97.5% of the audience – it was released in 2015. With Android, the ecosystem is far more varied, but Lollipop 5.1 and forward picks up 87% of Android users. It was released around November of 2014.
Android vs iOS Market Share
It is important for you to perform your own market research before making any development decision. In addition to your research, it is prudent to ask your development team or agency, too. Changes in tech can force major “near-future” changes in mobile market shares, and may not be picked up by regular market research. One new, or impending example, is how Google Play has started requiring all developers to submit 64-bit versions of their app (supported by Lollipop 5.1 and later), as of August, 2018 and 32-bit versions will no longer be downloadable come August, 2019.
Android captures 87% of the global mobile market compared to about 13% of iOS users. However, when it comes to the US market, iOS has a 63.5% market share, up about 8% over 2017. That leaves Android with a 34.16% share. It’s also well-established now that iOS users spend twice as much as Android users.
I’ve found and would recommend gs.statcounter.com as a good (free) place to start for research regarding mobile device usage. Use the “Edit Chart Data” to select country, date range and any other criteria like OS, device, browser, etc., that you want. For a quick view comparing iOS vs. Android, checkout DeviceAtlas.
Market Launch and Long-Term Strategy Considerations
All of your technical and market share data should help define an optimal marketing plan both for your app’s launch and its long-term. Other market and demographical data will influence your decision, too. Simply put, don’t guess or make an arbitrary decision. Use the data to answer the Android vs. iOS vs. Cross-Platform question for you. decision. Making that decision without considering all of your available market data could leave you up the Schitt Family Creek without a paddle. The decision should be justified based upon your budget and ROI requirements.
Some basic starting points might include the following scenarios:
- iOS first. If your budget and ROI are major concerns, start with asking about an iOS first launch considering its more affluent audience, especially if you intend to launch in English, or one language in another developed market (North America or Western Europe).
- Cross-Platform first. There’s really only one clear-cut case where you MUST engage with a Cross-Platform App – and that’s when it MUST be compatible with non-standardized, often legacy, devices. That’s not the only case where Cross-Platform development is viable, suffice that we’re about to get into more of its technicalities.
Principles of Cross-Platform Apps
As computers grew in performance, so-called runtime solutions came into being – like the Java language and its virtual machine. It’s a unified environment, where the application is run. Basically, the source code is only written and compiled once.
Web-based solutions offer another world for cross-platform apps. Here, it’s all about the browser. Since browsers are a part of pretty much any modern operating system, running applications within browsers like Google Chrome, Safari, Internet Explorer and Firefox makes a lot of sense. The code doesn’t even compile since browsers have built-in interpreters.
These solutions have a common feature, a layer between the app and the OS – a compiler, a virtual machine, or a browser. Through this layer, the OS accesses the app’s functionality.
The Problem of Universal vs. Specific Devices
But, there’s a fundamental contradiction here: the solution has to be implemented for each platform separately. That means each implementation will have its own bugs to fix, versions to maintain, and features to roll out. Even specific devices by a single manufacturer may need separate versions.
That makes the development of cross-platform applications a bad option for cutting costs. Yet, even if you manage to cut some, it will be “eaten” by bugs, support, maintenance and so on.
We’re not evangelizing against cross-platform apps here, we just recommend a deeper analysis of the pros and cons:
In cross-platform mobile development, everything comes at a cost.
Every Tool Has a Function
Sometimes I like to go to the hardware store and run around with a screwdriver shouting, “Ladies and gentlemen, this is not a drill!” Okay, well – the simple point is that every tool has a function that it can perform very well. It can perform other functions, too – but not as well. Here’s a more in-depth view of the technologies for cross-platform mobile development. Most of them are suited for mobile app development, but some work for desktop computers, too. These solutions provide developers with UI kits, Application Programming Interface (APIs), development and distribution tools.
Game development is abundant with compile-time solutions because performance is the top priority here and the UI has to be consistent across all platforms. Compile-time solutions require code translation. The code is written for one of the platforms and then converted to the code of the destination platform. That process requires skilled developers, for it to function properly.
There are online services that provide tools to build and submit mobile apps to the stores right from the browser. Como, now owned by Swiftic, is an example of such app builder. Some of the solutions are just UI kits for developers: Mobile Angular UI, jQuery Mobile, and Sencha Touch. There are also distribution and analytics systems like IBM MobileFirst and Trigger.io.
Is it Compile-time, Runtime or Web-based?
Let’s define the most important goals for cross-platform mobile development:
- unified development process;
- cost cutting;
- faster development;
The platform’s API has a fundamental impact on these goals. For compile-time solutions, your developers have to know all of the APIs for the destination platforms. They have to write different code for each platform. This leads to higher costs and longer development times. As a result, there’s no unified development for you here.
Runtime and web-based solutions ensure the development is unified. But the restricted access to APIs will make you build custom solutions and workarounds, spending more time and money.
Mobile apps depend quite heavily on the User Interface (UI), so that’s the main effort. Compile-time solutions require almost as much effort as native apps when it comes to UI. While web-based solutions may be more affordable, they can fail to provide a top-notch user experience (UX).
Comparing Your Options
Any integration of third-party Software Development Kits (SDKs) increase the costs and terms for cross-platform solutions. It, again, makes unified development close to impossible.
With runtime and web-based solutions changing the code, there can be a challenge for security. But, it can also be an advantage, as it allows for directly updating applications, bypassing the app stores.
Debugging Cross-Platform Apps
Even though all of the solutions above have standard debugging tools, identifying and debugging are in fact more complicated for cross-platform than for native development. Cross-platform environment makes it more difficult to understand crashes and performance. In some cases, debugging apps can take three times longer with Xamarin than it does with native apps. Sometimes it’s necessary to support obsolete platforms. In such cases, cross-platform mobile solutions can be the only way out.
Everything depends on the application version. Developers have to wait for the solution to add support of new features and to fix some bugs. It increases the project terms. While developers can implement workarounds, it still increases both the terms and the budget.
One of the important advantages of cross-platform mobile development is a homogeneous team. But it’s impossible to exclude platform-specific issues, necessitating at least some native development. This also increases costs and development time, as it makes fully-unified development impossible.
Cross-platform mobile development’s main advantage is a single code base, with the challenges and limitations, that come with it. Conversely, there is a high risk you will need to create separate solutions to make that single code base work with different platforms. More complex code or more integrated third-party solutions require more development time and money. There is also the chance that despite your best efforts, the only viable solution will ultimately end up being to use custom native code. These aren’t problems in native development. Another significant risk comes in the form of cross-platform security threats designed to deliver malicious files to multiple platforms.
The Cross-Platform Mobile Development Team
By now, it should be pretty clear that that cross-platform mobile development requires more attention to the architect role in the team. They should be the one keeping spaghetti code out of your project and making sensible decisions on technologies and practices.
The team is your most valuable asset, yet the source of some risks. Platform knowledge, or rather its absence, can cause reworks. Even if a single platform is unknown to the team, it takes time and money to deal with. Furthermore, the solutions have their own features, APIs, and issues the team must know. So again, unified development is hard to achieve.
Because that’s a lot of information to chew, here’s a basic breakdown of risks.
The Benefits of Cross-Platform Mobile Development
The risk analysis above shows that the fundamental goals of the cross-platform mobile development are really hard to achieve. But, that doesn’t negate all the benefits.
Easier to find developers
You can bring in well-known web and other frameworks to mobile development. Such technologies boast a great active community, that constantly contributes to the evolution of the platforms. You can harness the power of the community for your project.
Faster hiring and project launch
Popular programming languages mean it’s easier to hire developers. Project requirements stay the same, while your people work with a well-known technology. Such teams can deliver a Minimum Viable Product (MVP) in very short timeframes. This benefit works well enough with web-based solutions.
The team, however, will have to spend the project’s resources to get mobile expertise. As a result, it will be necessary to evolve the project taking that into consideration.
Another benefit of the cross-platform mobile development is a reduction of management overhead. The project manager, team lead or architect will manage the single project, but not for each platform.
Sometimes it’s necessary to support obsolete platforms. In these cases, cross-platform mobile solutions can be the only way out. But make no mistake here: each solution supports its own set of the platforms. You cannot always choose the technology you want.
We’ve gone through the well-known cross-platform mobile solutions, the most important contradictions and the risks. The analysis shows that:
- Complex cross-platform mobile development has a higher risk of increased development costs and time, compared to native development;
- Cross-platform teams can’t be fully homogeneous and the developers have to learn the platforms they’ll be working on;
- Going with cross-platform approach allows to start the project faster;
- The web’s development community can be involved in your mobile development.
Each cross-platform solution has its own pros and cons, as described above.
Compile-time solutions are the only choice when performance is the goal. Otherwise, they are really close to native development;
Run-Time solutions allow creating apps with a real native look and feel. However, they are quite risky because of own APIs, and unsupported features;
Web-based solutions have a lot of restrictions due to their high-level environment. The maturity of web technologies and development community can cut some risks and help to provide maximum platform coverage.
Many cross-platform technologies are less-expensive in terms of developer salaries. In addition, you can achieve lower costs by hiring less-expensive (and usually less-experienced) developers.
So, the main problem with cross-platform development is the universalism. The universal solution can solve a variety of tasks, but it can’t solve tasks better than a specialized one. For instance, the computer mouse allows one to interact with any application but it isn’t as comfortable as a joystick for gamers or a graphic tablet for painters.
But sometimes cross-platform is the only way to implement the mobile development app project. That’s especially the case with obsolete platforms.