Every app has an architecture, whether you chose one or not. Architecture decides where each piece of code lives, how data flows from the network to the screen, and how painful your next feature will be.

There’s no single “best” architecture. Each one trades simplicity for structure in a different way. A weekend project and a banking app with fifty developers need very different things. This guide covers the architectures you’ll meet in real iOS codebases, so you can recognize them, understand their trade-offs, and choose wisely.

Before diving in, it helps to know a few design patterns, especially delegation, observer, and coordinator.

Each article develops a concrete Swift example, its ownership and failure contracts, testing strategy, and limitations. Read the Swift blocks in order within an article; later blocks extend earlier definitions. The framework-independent examples explain architectural contracts, while the TCA article runs against a pinned library release.

Most examples use Swift 5.7. Articles using native Observation require Swift 5.9 and the iOS 17/macOS 14 generation; their dates follow those releases. The TCA article targets 1.7.0, whose Observation support shipped in January 2024. Version and deployment requirements are called out where they matter.

Article available Coming soon

1. Model-View-Controller (MVC)

2. MVC Variants

3. Model-View-Presenter (MVP)

4. Model-View-ViewModel (MVVM)

5. Clean Architecture and VIPER

6. RIBs

7. Unidirectional Data Flow

8. Choosing an Architecture

Up next

Testing

This guide grows with the blog: new articles are linked here as soon as they're published. Missing something? Let me know.

← Back to all roadmaps