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 postSwiftData 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 postWhen 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 postStarting 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 postAs a developer who uses Swift regularly, [weak self] should be something that’s almost muscle memory to you. I’ve written about using [weak self] before in the context of when you should generally capture self weakly in your closures to avoid retain cycles. The bottom line of that post is that closures that aren’t @escaping […]
Read postSwift 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