Recent articles

Jump to a random post

Asserting state with #expect in Swift Testing

Updated on: December 5, 2024

I don’t think I’ve ever heard of a testing library that doesn’t have some mechanism to test assertions. An assertion in the context of testing is essentially an assumption that you have about your code that you want to ensure is correct. For example, if I were to write a function that’s supposed to add […]

Read post

Improving test coverage with parameterized tests in Swift testing

Published on: October 31, 2024

When you subscribe to the practice of test-driven development or just writing tests in general you’ll typically find that you’re going to be writing lots and lots of tests for pretty much everything in your codebase. This includes testing that varying inputs on the same function or on the same object result in expected behavior. […]

Read post

Swift Testing basics explained

Published on: October 23, 2024

Swift testing is Apple’s framework for running unit tests in a modern and more elegant way than it was with XCTest, which came before it. This post is the first one in a series of posts that will help you start using Swift Testing in your projects. In this post, we’ll take a look at […]

Read post

Testing completion handler APIs with Swift Testing

Published on: October 16, 2024

The Swift testing framework is an incredibly useful tool that allows us to write more expressive tests with convenient and modern APIs. This is my first post about Swift Testing, and I’m mainly writing it because I wanted to write about something that I encountered not too long ago when I tried to use Swift […]

Read post

What is dependency injection in Swift?

Published on: October 11, 2024

Code has dependencies. It’s something that I consider universally true in one way or another. Sometimes these dependencies are third party dependencies while other times you’ll have objects that depend on other objects or functionality to function. Even when you write a function that should be called with a simple input like a number, that’s […]

Read post

Mesh Gradients in SwiftUI explained

Updated on: July 7, 2025

With iOS 18, we have the possibility to create mesh gradients. Mesh gradients are a really nice way to create very cool UI effects. In this post, we’re going to explore exactly what mesh gradients are, how we can use them, and how we can even animate them to look really cool. We’ll start off […]

Read post

Animating SF Symbols on iOS 18

Updated on: September 25, 2024

Over the years, Apple has been putting tons of work into the SF Symbols catalog. With SF Symbols, we’re able to leverage built-in iconography that will look familiar to users while also fitting into the Apple ecosystem very nicely. The fact that there’s thousands of symbols to choose from makes it a highly flexible and […]

Read post

Solving “Value of non-Sendable type accessed after being transferred; later accesses could race;”

Published on: August 23, 2024

Once you start migrating to the Swift 6 language mode, you’ll most likely turn on strict concurrency first. Once you’ve done this there will be several warings and errors that you’ll encounter and these errors can be confusing at times. I’ll start by saying that having a solid understanding of actors, sendable, and data races […]

Read post

Setting the Swift Language mode for an SPM Package

Published on: August 21, 2024

When you create a new Swift Package in Xcode 16, the Package.swift contents will look a bit like this: // swift-tools-version: 6.0 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( name: "AppCore", products: [ // Products define the executables and libraries a package […]

Read post

Solving “Task-isolated value of type ‘() async -> Void’ passed as a strongly transferred parameter”

Published on: August 21, 2024

Once you start migrating to the Swift 6 language mode, you’ll most likely turn on strict concurrency first. Once you’ve done this there will be several warings and errors that you’ll encounter and these errors can be confusing at times. I’ll start by saying that having a solid understanding of actors, sendable, and data races […]

Void' passed as a strongly transferred parameter"">Read post

Expand your learning with my books

Practical Combine header image

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

  • Thirteen chapters worth of content.
  • Playgrounds and sample projects that use the code shown in the chapters.
  • Free updates for future iOS versions.

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

Learn more