- Java preferably or Ruby, Python or, even better, C/C++/Go/Rust programming experience.
- If they already know Kotlin/Java it is going to be much easier.
Day 1
- Introduction to iOS development.
- Getting familiar with Xcode
- Anatomy of an app
- Intro to Objective-C
+ Understanding UIKit views
+ Single window app
+ Navigation with Storyboards
- Intro to Swift:
+ Understanding UISwift views
+ Single window app
- Understanding the components of an app (Code, modules, configuration, assets, tests, packages and libraries)
- Designing and prototyping UI with SwiftUI
Day 2 (From here on, everything is Swift/SwiftUI, and we build a real app with multiple windows)
- Architecture
+ Architecture is for you too: Problems that we can find when we write mobile applications and how a good architecture can help us
+ Using Design Patterns: A basic intro to design patterns and their value in writing good code
+ SOLID Principles: The five SOLID principles, their motivations, and how to apply them
+ Architectural Design Patterns (MVX): MVC, MVP, and MVVM
+ Rules to apply them properlyHow to implement them
- Clean Architecture
+ Description and Pieces: The pieces that compose Clean Architecture and understand their purpose
+ The Dependency Rule: How to deal with dependencies properly in architecture
+ Hints for Implementation: How to start creating an application that uses this architecture
- First User Story: Show List
+ Extract Minimum Viable Product: Plan the application we will write and how to approach the implementation of its features
+ Implement the Interactor (Business Logic): Create the type that will contain the business logic of the first user story
+ Implement the View Model: Creation of the model for the view that presents the data, provides the semantics to view events and uses the business logic
+ Implement the View: Write code for the view that the user will interact with
+ Implement the Entity Gateway: The needs of persistence and how to implement them
+ Connect the pieces and make it all work: Write the glue code so all the pieces of the first user story work as expected
Day 3
- Connect the Pieces
+ Connect the pieces in a reusable way: The initial responsibilities of the connector
+ Memory management: Implement the code so it follows the rules for good memory management and learn where to use weak so ARC can do its job
- Modularization
+ Define the modules of the app and its responsibilities
+ Organizing the code: How to separate different pieces in packages
- Navigation
+ Requirements in an advanced architecture
+ Navigation with SwiftUI and connectors
+ Modal vs Push: The implications of modal and push navigation and how to use them
+ Dependency Injection
+ Inversion of control: How to use the mechanisms of the OS to inject the dependencies into the different view controllers
- Second User Story: Add
+ Presentation vs Domain Logic: The boundaries between the two types of logic and how they affect the implementation
+ Immutables: The implications of using immutables to model our data and how to do it, and implementation using reference types
+ Observation: Observation vs flow synchronization and when and how to implement them
Day 4
- Third User Story: Detail
+ Identity: The need and importance of identity and how to implement it
- Improve Reusability
+ Command pattern: How can it be helpful and how to use it
+ 2nd use case in the same view: Painlessly add a second case to the same view
+ Use case factories: The power of using factories and how to implement them to create use cases
+ Other use cases: Just logic: Learn about use cases that are not related to persistence and how to model them
- Asynchronous Work
+ Strategies for Asynchronicity: Overcoming the problems associated with asynchronous work
+ Using combine for the asynchrony
+ Asynchronous entity gateway: Implement a synchronous repository
+ Other tasks: How other asynchronous tasks could be implemented