Author: Engin YILDIZ, SW Architect – Web & Mobile Application Group
Mobile Phone Basics
First mobile phones were invented in the 1940s by the engineers working at AT&T. They looked quite different from the mobile phones we are using today and mostly used for public service communications. It took another 70 years for a revolution to occur in mobile phones.
In 2007, when the first iPhone was debuted, the era of mobile phones had begun. In the following year, 2008, the first Android phone also debuted. The App Store and Google Play Store (called Android Store back then) were also published in the same year and a completely new industry officially began to take place.
The number of mobile users has grown since then and as of 2020, there were roughly 6 billion users worldwide. This year, the number is expected to exceed 6.3 billion. Smartphone usage has also increased from 2.5 billion to 3.8 billion over the past 5 years.
The growing interest and constant technological improvements made on smartphones have significantly affected the software development industry. There are estimated to be over 20 million software developers around the world, and almost half of it, 8.7 million software developers are in the mobile development business. The statistic itself is proof of the significance of the mobile app development industry. So, what does a mobile app developer do? Let’s have a glance at how mobile app development looks nowadays.
Mobile Development Basics
Mobile development is developing apps not only for smartphones but also for tablets, and in recent years wearables like smartwatches. As new improvements have been made and new types of devices released, smartphones or all the devices together are beginning to not only be considered as devices but also as extensions of our mere bodies. We are in a time where we are so much dependent on our so-called extensions, and their capabilities become more and more intellectual every day.
Apart from the devices, mobile development platforms are also improving at a growing rate. There are more than one tool (IDE) and language available in order to develop the same app. We can divide these developments into two main categories; native app development and cross-platform app development. Before we dive deep into the subjects, let’s briefly look into what these development types really are.
Native development is designated to take all the advantages of a single platform and could solely be used for that matter. Main native development platforms are Apple’s iOS and Google’s Android. iOS uses XCode as a tool with Swift/Objective C languages and Android uses Android Studio with Java/Kotlin languages. There used to be another native development platform called Windows Phone with C# language, however; the platform support ended in 2019.
Cross-platform development is creating an app by using a single tool with the same codebase for multiple platforms. Unlike native development, cross-platform development is not specific to a platform and could be deployed for both iOS, Android platforms and Web. There are a number of cross-platform development tools and the main ones are React Native, Flutter, and Ionic.
Native apps are great in terms of high performance and speed due to the fact that direct interaction with coding. The UI components are specifically optimized for a single platform and this feature of native app development increases the quality of graphics and eases the design process of the interface elements. Native apps have direct access to low-level APIs and all the features of the operating system. On the other hand, if an app should be published for multiple platforms, it will increase the total time and effort cost of development. The app should be developed in different programming languages using different tools. This is where cross-platform development mainly surpasses native development.
iOS, a.k.a. iPhone Operating System, is considered as the first mobile development platform among the others. The mobile industry literally began to grow after the debut of the first iPhone.
iOS runs on iPhones, iPads, iPods, Apple Watches and Apple TVs for now. Apple is also investing in robotics recently, so there may be iRobots running with iOS in the near future. iOS uses the Cocoa Touch layer which is built on top of the Cocoa UI that is used by the original OS X. iOS also shares some frameworks with OS X.
Developers must own a Mac in order to develop apps for iOS. They can choose between the Swift or Objective-C languages, or even use both languages in the same codebase using the bridging method. Screens are generally organized by view controllers and designing interfaces could be done programmatically or via Storyboards/NIBs which are based on XML structure. iOS also allows the usage of UIKit or the newly released SwiftUI framework to design interfaces. The most beneficial aspects of using the SwiftUI framework is using Automatic Preview without having to run the app all the time on a device or a simulator and less coding. As for the major drawbacks, since SwiftUI supports iOS 13 and above users with an iOS version lower than 12 cannot be supported, and there is less documentation compared to UIKit.
Android (Android Studio)
Android is the other dominant mobile development platform and supported by Google. Although it was released 1 year after the first iPhone in 2007, it shares a large part of the mobile platforms.
The predominant feature of Android is to own 74% of the total mobile OS whereas iOS gets only 25% share. The main reason for the big share, unlike iOS, Android OS could be run with a variety of mobile devices manufactured by different companies.
Android OS is based on Linux Kernel and developers can choose between the Java or Kotlin languages in order to develop their apps. Since most of the developers are familiar with the Java programming language, they find it easier to adapt Android programming than iOS. Designing interfaces are similar to iOS, it could be done programmatically or via XML-based Layout Designer. Screens are organized by activities and fragments and an activity corresponds to a screen and could contain multiple fragments for different tasks inside.
Unlike iOS, Android apps could be developed on any operating system like Windows, OS X or Linux. In addition, iOS developers have to pay each year to distribute their apps whereas Android is free.
Cross-platform apps are handy in terms of development time and cost. Using the same codebase, developers can deploy for both iOS and Android platforms. Cross-platform tools also allow deployment of the mobile projects to the Web, or vice-versa. In addition, most of the cross-platform tools offer a fast-reload feature which eliminates the necessity of building and running the code on a device or a simulator at all times. On the other hand, cross-platform might limit the access of interface elements as well as low-level API. This is the reason why cross-platform apps are of lower performance and speed compared to the native apps.
Launched in 2017, Flutter is Google’s UI toolkit based on Dart language for building natively compiled apps for mobile, web, and desktop from a single codebase open-source tool. Using Google’s open-source V8 engine, quickly ship features with a focus on native end-user experiences. The layered architecture allows for full customization, which results in incredibly fast rendering and expressive and flexible designs.
Flutter offers widgets to incorporate all critical platform differences such as scrolling, navigation, icons, and fonts, and Flutter code is compiled to native ARM machine code using Dart’s native compilers. Because of this feature, Flutter is considered to be a cross-platform tool that is the most similar to a native one. It also has well-detailed and updated documentation where developers can refer to at all times. The only drawback Flutter seems to have is whereas most of the cross-platform tools support Apple TV and Android TV, Flutter does not.
Ionic ships with many built-in components, which in most cases gives a UX/UI closer to native components and makes adding native functionalities to mobile apps easy. Plugins provided by Ionic can be used to integrate with the platform’s specific features, like Bluetooth or camera. Ionic optimizes animation effects and tunes up the GPU work to achieve the best processing time. Nevertheless, the apps created with Ionic are web apps wrapped in a thin native container and this is why the interface never feels completely satisfactory. Additionally, Ionic documentation is not well-detailed and updated, so that developers find it hard to refer to it most of the time.
Mobile technologies are improving day by day and it can be challenging to catch all the latest changes sometimes. As the technologies that people expect from smartphones begin to standardize, the tools, frameworks that companies put on the market begin to resemble each other. Some are getting popular, some are going out of fashion.
As we mentioned the most popular app development platforms, we can safely say that none of them is the best option. When deciding which platform is the best solution for developing an app, developers should take their knowledge, time, and cost into account. After all, no matter which platform is used, the main goal is to put an interface fitting to a smartphone screen.