App Architecture Hero Image

App Architecture

iOS Application Design Patterns in Swift

by Chris Eidhof, Matt Gallagher, and Florian Kugler

This book explains a range of application design patterns and their implementation techniques using a single example app, fully implemented in five design patterns.

Instead of advocating for any particular pattern, we lay out the problems all architectures are trying to address: constructing the app's components, communicating between the view and the model, and handling non-model state. We show high-level solutions to these problems and break them down to the level of implementation for five different design patterns — two commonly used and three more experimental.

The common architectures are Model-View-Controller and Model-View-ViewModel + Coordinator. In addition to explaining these patterns conceptually and on the implementation level, we discuss solutions to commonly encountered problems, like massive view controllers.

On the experimental side we explain Model-View-Controller+ViewState, ModelAdapter-ViewBinder, and The Elm Architecture. By examining these experimental patterns, we extract valuable lessons that can be applied to other patterns and to existing code bases.


The videos accompanying the book give you a better sense of the different application design patterns in practice. In more than seven hours of live-coding and discussion we compare and contrast different design patterns, build new features in all of them, and show how The Elm Architecture framework used in the book is implemented.

Video introduction

Book Contents

  • Why Architecture?

    Understand the common problems all patterns are trying to solve.

  • Common Design Patterns

    Learn what common patterns such as MVC and MVVM are all about.

  • Experimental Architectures

    Learn from experimental architectures like View State-Driven MVC and The Elm Architecture.

  • Networking

    How Networking fits into common design patterns.

  • Implementation Techniques

    Understand how each pattern is implemented at the code level.

  • In-Depth Comparisons

    Understand the commonalities, differences, and trade-offs between architectures.

  • Take-Aways for Any Code Base

    Learn lessons from each architecture that make any code base better.

  • Common Refactorings

    Techniques to factor out shared code and deal with large view controllers.

  • Complete Implementations

    The accompanying voice-notes sample app is fully implemented in five architectures.

Video Episodes

  • Introduction  10min

    Overview of this video series.

  • One App — Eight Architectures  1h17min

    Live-coding a minimal application in eight different application design patterns.

  • Building a Mini-Player — MVC  47min

    Showing how to add a mini-player in plain MVC.

  • Building a Mini-Player — MVVM-C  50min

    Working with view-models, coordinators, and RxSwift.

  • Building a Mini-Player — MVC+VS  57min

    Applying the observer pattern for view state communication.

  • Building a Mini-Player — MAVB  47min

    Working with bindings, model-adapters, and view-binders.

  • Building a Mini-Player — TEA  28min

    Using reducers and a declarative view layer.

  • Building a Mini-Player — MVC Refactoring  46min

    Improving the MVC code by refactoring the player API.

  • The Elm Architecture Framework  1h06min

    Implementing the framework behind TEA.

Formats & Extras

Buy Book

Choose a Format
Choose a Format

You’ll need to confirm team size at checkout.

Choose a Format

You’ll need to confirm team size at checkout.

Choose a Format

You’ll need to confirm team size at checkout.

About the Authors