Blog

Looking for structured, multi-part content? Browse series →

Visual Regression Testing with Grantiva and Stateful Mocks

Use Grantiva's YAML-based visual regression testing with the MockReservationStore pattern to test real user flows without a running server.

Wrapping Third-Party Dependencies in Swift

How closure-based service wrappers protect your app from vendor lock-in and make third-party SDKs testable.

Testing the Landmarks App with Dependency Injection

The closure-based DI pattern makes the iOS app trivially testable. Add a Reservation feature and write tests that prove it works without hitting any server.

Adding Reservations to Your Modular App

Add a second feature domain alongside Landmarks, showing how modules compose without coupling.

Building a Design System Module

Extract shared UI components into a DesignSystem module that every feature can import.

Multi-Package Architecture

Scale beyond a single package by splitting your app into multiple SPM packages that share a common foundation.

Preview Apps for Lightning-Fast Iteration

Create mini-app targets per feature so you can build and preview in isolation without compiling the full app.

Wiring It All Together: The Main App

Build the main app target as a thin composition root that connects all your feature modules.

Modularizing Swift Apps with SPM

How to split a growing iOS app into API, Domain, and Feature modules using Swift Package Manager.

Testing Against a Real Server in Vapor Tests

Write integration tests that boot a real Vapor server, make HTTP requests, and verify endpoints behave correctly end-to-end.

Let's Deploy It to AWS and Set Up a CI/CD Pipeline

Dockerize the Vapor backend, deploy to AWS with ECS Fargate, switch to Postgres, and automate everything with GitHub Actions.

Using Everything We've Learned to Build a Fully Featured App

Wire together Vapor, networking, API models, domain models, caching, and SwiftUI into a complete working Landmarks app.

Setting Up a Backend Server for Our Landmarks App

Build a Vapor backend with Fluent models, response types, and RESTful routes - applying the same separation patterns from the iOS side.

Tiered Caching in Swift

Build a two-layer cache with memory and disk storage, LRU eviction, and flexible fetch policies that integrate cleanly with SwiftUI.

Dependency Injection in SwiftUI Without the Ceremony

Closure-based services, observable stores, and why you don't need protocols or view models.

Domain Models vs API Models in Swift

Why separating your network layer from your business logic makes everything easier - and how to do it cleanly.

SwiftUI Navigation the Easy Way

A type-safe, scalable approach to SwiftUI navigation using enums and centralized destinations - no third-party libraries required.