Table of Contents:
-
Intro
- Who am I?
- Structure of this book
-
Step One: Figure Out what the Big Picture Is
- What is an iOS application and where does your code fit into it?
- Patterns and Layers
- Zooming Out
- Zooming In
-
Step Two: The Interview Game
- Before The Interview
- At The Interview
- Importance of Soft Skills
- Keep Track of Progress
-
Step Three: Learn the fundamentals
- What is let and var in Swift?
- What is Optional in Swift and nil in Swift and Objective-C?
- What is the difference between struct and class in Swift? When would you use one or the other?
- How is memory management handled in iOS?
- What are properties and instance variables in Objective-C and Swift?
- What is a protocol (both Obj-C and Swift)? When and how is it used?
- What is a category/extension? When is it used?
- What are closures/blocks and how are they used?
- What is MVC?
- What are Singletons? What are they used for?
- What is Delegate pattern in iOS?
- What is KVO (Key-Value Observation)?
- What does iOS application lifecycle consist of?
- What is View Controller? What is its lifecycle?
-
Step Four: Get Productive with Networking
- What is HTTP?
- What is REST?
- How do you typically implement networking on iOS?
- What are the concerns and limitations of networking on iOS?
- What should go into the networking/service layer?
- What is NSURLSession? How is it used?
- What is AFNetworking/Alamofire? How do you use it?
- How do you handle multi-threading with networking on iOS?
- How do you serialize and map JSON data coming from the backend?
- How do you download images on iOS?
- How would you cache images?
- How do you download files on iOS?
- Have you used sockets and/or pubsub systems?
- What is RestKit? What is it used for? What are the advantages and disadvantages?
- What could you use instead of RestKit?
- How do you test network requests?
-
Step Five: Learn How to Store Data
- What is the storage layer for in iOS applications?
- What can you use to store data on iOS?
- What is NSCoding?
- What is NSUserDefaults?
- What is Keychain and when do you need it?
- How do you save data to a disk on iOS?
- What database options are there for iOS applications?
- How is data mapping important when you store data?
- How would you approach major database/storage migration in your application?
-
Step Six: Go crazy responsive with UI layouts
- What are the challenges in working with UI on iOS?
- What do you use to lay out your views correctly on iOS?
- What are CGRect Frames? When and where would you use them?
- What is AutoLayout? When and where would you use it?
- What are compression resistance and content hugging priorities for?
- How does AutoLayout work with multi-threading?
- What are the advantages and disadvantages of creating AutoLayouts in code versus using storyboards?
- How do you work with storyboards in a large team?
- How do you mix AutoLayout with Frames?
- What options do you have with animation on iOS?
- How do you do animation with Frames and AutoLayout?
- How do you work with UITableView?
- How do you optimize table views performance for smooth, fast scrolling?
- How do you work with UICollectionView?
- How do you work with UIScrollView?
- What is UIStackView? When would you use it and why?
- What alternative ways of working with UI do you know?
- How do you make a pixel-perfect UI according to a designer’s specs?
- How do you unit and integration test UI?
-
Step Seven: Beyond MVC. Design Pattens, Architecture, FRP, and Dependencies Management.
- What design patterns are commonly used in iOS apps?
- What is MVC?
- What is MVVM?
- What are the common layers of responsibility that an iOS application has?
- What are SOLID principles? Can you give an example of each in iOS/Swift?
- How do you manage dependencies in iOS applications?
- What is Functional Programming and Functional Reactive Programming?
- What are the design patterns besides common Cocoa patterns that you know of?
- Bonus Chapter: Storage Evolution (AKA You Don’t Always Need Core Data!).
- Outro