A recent project that required an app for tablets and phones ran in to the eternal debate of whether it should be native, web, or progressive. 

Having researched the options, and taken a look at the emerging Progressive Web Apps, given Apple’s iOS 11.3 release adding further support, here is a quick high-level overview of the choices with their benefits and disadvantages.

Check the end of the article to see what decision I ended up making and why.

Native Apps

Native applications are typically written in a specific language depending on the platform targeted, e.g. Swift, Java, Objective-C, etc. They are submitted to the app store for approval before being available for users to install.

The biggest advantage to developing a native application is being able to craft and optimise a dedicated user experience based on the chosen platform.

Native application’s ability to use the device’s functionality allows for a much richer application from both the user and developer’s perspective.

Pros

  • Fast. Like, honestly, so much faster
  • Can access device functionality, e.g. camera, push notifications/badge icons
  • Interaction with other applications, e.g. Facebook log in
  • Able to develop with advanced features, e.g. geofencing, NFC
  • Offline capability

Cons

  • Expensive both in development and maintenance
  • Not cross-compatible between platforms
  • Having the app approved by the app store adds an extra barrier
  • Harder to ensure the latest version is used by all

Web Apps

Unlike native apps which are installed on the device, web apps are essentially websites and are accessed through the browser. They are usually written in the HTML5 stack (HTML, CSS, JS) using a library such as React.

Pros

  • Typically cheaper to develop and maintain
  • Can be accessed directly from any browser; no need to install
  • Do not need to be approved by the app store
  • Users will always have the latest version

Cons

  • Require an internet connection
  • Has the potential to be less secure due to the lack of approval
  • Slower than native apps
  • Can not use device functionality

Progressive Web Apps

A Progressive Web App (PWA) is similar to a web app in that it is not installed through an app store and can be accessed through the browser. The difference comes in the ability to add the application to the home screen like native apps, have marginal offline support, and use a subset of the device’s functionality.

Pros

  • No need to develop separate apps for different platforms
  • Able to work offline (to an extent)
  • Load quicker than web apps
  • Can use a subset of device functionality, e.g. push notifications

Cons

  • iOS generally lacks a lot of support that Android currently has for PWAs
  • iOS (currently) supports less device functionality, a notable exclusion being push notifications
  • iOS will only store up to 50 Mb of offline data and files
  • iOS doesn’t yet notify users to install PWAs; whereas Android will display a banner
  • State is not saved between PWA sessions

Outcome

As for the project mentioned above, I eventually decided on a web app due having a relatively short amount of time to develop the solution and needing cross-platform support across iOS, Android, and desktop. The application as it stands does not require the use of features such as push notifications; however, should this change it is not difficult to switch over to being a PWA.