Deciphering the terminology in mobile development

mobile app types Venn diagram

A rapidly developing industry yields a cacophony of terms

The field of mobile app development (or simply "app development", as its known in the future) is one that's changing so fast, it can be difficult to keep up with all of the terms or be able to make distinctions between the meanings that a single term may have. The prime example of this is the term "native". What does "native" actually mean?!?!

I know some of these terms will be very obvious to fellow developers. This list is more intended for sales/marketing folks. I find that in my daily life at work, there is more than a little confusion about some of these terms among non-technical folks. I hope this post can help provide people in those roles with clarity on some of the mobile jargon.

app

“A self-contained program or piece of software designed to fulfill a particular purpose; an application, especially as downloaded by a user to a mobile device.” - as defined by Google

platform

Refers to the hardware and software specifications set forth by a particular organization in order to facilitate the development and running of apps. The iOS platform is specified and maintained by Apple Inc. The Android platform is specified and maintained by Google Inc.

device

The hardware portion of a given platform. Examples on the iOS platform are the iPhone 5s and iPad 3. Examples on the Android platform are the Samsung Galaxy S5 phone or the Asus Nexus 7 tablet.

operating system

The software portion of the platform that is responsible for running apps and managing hardware resources (memory, file system, WiFi, etc.).

app bundle (for iOS)

The term used to describe the entirety of a single complete iOS app, containing both executable code as well as content such as image files, video files, documents, etc. An app bundle is the final output of the iOS app development process.

APK (for Android)

The term used to describe the entirety of a single complete Android app, containing both executable code as well as content such as image files, video files, documents, etc. An APK is the final output of the Android app development process. (APK is not an abbreviation. It is simply the file extension of the Android app, as in "AngryBirds.apk", for example.)

app package

The term (defined here) to describe both iOS app bundles and Android APKs, the purpose of which is to discuss them in a platform-agnostic way. An app package is the final output of the app development process, regardless of platform. An app package is deployable to an app store.

API (application programming interface)

A piece of software that exposes functionality to another piece of software. Developers often tap into (or “consume”) the functionality of pre-existing APIs during their development of a new piece of software. Coincidentally, the new piece of software being developed may itself be an API! The app package portion of a mobile app typically consumes pre-existing APIs, but developers frequently write their own APIs (that may talk to other APIs) during the development of mobile apps. In this sense, the totality of a mobile app does not always refer only to the app package, but sometimes also one or more APIs.

web API

An API that is exposed to the world wide web, so that its functionality may be accessed by any Internet-connected device. Mobile apps frequently take advantage of web APIs. An example of this is how the Facebook native mobile apps are able to present such a massive amount of information: because the functionality of Facebook is exposed through web APIs that the native apps consume.

native programming language (NPL)

Refers to the computer programming language that the platform designer/maintainer designed to be used with the given platform. For the iOS platform, the native programming language is Objective-C. For the Android platform, the native programming language is Java.

non-native programming language (NNPL)

Any computer programming language that was not specifically intended by the platform designer/maintainer to be used with a given platform, but can be. Examples of non-native languages that can be used (along with special tools) to develop apps are C#, Javascript, Ruby, etc.

cross-platform app

An app that is developed to target more than one platform, using a single programming language to do so.

multi-platform app

An app that is developed to target more than one platform, using multiple programming languages to do so, typically the native programming languages of each platform.

app developer

A person whose responsibility it is to write the software code that comprises an app package that will run on a given platform or platforms.

native app

Any app that has been developed in such a way that the full extent of a given platform is available for the developer to use. For example, if I were using software tools that allowed me to write an app, but for some reason did not allow me to access a device's camera functionality or compass or calendar system, then the app is not considered native. If, however, the software tools don't restrict me from using anything that the platform provides, then the app is considered native. The output of developing a native app always results in an app package.

non-native app (with app package output)

Any app that has been developed in such a way that the full extent of a given platform is not available for the the developer to use. For example, if I were using software tools that allowed me to write an app, but for some reason did not allow me to access a device's camera functionality or compass or calendar system, then the app is not considered native. If, however, the software tools don't restrict me from using anything that the platform provides, then the app is considered native. The output of developing a non-native app does not always result in an app package, but in this particular definition it does.

non-native app (without app package output)

Any app that has been developed in such a way that the full extent of a given platform is not available for the the developer to use. For example, if I were using software tools that allowed me to write an app, but for some reason did not allow me to access a device's camera functionality or compass or calendar system, then the app is not considered native. If, however, the software tools don't restrict me from using anything that the platform provides, then the app is considered native. The output of developing a non-native app does not always result in an app package, and in this particular definition it does not. This category of apps includes web apps that do not exist on a device, and instead are accessed through a web browser.

LCD app (lowest common denominator)

An app that is developed with a cross-platform toolset that uses a strategy of lowest common denominator (LCD) for creating the app screens. Different platforms provide different functionality, especially in terms of how user interface (UI) items are displayed on the screens. An LCD development toolset constrains the developer to a subset of UI items that all of the target platforms can display, and none of the items that at least one platform can't display. The advantage is that the developer need only create one set of screens for multiple platforms. The _dis_advantage is that the design of the app cannot be as expressive as a non-LCD app.

Web app (web / mobile web / responsive web)

An app whose code does not typically exist on a mobile device and whose functionality is accessed by the user through a web browser on the device. This type of app can be accessed either by the user going to a public URL (web address), or by accessing web pages that may be directly on the device. The latter requires a hybrid app.

hybrid app

An app which has an app package output, but whose functionality exists mainly inside of a web browser on a device. Because a hybrid app has an actual app package output, this means there is some degree of platform functionality available to the developer. One of the intentions of hybrid apps is to combine the benefits of web apps with the benefits of platform functionality (even though it is typically limited to being less than full platform functionality). Another intention of hybrid app devlopment is to prevent the need for writing user interface code for each target platform independently; because the views are all essentially web pages, they need only be written once. The web portion of the app can exist on a remote web server, or even as web pages that exist on the device itself. In hybrid apps, the browser used to access the web content is commonly displayed without an address bar, navigation buttons, or title header (which is intended to make the web app feel as though it is not in a browser at all). The app package portion of hybrid apps may be developed with either a native programming language or non-native programming language.

HTML5 app

An app whose functionality is written in HTML5, CSS3, and javascript. HTML5 provides many improvements over its predecessors (HTML 4 and XHTML 1.1). HTML5 can be used in web apps and hybrid apps.

Venn diagram describing the relationships between concepts:

mobile app types Venn diagram