iOS Mobile Development Standards [IOS]
Introduction
The iOS specific standards build on the Language Fundamentals to introduce advanced Swift concepts and syntax and the iOS framework. This includes iOS design patterns based on Apple's guides and all necessary knowledge and skills to build complex and efficient iOS applications.
Swift Language
IOS.1 Understand all core Swift language concepts and syntax.
IOS.1.a Optionals: Understand the purpose of optionals in validating if there is a value present or not. Learn how to declare, unwrap, bind and chain optionals. To understand how optionals contribute to the writing of idiomatic Swift.
- nil
- Force Unwrapping
- Optional Binding
- Implicitly Unwrapped Optionals
IOS.1.b Enumerations: Understand the usefulness of using enumerations to group common types for a group of related values. Create enumerations with different types of raw and associated values.
IOS.1.c Structs and Classes: Understand the difference between structs and classes. Create and initialize structs and classes. Understand when to use a struct or a class. Understand that structs are value types and classes are reference types.
IOS.1.d Initialization: Understand the process the initialization does in preparing an instance of a class, structure or enumeration for use.
- Customizing Initialization
- Default Initializers
- Class Inheritance and Initialization
- Required Initializers
IOS.1.e Properties: Understand how properties associate values with a particular class, structure or enumeration. Create and use stored properties. Create and use computed properties.
- Stored Properties
- Lazy Stored Property
- Computed Properties: setter and getter
- Read-Only Computed Properties
- Property Observers: willSet, didSet
- Type Properties
IOS.1.f Generics: Know the importance of using Generics in making their objects more flexible for any type. Understand the problems Generics sort of to solve.
- Generic Functions
- Generic Types
- Extending a Generic Type
- Associated Types
IOS.1.g Know why some closures need to be marked escaping when passed as arguments. Most used examples of escaping closures happen when doing asynchronous network calls.
The iOS Framework
IOS.2 Understand the evolution of the iOS framework and understand key patterns and processes.
IOS.2.a Know and be able to discuss brief history about Apple, Next, and the iPhone and the iOS SDK and the Objective-C to Swift evolution.
IOS.2.b Understand the Protocol and the Delegation pattern in iOS. Use built in iOS Controls to explore Delegation.
IOS.2.c Create custom delegation on objects to trigger events. Understand the necessary steps involved in creating a custom protocol. Be able to handle memory management to avoid retain cycles in custom delegates.
IOS.2.d Concurrency: Know how concurrency is used on iOS to deliver an optimal experience for the user.
IOS.2.e Key-Value Observing: Use KVO to observe for changes on specified properties of other objects. Be able to perform the following:
- Registering for observation
- Notifying observers of changes
- Change notification
IOS.2.f iOS Error handling: Know how to process, respond and recover from error conditions in a program by propagating errors using throwing functions, handling errors using do-catch, converting errors to optional values.
IOS.2.g Autolayout: Understand the benefits of using Autolayout to layout the app's user interface. Use layout views to develop for different size screens and support all iOS devices including iPad.
IOS.2.h Create user interface's without Storyboards.
IOS.2.i Understand the differences between frame vs bounds and when to utilize each.
IOS.2.j Know and use NSLayoutConstraint and NSLayoutAnchor.
IOS.2.k Able to discover and utilize third party libraries e.g SnapKit.
IOS.2.l Memory Management / Retain Cycles: Understand how to break strong references in your code. Understand there are cases that ARC does not handle all the memory management of your app's needs.
IOS.2.m NSNotificationCenter: Know how to enable the broadcast of information to registered observers including adding and removing notification observers and posting notifications.
IOS.2.n Local Notifications: Use local notifications to get the user's attention by displaying an alert, playing a sound, or badging the app's icon.
IOS.2.o Core Location. Understand how to use Core Location to obtain the geographic location and orientation of a device. Services provided by Core Location:
- Geographic location
- Altitude
- Orientation
- Position relative to a nearby iBeacon
IOS.2.p MapKit: Use the MapKit UI to display call out points of interest, and determine placemark information for map coordinates.
- Configure the Map's appearance.
- Manipulate the visible portion of the map.
- Add overlays to the Map.
- Display the user's location.
- Specify locations on the map using either geographic coordinates ormap-specific points.
- Place custom content on the map surface using Annotations.
- Use MKMapViewDelegate to receive map-related updates.
IOS.2.q SafariServices: Use Safari Services framework to integrate Safari behaviors into your iOS app. Understand how to use SFSafariViewController and ASWebAuthenticationSession.
UIKit
IOS.3 Understand that UIKit provides the graphical, event-driven user interface for iOS apps. Have a working knowledge of app development with UIKit and app structure.
IOS.3.a User Interface: Utilize Views, Controls, View Controllers, View Layout, Animations, Haptics, Windows, Screens.
IOS.3.b User Interactions: Utilize touches, Press, Gestures, Drag and Drop, Focus Interactions, Peek and Pop, Keyboards and Menus, Accessibility.
IOS.3.c Utilize Graphics, Drawing, Printing, and text.
IOS.3.d UITableView: Use UITableViews to display the data for an app arranged in rows. Including:
- Provide the Table View data
- Customize the Table View behavior
- Configure the Table View
- Creating Table View Cells
- Accessing Header and Footer Views
- Accessing Cells and Sections
- Modifying Rows and Sections
- Prefetching data
IOS.3.e UITableView and UISearchBar: Integrate a UITableView with a UISearchBar to filter data in an app.
IOS.3.f UI Controls and UIViewController Life Cycle: Know the UIViewController Life cycle:
- viewWillAppear
- viewDidLoad
- viewDidAppear
- viewWillDisappear
- viewDidDisappear
IOS.3.g Familiar with the usage of the following UI Controls:
- UIButton
- UIDataPicker
- UIPageControl
- UISegmentedControl
- UISlider
- UIStepper
- UISwitch
IOS.3.h Delegation using UITextField: Understand how to implement conformance to a Delegate.
IOS.3.i UIImagePickerController: Use the UIImagePickerController in order to take pictures, recording movies, and choosing items from the user's media library.
IOS.3.j UIScrollView: know how to use this superclass for several UIKit classes including UITableView, UITextView, UICollectionView. Be able to do the following:
- Managing the content size and offset
- Managing the content inset behavior
- Managing the scroll indicator and refresh control
- Scrolling to a specific location
- Managing the keyboard
- Zooming and Panning
- Using UIScrollViewDelegate to respond to messages from the UIScrollView class
IOS.3.k Subclassing UIViews and creating NIBs: Understand how to customizing UIView to deliver unique user interfaces.
- Subclass UIView
- Create and use NIBs
- Override drawRect for custom drawing of Views
IOS.3.l Touches, Presses and Gestures: Use gesture recognizers to track touches. Be familiar with the following:
- Phases of a touch: touch begin, touch molied, touch ended, touch cancelled
- UIPress, UIPressesEvent
- UIKit Gestures: UILongPressGestureRecognizer, UIPanGestureRecognizer, UIPinchGestureRecognizer
IOS.3.m UICollectionView: Understand how to use and customize UICollectionView and UICollectionViewFlowLayout.
IOS.3.n Navigation: Know the various styles of navigation within an app and the classes used for Navigation
- Hierarchical Navigation e.g Settings and Mail
- Flat Navigation e.g the Music and App Store apps
- Content-Driven or Experience-Driven Navigation e.g. games, books and other immersive apps
- UINavigationController
- UITabBarController
- UIPageViewController
IOS.3.o Animations: Use animations to deliver status, feedback, direct manipulation and help users visulaize the results of their actions. Know content animations:
- Property-based animations: create animations by changing the properties of a view
- View Controller Transitions: define custom transitions from one view controller to another
Persistence
IOS.4 Know all of the methods available for persisting data and choose the appropriate method for the task.
IOS.4.a UserDefaults: Understand the UserDefaults is way to save / persist simple objects and not complex data sets.
IOS.4.b NSCache, Images: Implement NSCache to deliver your own customize caching persistence for your app's needs. Create a custom wrapper to cache images from an asynchronous network request. Know the difference between Dictionary and NSCache.
IOS.4.c Core Data: Manage object graphs and object lifecycle, including persistence using the built-in Core Data stack you get when creating a new app. Be able to do and use the following:
- Fetch Requests using NSFetchedResultsController
- NSPersistentContainer
- NSManagedObjectContext
- NSPersistenntStoreCoordinator
- NSManagedObjectModel
IOS.4.d Backend as a Service: Have knowledge of Backend as a Service using Firebase. Be able to create and setup the backend. Perform CRUD functions on the backend service and manipulate the app's user interface accordingly.
IOS.4.e Know there are other BaaS providers such as:
- Realm
- AWS
- Creating a custom API using MongoDB, Express and Node
IOS.4.f File Manager: Understand how to use FileManager and its role as the gateway to accessing the contents fo the file system.
- Be able to access user directories
- Use location system directories, e.g the documents directory to save app data
- Be able to discovery directory contents
- Create, delete items, move and copy items
Auth
IOS.5 Know Oauth 2.0 specs and why it's important in the authentication process.
Dependencies
IOS.6 Use existing third party libraries, including porting them into apps using dependency managers such as the Cocoapods, Catharge, Swift Package Manager.