# Types of Mobile Apps

## Summary


From a user perspective, mobile apps can be categorised as educational, informational, productivity, gaming, entertainment, communication, eCommerce, and so on. This article is more from a developer perspective, the different technologies that power mobile apps.

The earliest apps interfaced directly with the native capabilities of the platform on which they were deployed. This was the case with apps running on Symbian OS. Later when iPhone (2007) and Android (2008) came out, the app ecosystem became fragmented. App developers had to develop separately for iOS and Android.

To solve this problem and reuse code, hybrid apps were invented but they had performance limitations. In the 2010s, cross-platform development because possible by interfacing to native capabilities without sacrificing performance.

## Discussion

### What are the different types of mobile apps?

There are three broad types of mobile apps:

    + **Native**: App is developed for a specific platform using the platform's native APIs. It's therefore performant and has full access to device capabilities. The platform's ecosystem, such as an app store, helps in distributing the app. Code cannot be reused for other platforms. Examples are iOS (Swift or Objective-C), Android (Kotlin or Java), Windows Phone (C# .NET).
    + **Hybrid**: App is developed using web technologies but is wrapped inside a native app. Code can be reused across platforms. App can also access native APIs. Examples are Ionic, Sencha Touch.
    + **Mobile Web**: App is developed with web technologies and delivered via a web browser. Typically, these are web apps with responsive design so that they display well on smaller devices as well. Business logic is on the server and only a single codebase needs to be maintained. There's no need to install anything from app stores. *Progressive Web Apps (PWA)* deliver mobile app-like experience via a web browser.

### Could you explain how hybrid mobile apps work?

The term "hybrid" implies that the app uses a mix of web technologies and native APIs. HTML5, CSS and JS are used so that same code can be reused across platforms. Native APIs are used to get access to camera, geolocation, etc. In the case of Ionic, which is based on Cordova, *WebView* is used. This is a browser instance that interprets and render the UI. It's wrapped within the app. Cordova takes care of the wrapping and interfacing to the native APIs. 

Hybrid apps have to live with the limitations of WebView and therefore performance could suffer. Latest native capabilities may not be available unless platforms such as Ionic keep pace with the changes. To overcome this, platforms such as Appcelerator Titanium (JavaScript), React Native (JavaScript), NativeScript (JavaScript/TypeScript) and Xamarin (C#) take a different approach. App can be written in another language but then compiled or interpreted to call native APIs. Thus, code reuse is possible without sacrificing performance. Such apps may be called "hybrid native apps" or even simply "native apps". 


### What are the metrics by which we should evaluate mobile app platforms?

Some metrics include development cost, performance, distribution, monetization, device features and their accessibility, user interface, code portability, and maintenance. For example, native platforms give full access to device features and better performance. Codebase of hybrid apps is easier to maintain at lower cost and can be ported to another platform more easily. Native apps are typically distributed through app stores. Hybrid apps can be distributed directly but they lose the benefits of app store discovery. 

You may also want to look at availability, compilation, development environment, programming language/platform and community support. For example, React Native is free but Xamarin is free, subject to terms and conditions of Visual Studio Community Edition. Just-in-time compilation is not possible for iOS on both React Native and Xamarin. React Native and TypeScript are based on JavaScript and therefore easier for web developers. Developers coming from C# and .NET background will find Xamarin easier to adopt. A larger community means that you can find third-party packages and UI components. 


### How should I choose the right platform for my next mobile app?

Developers skilled in native platforms are difficult to find and costly. For each platform, you would need a different skill set. If you want your app to reach a broad audience across platforms, then either a mobile web app or hybrid app must be preferred. These allow code reuse across platforms. 

If your app involves heavy graphics such as in gaming, requires full access to device capabilities, or full control of the UI, then native apps will offer these. In fact, if your app is targeted at only a specific platform such as iOS, then going native is a sensible approach. 

To obtain native performance while also reusing as much of the code as possible across platforms, React Native, NativeScript, Xamarin, etc. can be adopted. What you adopt should depend on the maturity and support of the technology, plus the skill sets available with you. For example, C# and .NET developers can adopt Xamarin while JavaScript developers can adopt React Native or NativeScript.

## Milestones

1998

Psion Software is renamed as Symbian Ltd, and its EPOC32 becomes **Symbian OS**. Symbian OS forms the basis of many UI variants including Series 80, Series 60, UIQ and MOAP. This UI fragmentation makes it difficult to deliver apps across the variants. Symbian programming is via *Symbian C++*. It's low level and difficult. In 2011, this is replaced with Qt-based development but it comes too late against competition from iOS and Android. 

Jun  
2007

Apple launches the very first iPhone in June 2007. iPhone offers capacitive touchscreen, which is vastly superior to resistive touchscreens of Symbian-based phones. The OS is named *iPhone OS*. The initial idea is that developers would build web apps that would be rendered on the Safari web browser; but in February 2008, Apple releases the **iPhone SDK** to enable third-party native apps. In June 2010, iPhone OS is renamed to *iOS*. 

Nov  
2007

Google releases beta version 1.0 of Android for developers. Developers can make native apps for the Android platform. The first Android phone named T-Mobile G1 (or HTC Dream) is announced in September 2008. 

2009

A startup named Nitobi creates **PhoneGap**, for developing cross-platform hybrid apps. Using only HTML5, CSS and JS, it provides APIs to access native capabilities. Apps created with PhoneGap use *WebView*. In 2011, Adobe purchases PhoneGap. It also open sources the code via Apache Software Foundation (ASF). The open source variant is called **Apache Cordova**. 

2010

To facilitate mobile apps using web technologies such as HTML5, CSS and JS, **Sencha Touch** is released. Developers can build UIs that looks like native UIs. It also support Cordova APIs to allow access to accelerometer, camera, geolocation, etc. 

Apr  
2012

Samsung releases **Tizen**, an OS that can be used on a wide range of embedded devices including smartphones. The first smartphone to run on Tizen is planned for a 2014 launch in Russia but cancelled due to lack of apps. The first smartphone comes out in India in January 2015, the Samsung Z1. Tizen is based on Linux kernel. Developers can use it to build native apps (C++), web apps (HTML5) or even hybrid apps. 

Feb  
2013

For mobile app development in .NET and C#, **Xamarin 2.0** is released. This includes Xamarin Studio, an IDE that integrates well with iOS and Android SDKs for cross-platform mobile app development. The release also allows developers to write native iOS apps in Visual Studio using C#. Xamarin as a company dates from May 2011. 

2013

A startup named Drifty, founded in 2012, releases **Ionic**, an open source HTML5-based platform for building hybrid apps. Ionic itself is based on Cordova. 

2015

Facebook open sources **React Native**, which is a framework to build cross-platform native mobile apps using JavaScript and React. 

Feb  
2018

At the Mobile World Congress 2018, Google releases the first beta of **Flutter**, a mobile UI framework to build native interfaces for both iOS and Android. Flutter is written in *Dart* programming language.