main banner

Mobile Development

Mobile App Development

When developing an app of any kind, there are many decisions to be made. One of the first and most important of those decisions is which technology or technologies to use when implementing the app.

Note: this post deals with apps for Android and iOS, which are the two most popular mobile platforms at the moment. BlackBerry, Windows Phone and others are not considered in some of the specifics, though the bulk of the considerations also apply to them.

When developing an app of any kind, there are many decisions to be made. One of the first and most important of those decisions is which technology or technologies to use when implementing the app. In the case of the mobile market, that particular decision forces us to decide whether we should go with a native app, or whether we should go for a more generic approach.

The generic approach will allow us in theory to deploy the same code to multiple different platforms, such as iOS, Android, etc. There are different approaches for creating generic code-bases: one of them is to develop the app as a web-based app, using HTML, CSS and JavaScript to implement it. Since those are for the most part standardly supported technologies, the theory says that the same code will work on many platforms. In practice, there will be situations where some specific workarounds will have to be implemented, as the support for some features varies by platform and by web browser. While this might in general require less effort than creating a whole separate app for another platform, for very complex apps the burden of creating these workarounds might become very time-consuming and difficult to maintain. When using this approach, the app will be tied to be used from a web-browser, but it can also be wrapped in a native-app shell, which merely consists of a web-view control that displays our app. This way the app can be directly accessed from the device desktop, instead of from a web-browser.

Another way for creating generic apps is by using code-translators. These translators require the developers to use a specific coding language, which is then translated by a framework into an app that the platform can execute. Depending on the framework, the coding language may be JavaScript, C# or some other. Also, depending on the framework, the support for different platforms will vary. Going into more detail about these translators is outside the scope of this post, but as with web-based apps, the results of the translation may not always work as expected for all platforms, depending on the controls and classes used, thus requiring workarounds per platform. Also, these frameworks will incur an additional cost in the form of one or more licenses, which can become quite expensive.

The other approach is to implement the app as native. In this case it has to be developed in a language supported by the platform: Objective-C for iOS and Java for Android. This means developers with diverse skills will be required for the project, and this also means that multiple separate apps will have to be implemented and maintained. (Note: both iOS and Android support C++, but it is used mostly for algorithms and other CPU-intensive tasks. Still, this allows in some cases to share some code.)

While the web-based approach gives us the advantages of using the same code-base for multiple platforms and requiring less diversified developer skills, native apps have some important advantages over web-based apps:

  • By executing in the native language instead of being translated and passing through a web-browser/view, native apps have better performance, which might be an important consideration depending on the kind of app being developed.
  • By using the native frameworks, the look and feel required by the platform guidelines will be easier to achieve (which is an important consideration when submitting the app for approval by an app store, especially for iOS).
  • The native frameworks provide better support for storing data than that available to web-based apps.
  • The native frameworks provide access to lower-level APIs, thus allowing the developer to interact with OS functionality and hardware drivers.
  • IDEs for developing native apps usually come well equipped with many tools that help in developing, debugging, testing and profiling an app in a more integrated manner.

These are just some of the factors to consider when developing an app for the mobile market. In the end, the best approach to follow will depend on the specific requirements of the app being implemented, and even other factors such as budget, time to market, and the skills of the developers available, might play a role in going one route or another.

Guillermo C.

Guillermo has a B.S. in Electronic Systems and an M.S. in Computer Science from UIUC. He has 18 years of experience and has mainly focused on project management and mobile technologies. He is a  Lego spaceship builder and avid reader who was born and raised in Monterrey, Nuevo Leon. He has written posts on our blog you will find particularly interesting.