Cross Platform Development buyers guide
The demand for applications that can be deployed to a wide variety of devices is increasing. These days the possibilities range from desktops running Windows or Mac OS, to tablets and smartphones of assorted sizes running iOS, Windows, Windows Phone, Android or Blackberry. Each has a different screen size and runtime, and different expectations with regards to user experience.
While some of the source code that makes up your application can be the same across all the intended platforms, particularly those modules concerned with the underlying logic of the application, a considerable chunk is likely to be concerned with the user interface, and should ideally be tailored to fit the expectations of the user. There are a number of approaches that you can take to tackle this problem as discussed below.
If you want the best possible performance, combined with a user interface that makes full use of the features of a particular platform, then you really have no choice but to write to the native SDK, which means developing and maintaining multiple codebases. Tools such as Microsoft Visual Studio offer some facilities that can help manage such a project. There is also Intel System Studio which supports C++ development on a number of platforms including Android and Tizen (as found in various devices including smart TVs and in-vehicle systems).
Another option is to write a web application, using HTML, CSS and JavaScript, and then embed the appropriate browser engine so your application can run on the target platform without the user having to explicitly open the web browser. You may need to call native APIs to access device-specific features, but modern JavaScript engines and web browsers can deliver an acceptable performance.
Development frameworks that support this approach include PhoneGap, now owned by Adobe with an open source version available as Apache Cordova, and Sencha Touch which is a business-oriented JavaScript library specifically designed for mobile devices, including not only Android, iOS and Windows, but also Blackberry.
Alternatively you can use cross-platform compilation, writing a single source which is then compiled into multiple native binaries, one for each platform required. The resulting compilations are unlikely to make best use of features that are not shared by all the platforms, although such tools do support conditional statements that can be used to target specific devices. Nevertheless, taking full advantage of all the features offered by the latest version of a platform can be problematic, particularly with regards to the user interface.
Tools that take this approach include Xamarin and Embarcadero RAD Studio. A slightly different approach is offered by Intel INDE (Integrated Native Developer Experience). This is a suite comprising a range of Intel native compilers, tools and frameworks that allow you to target both Android and Windows running on either Intel or ARM processors. One of INDE’s strengths is its ability to tailor your development environment appropriately, be it Android Studio, Visual Studio or the open source Eclipse, and only install the components you need.
Action games obviously need to make the most of whatever the chosen platforms can offer with regards to high performance graphics, and there are a couple of tools designed specifically with this in mind. The Unity engine supports fast 3D graphics on a wide range of platforms, and can be programmed in C# or a JavaScript derivative known as UnityScript. Its development environment is available in both Windows and Mac versions.
There is also WebGL which is based on OpenGL and provides an API for rendering high-speed 2D and 3D graphics onto an HTML5 canvas element. It is supported by the iOS 8 web browser, by Google Chrome on Android, and by Mobile Internet Explorer in Windows Phone 8.1.
Here are the main products you might consider for cross platform development. |
||||
Product |
Target Platforms |
Strong points |
Considerations |
Target users |
Embedded browser |
||||
PhoneGap/ |
Android, iOS, Windows Phone, Windows 8, BlackBerry 10, Firefox OS, Amazon Fire OS |
High level of shared code, mature, broad support, familiar JavaScript and HTML, cloud build option |
Less platform integration and performance than native code |
Business and consumer apps, utilities, casual games |
iOS, Android, Blackberry 10 |
Code with JavaScript, option to package with Cordova for wide device support, visual app builder |
Windows phone support requires Cordova |
Business and consumer apps |
|
Adobe Flash/Air |
Flash Player, AIR for Mac, Windows, iOS, Android |
Rich designer support in Flash Professional |
Larger app size, less suitable for general-purpose apps |
Marketing apps, business graphics, casual games |
Intel XDK |
Web apps or mobile apps supported by Cordova including iOS, Android and Windows Phone |
Code on Windows, Mac or Linux and target web apps, or mobile apps via Cordova |
Business and conumer apps |
|
Cross platform compilation |
||||
Mac, Windows, iOS, Android |
Code in C# in Visual Studio or Xamarin Studio, strong Microsoft partner, uses native controls |
UI code may need rewriting, some runtime overhead |
Business and consumer apps and utilities |
|
Mac, Windows, iOS, Android |
Fast performance of native compiler. Rapid development with visual tools. High code reuse |
IDE requires Windows. Cross-platform GUI may look less native. Does not support Windows Phone |
Business and consumer apps |
|
Android 4.3 and up, Windows 7 and higher |
Code in Eclipse or Visual Studio, C++ or Java, fast native code |
No iOS support, limited targets |
High performance data analysis, modelling, games |
|
Appcelerator Titanium |
iOS, Android, Mobile Web, Blackberry 10, Windows Phone 8 |
Code in JavaScript on Mac, Windows or Linux, good code reuse, uses native controls |
Windows 8 and Windows Phone apps not fully supported |
Business and consumer apps |
Unity |
iOS, Android, Windows Phone 8, Blackberry 10, Mac, Windows, Linux, Games consoles, web player |
Broad platform support, game development with fast 3D graphics, code in C# or JavaScript |
Slightly larger app size than native SDK |
Game development |