The Human Interface Guidelines (“HIG”) offers in-depth information and UI resources for mobile platforms. The HIG is full of information that can help to create more compelling, intuitive, and beautiful experiences and design better apps.
Making adept use of threads can help to boost application performance. When an application is launched, it creates the first thread of execution, known as the “main” thread. The main thread is responsible for dispatching events to the appropriate user interface widgets as well as communicating with components from the system UI toolkit.
If an app is stopped on a device, it can save its state and then restore the state when the app is launched again by the user.
Localisation is the process of customising an app to work in other languages other than the default.
Data protection is a feature that is used to secure an app’s files and prevent unauthorised access to them.
UI automation testing is a technique where testing processes are performed using an automation tool.
Device testing is the process by which a device is tested (hardware or software) for its quality to see how well it meets the requirements for which it has been developed.
Mobile app distribution methods
Code signing of an app assures users that it is from a known source and the app hasn’t been modified since it was last signed.
A developer portal (or partner portal) is where developers can sign up, receive support and manage the apps submitted to the store.
Big O notation is a mathematical notation that describes the limiting behavior of a function when the argument tends towards a particular value or infinity.
Sorting is the most common and majorly used algorithms in mobile app development. The basic idea is to arrange the data or items in a definite pattern.
Search algorithm is any algorithm which solves the search problem, namely, to retrieve information stored within some data structure.
The basic idea of encryption is to convert data into a form in which the original meaning is masked, and only those who are properly authorized can decipher it. The AES algorithm successively applies a series of mathematical transformations to each 128-bit block of data. RSA is an asymmetric algorithm that uses a publicly known key for encryption, but requires a different key, known only to the intended recipient, for decryption.
Creational (abstract factory / factory / Builder / Singleton / Lazy / etc.)
Creational design patterns are concerned with the way of creating objects. These design patterns are used when a decision must be made at the time of instantiation of a class (i.e. creating an object of a class).
Structural (adapter / wrapper / Bridge / Decorator / Proxy / Fascade / etc.)
Structural design patterns focus on, how the classes inherit from each other and how they are composed of other classes. Structural patterns use inheritance to compose interface or implementations.
Behavioral (command / iterator / observer / template / etc.)
Behavioral design patterns have focused on the assignment of responsibilities between objects, or, encapsulating behavior in an object and delegating requests to it.
Architectural (DI / MVC / MVP / MVVM / Clean architecture)
Architecture design patterns have focused on the architecture of the application and how responsibilities between different modules/components can be defined based on requirements.
Scrum is a framework utilizing an agile mindset for developing, delivering, and sustaining complex products, with an initial emphasis on software development, although it has been used in other fields including research, sales, marketing and advanced technologies.
Kanban is a workflow management method for defining, managing and improving services that deliver knowledge work. It aims to help visualize work, maximize efficiency, and improve continuously.
The iterative model is a particular implementation of a software development life cycle (SDLC) that focuses on an initial, simplified implementation, which then progressively gains more complexity and a broader feature set until the final system is complete.
Continuous integration (CI) and continuous delivery (CD) is a set of operating principles, and collection of practices that enable mobile development teams to deliver code changes more frequently, reliably and automatically.
Test-driven development is a programming and testing practice that encourages developers to write better and more precise tests and code. For this, they write unit tests before the code of the respective functionality to ensure bug-free software and applications.
Code Review is a process that involves other software developers to review a particular engineer’s code in an effort to check its compliance with standards, identify errors, reveal discrepancies in the style of coding, and test the written code suitability for an objective set.
SOLID is an acronym for five design principles in Object-Oriented software development intended to make software designs more understandable, flexible and maintainable.
Inversion of Control (IoC) is a design principle and is used to invert different kinds of controls in object-oriented design to achieve loose coupling.
A type that represents either a wrapped value or nil, the absence of a value.
Error handling is the process of responding to and recovering from error conditions in your program.
A string is a series of charactersю. Swift strings are represented by the String type. The contents of a String can be accessed in various ways, including as a collection of Character values.
Open-source package focused on extending the set of available Swift data structures.
Swift provides a variety of control flow statements. These include while loops to perform a task multiple times; if, guard, and switch statements to execute different branches of code based on certain conditions; and statements such as break and continue to transfer the flow of execution to another point in your code.
Functions are self-contained chunks of code that perform a specific task. Methods are functions that are associated with a particular type.
A closure expression creates a closure, also known as a lambda or an anonymous function in other programming languages. Like a function declaration, a closure contains statements, and it captures constants and variables from its enclosing scope.
An enumeration defines a common type for a group of related values and enables you to work with those values in a type-safe way within your code.
In Swift, structs are value types whereas classes are reference types.
Properties associate values with a particular class, structure, or enumeration.
Initializers are like special methods that can be called to create a new instance of a particular type.
The map function applies a function to every item in a collection.
The filter function simply returns values that passed an if-statement, and only if that condition resulted in true.
The reduce() function turns a collection into one value.
Memory management refers to the process of managing heap memory. This means managing the life cycles of objects on the heap and making sure that these objects are freed when they are no longer needed so the memory can be reused.
Type casting is a way to check the type of an instance, or to treat that instance as a different superclass or subclass from somewhere else in its own class hierarchy.
Extensions add new functionality to an existing class, structure, enumeration, or protocol type.
A protocol defines a blueprint of methods, properties, and other requirements that suit a particular task or piece of functionality.
Generics are one of the most powerful features of Swift, and much of the Swift standard library is built with generic code. Generic code enables a possibility to write flexible, reusable functions and types that can work with any type, subject to requirements that are defined.
Possibility to use Swift code in Objective-C and Objective-C code in Swift
Subscripts are shortcuts for accessing the member elements of a collection, list, or sequence.
Access control restricts access to parts of the own code from code in other source files and modules.
Categories provide the ability to add functionality to an object without subclassing or changing the actual object.
Objective-C properties offer a way to define the information that a class is intended to encapsulate.
Blocks are a language-level feature, which allow to create distinct segments of code that can be passed around to methods or functions as if they were values. Blocks are Objective-C objects, which means they can be added to collections like NSArray or NSDictionary.
Key-value observing provides a mechanism that allows objects to be notified of changes to specific properties of other objects.
Most collections in Objective-C code are instances of one of the Cocoa and Cocoa Touch collection classes, like NSArray, NSSet and NSDictionary.
Object comparison refers to the ability of an object to determine whether it is essentially the same as another object. Copying an object creates a new object with the same class and properties as the original object. To support encoding and decoding of instances, a class must adopt the NSCoding protocol and implement its methods. This protocol declares two methods that are sent to the objects being encoded or decoded.
Objective-C allows you to define protocols, which declare the methods expected to be used for a particular situation.
The exception handling mechanisms available to Objective-C programs are effective ways of dealing with exceptional conditions. They decouple the detection and handling of these conditions and automate the propagation of the exception from the point of detection to the point of handling.
The Objective-C runtime is a runtime library that provides support for the dynamic properties of the Objective-C language, and as such is linked to by all Objective-C apps.
Key-value coding is a mechanism enabled by the NSKeyValueCoding informal protocol that objects adopt to provide indirect access to their properties.
Apple provides three ways to distribute your application based on which developer program you are a member of: App Store or iTunes Store, In House, Ad Hoc
Apple has defined 5 execution states of an iOS application (not running, inactive, active, background, suspended). Transition between these states are done by the OS by considering the user’s action.
Apps that need to run in the background to support specific types of tasks can declare their support for one or more background execution modes. Multitasking is a feature available on iOS that allows multiple applications to run and perform tasks at the same time.
Core Animation is a graphics rendering and animation infrastructure available on both iOS and OS X that is used to animate the views and other visual elements of the app.
Push notifications are used to push small amounts of data to devices that use the app, even when it isn’t running.
MapKit is a powerful API available on iOS devices that makes it easy to display maps, mark locations, enhance with custom data and even draw routes or other shapes on top.
Apple Wallet (Wallet for short, formerly Apple Passbook) is a mobile app included with the iOS operating system that allows users to store Wallet-passes.
Core Location provides services that determine a device’s geographic location, altitude, and orientation, or its position relative to a nearby iBeacon device.
Bluetooth wireless technology can be integrated in the apps and hardware accessories. With Core Bluetooth framework, it’s easy for an apps to interact with the growing number of Bluetooth Low Energy (BLE) devices.
AVFoundation is the full featured framework for working with time-based audiovisual media on iOS, macOS, watchOS and tvOS.
iOS makes it easy to integrate social media interactions into the app, including sharing content and displaying an activity feed.
The Core Graphics framework is based on the Quartz advanced drawing engine. It provides low-level, lightweight 2D rendering with unmatched output fidelity.
Core Motion reports motion- and environment-related data from the onboard hardware of iOS devices, including from the accelerometers and gyroscopes, and from the pedometer, magnetometer, and barometer.
The SpriteKit framework makes it easy to create high-performance, battery-efficient 2D games.
GameKit enables players to interact with friends, compare leaderboard ranks, earn achievements, and participate in multiplayer games.
OpenGL ES creates 3D and 2D graphics effects with this compact, efficient subset of OpenGL.
Auto Layout dynamically calculates the size and position of all the views in the view hierarchy, based on constraints placed on those views.
Storyboards allow to prototype and design multiple view controller views within one file, and also create transitions between view controllers.
Groups of screen sizes that are applied to the width and height of the device screen.
A collection view is a way to present an ordered set of data items using a flexible and changeable layout.
A table view displays a single column of vertically scrolling content, divided into rows and sections.
Stack views leverage the power of Auto Layout, creating user interfaces that can dynamically adapt to the device’s orientation, screen size, and any changes in the available space.
A text view displays multiline, styled text content.
A web view loads and displays rich web content, such as embedded HTML and websites, directly within the app.
Grand Central Dispatch(GCD) is used to handle multithreading in iOS
A queue that regulates the execution of operations.
A thread of execution.
The mutex object allows the multiple program threads to use the same resource but one at a time not simultaneously.
Semaphore is a process synchronization tool.
ReactiveCocoa extends Cocoa frameworks with functional reactive programming inspired primitives.
RxSwift is the reactive programming library for iOS. It makes it easy to program dynamic apps that respond to data changes and user events.
Analyze will build a target using the static analyzer and will notify of certain types of bugs in code.
Profile will build and run a target on the selected device or simulator with selected Instruments tool
Apple Watch is a line of smartwatches produced by Apple Inc.
CocoaPods is a dependency manager for Swift and Objective-C Cocoa projects. Carthage is a simple dependency manager for macOS and iOS, created by a group of developers from GitHub.
Unit tests are automated tests that run and validate a piece of code (known as the “unit”) to make sure it behaves as intended and meets its design.
UI testing lets you test interactions with the User interface.
A third-party app is a software application made by someone other than the manufacturer of a mobile device or its operating system.
An object that coordinates a group of related, network data-transfer tasks.
Reachability checks if an interface will support a connection, meaning the server is potentially reachable.
Berkeley sockets is an application programming interface (API) for Internet sockets and Unix domain sockets, used for inter-process communication (IPC).
AFNetworking is a lightweight web request API class library based on NSURLConnection, NSOperation and other methods.
Alamofire is a Swift-based HTTP networking library for iOS and macOS. It provides an elegant interface on top of Apple’s Foundation networking stack that simplifies a number of common networking tasks.
Moya is a networking library focused on encapsulating network requests in a type-safe way, typically by using enumerations (e.g., enum) to provide compile-time guarantees and confidence when working with your network layer, along with added discoverability.
The Cryptography API enables app to provide information and services in a secure way.
The basic idea of encryption is to convert data into a form in which the original meaning is masked, and only those who are properly authorized can decipher it. The AES algorithm successively applies a series of mathematical transformations to each 128-bit block of data. RSA is an asymmetric algorithm that uses a publicly known key for encryption, but requires a different key, known only to the intended recipient, for decryption.
Persist or cache data on a single device, or sync data to multiple devices with CloudKit.
Realm’s mobile database is an open source, developer-friendly alternative to CoreData and SQLite.
SQLite is an open-source, zero-configuration, self-contained, stand-alone, transaction relational database engine designed to be embedded into an application.