That SwiftUI Guy
A blog about the stuff between the docs and the App Store — Swift, SwiftUI, UIKit, architecture, tooling, and actually shipping the thing.
// Written by someone who ships apps, not just opinions.
Latest: Taming Swift Concurrency: From Completion Handlers to async/await
1struct FeaturedPostCard: View {2 let post: Post3 4 var body: some View {5 VStack(alignment: .leading, spacing: 8) {6 Text(post.tag.rawValue)7 .font(.system(.caption, design: .monospaced))8 .foregroundStyle(.accent)9 10 Text(post.title)11 .font(.title2.bold())12 .lineLimit(2)13 14 Label("\(post.readTime) min read", systemImage: "clock")15 .foregroundStyle(.secondary)16 }17 .padding()18 }19}Latest posts
Fresh off the keyboard. Mostly Swift, occasionally feelings.
Taming Swift Concurrency: From Completion Handlers to async/await
Callback pyramids age badly. Here's how I incrementally migrated a 40k-line app to structured concurrency without rewriting the world in a weekend.
Building a VIPER-lite Router in Pure SwiftUI
NavigationStack is great until your flows get real. A small, testable router that decouples navigation from your views — no third-party deps.
The Hidden Cost of @State: When SwiftUI Re-renders Too Much
Your view body is running more often than you think. A practical tour of Self._printChanges(), Equatable views, and where @Observable actually helps.
Shipping Faster: A Pragmatic Xcode Cloud CI Pipeline
Lint, test, snapshot, archive, ship. The exact workflow config I use to get from `git push` to TestFlight in under twelve minutes.
Browse by topic
Everything is tagged. Find your rabbit hole.
// about
Hey, I'm that Swift UI guy
I'm an iOS engineer who's spent the last several years taking apps from blank Xcode project to App Store — wiring up StoreKit, untangling concurrency, fighting the layout engine, and learning which “best practices” actually survive contact with a shipping deadline.
This blog is where I write that down. Expect deep dives on SwiftUI internals, pragmatic architecture (VIPER, MVVM, and when to ignore both), UIKit when you still need it, CI/tooling setups, and the occasional App-Store-review war story. Real code, real trade-offs, no cargo-culting.