Recent articles

Jump to a random post

Migrating an iOS app from Paid up Front to Freemium

Published on: January 30, 2026

Paid up front apps can be a tough sell on the App Store. You might be getting plenty of views on your product page, but if those views aren’t converting to downloads, something has to change. That’s exactly where I found myself with Maxine: decent traffic, almost no sales. So I made the switch to […]

Read post

A Deep Dive into SwiftData migrations

Published on: January 19, 2026

SwiftData migrations are one of those things that feel optional… right until you ship an update and real users upgrade with real data on disk. In this post we’ll dig into: How to implement schema versions with VersionedSchema When you should introduce new schema versions When SwiftData can migrate automatically and when you’ll have to […]

Read post

A deep dive into Collections, Sequences, and Iterators in Swift

Published on: November 5, 2025

When you write for item in list the compiler quietly sets a lot of machinery in motion. Usually writing a for loop is a pretty mundane task, it’s not that complex of a syntax to write. However, it’s always fun to dig a bit deeper and see what happens under the hood. In this post […]

Read post

Using Observations to observe @Observable model properties

Published on: September 24, 2025

Starting with Xcode 26, there’s a new way to observe properties of your @Observable models. In the past, we had to use the withObservationTracking function to access properties and receive changes with willSet semantics. In Xcode 26 and Swift 6.2, we have access to an entirely new approach that will make observing our models outside […]

Read post

Should you opt-in to Swift 6.2’s Main Actor isolation?

Published on: September 11, 2025

Swift 6.2 comes with some interesting Concurrency improvements. One of the most notable changes is that there’s now a compiler flag that will, by default, isolate all your (implicitly nonisolated) code to the main actor. This is a huge change, and in this post we’ll explore whether or not it’s a good change. We’ll do […]

Read post

What is Approachable Concurrency in Xcode 26?

Updated on: September 12, 2025

Xcode 26 allows developers to opt-in to several of Swift 6.2’s features that will make concurrency more approachable to developers through a compiler setting called “Approachable Concurrency” or SWIFT_APPROACHABLE_CONCURRENCY. In this post, we’ll take a look at how to enable approachable concurrency, and which compiler settings are affected by it. How to enable approachable concurrency […]

Read post

Supporting Universal Links on iOS

Published on: July 4, 2025

Universal Links are a fantastic way to allow users to share your app’s content through URLs that work on the web, iOS devices, and more. Learn how you can set up Universal Links for your app by setting up entitlements as well as your server.

Read post

Grouping Liquid Glass components using glassEffectUnion on iOS 26

Published on: July 2, 2025

The Apple Maps app features something that looks like a vertical toolbar where they’ve stacked two grouped buttons on top of each other using a Liquid Glass effect. In this post, you’ll learn how you can make use of a GlassEffectContainer and the glassEffectUnion view modifier to achieve this effect.

Read post

Expand your learning with my books

Practical Core Data header image

Learn everything you need to know about Core Data and how you can use it in your projects with Practical Core Data. It contains:

  • Twelve chapters worth of content.
  • Sample projects for both SwiftUI and UIKit.
  • Free updates for future iOS versions.

The book is available as a digital download for just $39.99!

Learn more