So You Want to Build A Mobile App

It’s almost the end of 2016, and apps are everywhere. If you’re looking to create one of your own, you’re in luck! There are an abundance of choices for where to start. Some of our developers attended a talk given by Mike Cerny, a C# expert and mobile developer. At this talk, Cerny discussed five different ways of developing a mobile app, each with different levels of performance, access to device functions, and ease of development.

Here are the five ways to develop a mobile app in order of performance (starting with the fastest):

  • Native Platform—using Swift or Objective C in iOS, or Java in Android.
  • Cross-compiled Native Code—write in another language that you like, and compile it for the platform of your choice. Xamarin is the most popular option here!
  • Javascript Runtime—the application is written in JavaScript but executed inside the app (such as Facebook’s React Native).
  • Hybrid Applications—built using standard web technologies HTML, CSS, and JS, and compiled using apps such as Adobe’s PhoneGap, Ionic, or Telerik.
  • Progressive Web Apps—streamlined websites that act like apps (currently only works in Chrome).

Of course, there’s no one best method for developing any app. However, there may be a best method for you and the specific app that you want to build. What method you use depends on your expertise, timeline, and requirements for the app.

Some things to keep in mind include:

  • Is speed of the utmost importance?
  • What language are you most comfortable and most adept at developing in?
  • How much of the device internals (GPS, camera, microphone, etcetera) do you need to access?
  • Is security a major concern?
  • How far back do you want to support old OS versions?

Native

Writing an app directly for its operating system provides the most opportunity to make it efficient and gives you full access to the device internals. This includes background processes such as Google Maps giving you directions even after you’ve switched to another app. Writing directly to a device also gives you tighter control over security, and it will put you in a better position to support older devices. However, developing a native app not only requires expertise in the programming language of your device of choice, but if you decide to offer the app for both iOS and Android, you’re essentially writing two apps.

 

+ Speed, security, full device access.

– Length of development, required languages, required development environments.

 

Cross-Compiled Native

Cross-compiled native code allows you to write a mobile app in a language you’re more comfortable in.

There are a few options available:

  • J2ObjC—allows you to port your Java code for an Android app to an iOS app.
  • RubyMotion—lets you compile Ruby code into either iOS or Android.
  • Xamarin—by far the most popular and powerful option, Xamarin lets you write code in C# or F#, both of which are cross-platform languages. Xamarin has a whole host of features we encourage you to check out, but among them is full support from IDE’s such as Visual Studio. Apps written using Xamarin can also be written as OS-specific, or using Xamarin Forms, which outputs multiple device UIs based on a single set of code. Xamarin-written apps, typically, are not noticeably slower than native apps.

 

+ cross-platform, well-supported, has most of the benefits of Native.

– Requires knowledge of C#, still requires a Mac to publish to Apple App Store.

 

JavaScript Runtime

Very similar to cross-compiled native, frameworks like React Native allow you to build an app in JavaScript, then compile to native code. In some cases, it requires knowledge of the native code bases, but it’s a great method for developing cross-platform apps, similar to cross-compiled native frameworks like Xamarin. NativeScript is another great option that gives you the ability to write an app using JavaScript frameworks like Angular.js.

 

+ cross-platform, has most of the benefits of Native.

– Requires knowledge of Javascript, still requires a Mac to publish to Apple App Store.

 

Hybrid

Hybrid applications represent the most accessible way for inexperienced programmers to get their feet wet in the app pool. This method involves writing the app in HTML, CSS, and JavaScript and “wrapping” it in native code using a framework (Adobe’s PhoneGap, Ionic, and Telerik are some popular options). This is also one of the quickest ways to write an app and can be used by developers to prototype an app before writing it in cross-compiled or native code. Since it requires an “in-between”—one of the aforementioned frameworks—this is also one of the slowest-performing methods of writing an app, but the processing power in modern phones has rendered this less of an issue.

 

+ cross-platform, fast development, easy to develop, many framework options.

– Slower performance, doesn’t have 100% access to device.

 

Progressive Web App

One of the least enjoyable parts of app development is waiting for approval from the app stores. Progressive Web Apps get around that by simply asking users to install them from a website they visit often. Spearheaded by Google, Progressive Web Apps are just websites with a manifest file that tell the browser they can be installed to the device. They also have access to background services, push notifications, and can be added as an icon to a mobile desktop, so they can run very similarly to normal apps. However, they are currently only supported in Android, where Google has a vested interest in pushing web services over native apps. Apple benefits from a robust and popular App Store, so future support for Progressive Web Apps on the iPhone is doubtful.

 

+ Cross-platform, fast development, easiest to develop, doesn’t require App Store.

– Slower performance on old devices, doesn’t have 100% access to device, not supported on iOS.

 

Some caveats of the above options can be mitigated. For instance, there are cloud services that will build your iOS app without the requirement that you purchase your own Mac.

At Twin State, we have developed apps in both Native and Hybrid approaches. Check out our Products Page to see some of the apps we’ve developed!