Making It Real - Production-Ready Swift

Series 1 built the Landmarks app from a tutorial into a deployed, tested full-stack Swift application. This series picks up exactly where it left off: the app works, the server runs, the tests pass. Now it's time to make it something you'd actually ship to users.

Every post includes a companion GitHub repo with the complete working code.

The Series

1. Shared Swift Packages: Unifying Your Client and Server Models

March 16, 2026

Set up a development monorepo and extract shared API models into a Swift package that both the iOS app and Vapor backend consume. Replace duplicated types with a single source of truth.

View Code

2. User Authentication with Vapor and SwiftUI

March 23, 2026

Add JWT-based authentication to the Vapor backend. Build login and signup screens in SwiftUI. Store tokens securely in Keychain using the closure-based service pattern.

View Code

3. Push Notifications with APNSwift

March 30, 2026

Send push notifications from the Vapor backend using APNSwift. Register devices, store tokens server-side, and deep link users straight to the right screen using the Navigator from Series 1.

View Code

4. Offline Storage with SwiftData

April 6, 2026

Use SwiftData for user-mutable local state like favorites and reservations while keeping the tiered cache for read-only server data. The best of both persistence strategies.

View Code

5. Background Sync and Conflict Resolution

April 13, 2026

Handle the hard part of offline-first: what happens when the user makes changes offline and the server has different data? Build a sync engine with conflict detection.

View Code

6. Structured Logging and Health Checks in Vapor

April 16, 2026

Add production observability to the Vapor backend. Structured logging with swift-log, a health endpoint for load balancers, and request timing middleware.

View Code

7. Performance Profiling with Instruments

April 20, 2026

Profile the Landmarks app with Instruments. Find real bottlenecks in image loading, list scrolling, and network calls. Fix them with lazy loading and async prefetching.

View Code

8. Release Management with GitHub Actions and Stable Branches

April 23, 2026

Build a clean release pipeline using stable branches, automated merge-back PRs, and GitHub prereleases. No Fastlane, no Ruby - just GitHub Actions and Xcode.

View Code

9. Feature Flags and Gradual Rollouts

April 27, 2026

Build a provider-agnostic feature flag layer with property wrappers that auto-update your UI. Works with any backend - LaunchDarkly, Firebase, Grantiva, or your own.