Blog
April 27, 2026
Feature Flags and Gradual Rollouts in SwiftUI
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.
April 23, 2026
Release Management with GitHub Actions and Stable Branches
Build a clean release pipeline using stable branches, automated merge-back PRs, and GitHub prereleases. No Fastlane, no Ruby - just GitHub Actions and Xcode.
April 20, 2026
Performance Profiling with Instruments
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.
April 16, 2026
Structured Logging and Health Checks in Vapor
Add production observability to the Vapor backend. Structured logging with swift-log, a health endpoint for load balancers, and request timing middleware.
April 13, 2026
Background Sync and Conflict Resolution
Handle the hard part of offline-first. Build a sync engine with dirty tracking, background tasks, and conflict resolution for when both sides change.
April 6, 2026
Offline Storage with SwiftData
Use SwiftData for user-mutable local state like favorites and reservations while keeping the tiered cache for read-only server data.
April 1, 2026
Provider-Agnostic Logging in Swift with os.Logger
Build a logging wrapper around Apple's os.Logger that can forward logs to Datadog, Segment, Kafka, or any analytics backend without changing your call sites.
March 31, 2026
swift-assist: An AI-Powered iOS Testing Skill for Claude Code
A Claude Code skill that uses Grantiva CLI and computer use to walk your app, audit accessibility, generate test flows, and run visual regression testing. Install it and start testing today.
March 30, 2026
Push Notifications with APNSwift
Send push notifications from the Vapor backend using APNSwift. Register devices, store tokens server-side, and trigger notifications when landmarks are updated.
March 23, 2026
User Authentication with Vapor and SwiftUI
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.
March 19, 2026
Integrating Grantiva Feature Flags in a SwiftUI App
A step-by-step guide to adding Grantiva feature flags to a SwiftUI app. From SDK setup to real-time flag updates in under 15 minutes.
March 16, 2026
Shared Swift Packages: Unifying Your Client and Server Models
Extract shared API models into a Swift package that both your iOS app and Vapor backend consume. One source of truth, compile-time guarantees, zero duplication.
March 7, 2026
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.
March 2, 2026
Wrapping Third-Party Dependencies in Swift
How closure-based service wrappers protect your app from vendor lock-in and make third-party SDKs testable.
February 28, 2026
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.
February 27, 2026
Adding Reservations to Your Modular App
Add a second feature domain alongside Landmarks, showing how modules compose without coupling.
February 27, 2026
Building a Design System Module
Extract shared UI components into a DesignSystem module that every feature can import.
February 27, 2026
Multi-Package Architecture
Scale beyond a single package by splitting your app into multiple SPM packages that share a common foundation.
February 27, 2026
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.
February 27, 2026
Wiring It All Together: The Main App
Build the main app target as a thin composition root that connects all your feature modules.
February 26, 2026
Modularizing Swift Apps with SPM
How to split a growing iOS app into API, Domain, and Feature modules using Swift Package Manager.
February 24, 2026
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.
February 21, 2026
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.
February 14, 2026
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.
February 7, 2026
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.
January 31, 2026
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.
January 24, 2026
Dependency Injection in SwiftUI Without the Ceremony
Closure-based services, observable stores, and why you don't need protocols or view models.
January 17, 2026
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.
January 10, 2026
SwiftUI Navigation the Easy Way
A type-safe, scalable approach to SwiftUI navigation using enums and centralized destinations - no third-party libraries required.