To build an iOS app, you would need to know the Swift Programming language that is owned by Apple to develop iOS mobile applications. Swift is the universal language that is used for all iOS mobile app developments. At first, you won’t need to go too deeply into it, but you will need to have a basic understanding of the language and its functionalities, such as Basic Syntax, Classes, Inheritance and Initialization, Control Flow (If and Switch Statements), Error Handling and Optionals.
You don’t necessarily need to know Objective-C, since most apps nowadays don't use it, but a basic level of knowledge would be useful. SwiftUI, which is a more declarative way of writing UI, looks set to stick around, so it’d be worth diving into that, too.
You will need to use Apple’s integrated development environment (IDE), Xcode, to develop iOS apps. It is highly integrated with Cocoa and Cocoa Touch frameworks and is a primary environment to build apps for various Apple devices, such as Apple TV, iPhone, iPad, Mac and Apple Watch.
You’ll need knowledge of networking as well in terms of how apps send data to the server and vice versa. JSON is a data format often used to send data to and from a web service. You’d need to know how to handle JSON data in iOS, i.e. by:
- JSON Serialization: This involves converting JSON data to and from Swift dictionaries. The JSON object is treated as a dictionary and you will need to map the keys manually and translate it all to fit.
- Codable: The data is converted into a struct where you can then extract individual values. Codable is a way more modern approach. It even lets you convert between Swift types and other formats, such as XML or a custom type.
The very basic architecture used on an iOS app is the MVC (Model-View-Controller) pattern; you would need to know this to build a basic app with minimum complexity. However, if your app needs to be more complex, it could easily lead to massive ViewControllers. The main aim of your architecture should be to improve maintainability, where testing can be done easily and the app can scale along with team size. Without going into detail about the various architectures and how they work, knowledge of the likes of MVVM, MVP, VIPER will definitely be worth it.
Another important part of Apple’s framework is the Delegate pattern. Its core purpose is to allow an object to communicate back to its owner in a decoupled way. By not requiring an object to know the concrete type of its owner, you can write code that is much easier to reuse and maintain.
Finally, writing unit tests is just as important as writing code. Unit tests are automated tests that run and validate a piece of code to make sure it behaves as intended. They have their own target in Xcode and are written using the XCTest framework.
To build an Android app, you would need good knowledge of object-oriented programming, as well as a grasp of both Java and Kotlin. Until about four years ago, Java was the predominant language before Kotlin was made a first-class language for the Android platform. It is common to have to interop between the two in non-greenfield applications.
You’d also need knowledge of memory management. Mobile devices can be limited in memory, and mismanagement can lead to memory leaks, which can result in application closures or crashes.
It will also help to know multithreading (understanding the threads available to an Android application and their usage). For example, blocking or doing too much on the main or UI thread on Android can lead to crashes or poor performance of the app.
You’ll need to know the components that make up an Android application, their APIs, lifecycles and impacts on the user experience. You’ll need knowledge of the commonly used libraries to build UI, manage state and make network calls, and, as with iOS, a handle of software design patterns and presentation delivery patterns like MVVM, MVI, MVP and MVC.