How senior iOS devs test & refactor legacy code with Massive View Controllers | Live Dev Mentoring

How senior iOS devs test & refactor legacy code with Massive View Controllers | Live Dev Mentoring

Want to learn how to refactor Massive View Controllers and catch/fix bugs in legacy iOS codebases? 👇

Read More

How senior iOS devs eliminate nested closures (arrow anti-pattern) in Swift | Live Dev Mentoring

How senior iOS devs eliminate nested closures (arrow anti-pattern) in Swift | Live Dev Mentoring

Have you ever seen nested Swift closures shaped like an arrowhead (aka Pyramid of Doom)? 😱

Read More

iOS App Architecture for Realtime UI updates via WebSockets | Live Dev Mentoring

iOS App Architecture for Realtime UI updates via WebSockets | Live Dev Mentoring

Ever wondered how to architect iOS apps with real-time UI updates via WebSockets?

Read More

Testing code that uses DispatchQueue.main.async | iOS Lead Essentials Community Q&A

Testing code that uses DispatchQueue.main.async | iOS Lead Essentials Community Q&A

In this episode, Caio replies to a question we received from Tulio in the private iOS Lead Essentials Slack community: "How can I test code that dispatches work to the main DispatchQueue asynchronously? If I remove the thread handling code, my test succeeds."

Read More

S02E17: Migrating the View Controller Factory part 2 | Professional iOS Engineering Series

S02E17: Migrating the View Controller Factory part 2 | Professional iOS Engineering Series

In this episode, we continue migrating the iOS View Controller Factory to the new APIs.

Read More

S02E15: Migrating the Quiz ResultsPresenter guided by tests | Professional iOS Engineering Series

S02E15: Migrating the Quiz ResultsPresenter guided by tests | Professional iOS Engineering Series

In this episode, you'll see how to move deprecated dependencies from high-level to lower-level modules as we finish refactoring the `ResultsPresenter`.

Read More

S02E14: Changing struct initializers without breaking clients | Professional iOS Engineering Series

S02E14: Changing struct initializers without breaking clients | Professional iOS Engineering Series

In this episode, you'll see how to change a Swift struct memberwise initializer while maintaining backward compatibility as we refactor the Quiz ResultsPresenter.

Read More

S02E13: Calculating score with zip, reduce, and generics in Swift | Professional iOS Engineering Series

S02E13: Calculating score with zip, reduce, and generics in Swift | Professional iOS Engineering Series

In this episode, you'll see how to replace a procedural scoring implementation that relies on a temporary mutable variable with a more functional approach using Swift's `zip` and `reduce` functions (no mutation!). 

Read More

S02E11: Cleaning up Swift code backed by tests | Professional iOS Engineering Series

S02E11: Cleaning up Swift code backed by tests | Professional iOS Engineering Series

In this episode, you'll see the pay off of refactoring Swift codebases in tiny steps backed by tests as we safely clean up the codebase by removing duplication and unused APIs without breaking clients or existing code.

Read More

S02E09: Test-driven approach to moving code between components | Professional iOS Engineering Series

S02E09: Test-driven approach to moving code between components | Professional iOS Engineering Series

In this episode, you'll see a test-driven approach to moving code between components as we move the scoring logic from the new Quiz APIs to the deprecated Game APIs.

Read More