Apple introduced SF Symbols in iOS 13. SF Symbols allow developers to easily integrate icons in their apps. The SF Symbols icons integrate really well with the default system font, and provide a consistent look throughout the system. In iOS 14, Apple added over 750 new icons to the SF Symbols library for developers to […]
Read post
Subscribe to my newsletter and never miss a post
Learn more about Quick Tip
A Double and Float are both used to represent decimal numbers, but they do so in slightly different ways. If you initialize a decimal number in Swift using as shown below, the Swift compiler will assume that you meant to create a Double: let val = 3.123 // val is inferred to be Double The […]
Read postThere are several ways to handle errors in Combine. Most commonly you will either use catch or replaceError if you want to implement a mechanism that allows you to recover from an error. For example, catch is useful if you want to retry a network operation with a delay. The catch and replaceError operators look […]
Read postReclaim disk space by deleting old iOS simulators and Device Support files
Updated on: November 26, 2020After using a MacBook that runs Xcode for a few years it’s likely that your disk space is starting to fill up good. A large part of this disk space can be occupied by Device Support files that are used by Xcode for older iOS versions, or by iOS simulators that are no longer available […]
Read postThrottle network speeds for a specific host in Charles
Published on: May 21, 2020Sometimes you’ll want to test whether your app works properly under poor networking conditions. One way to test this is Apple’s Network Link Conditioner. Unfortunately, this will slow internet speeds for your entire machine to a crawl which can be counterproductive. Especially if you want to throttle your app for a longer period of time. […]
Read postHow to have more than one type of cell in a Collection View
Published on: May 19, 2020Collection views in iOS are awesome. You can use them to build complex custom layouts and since iOS 13 you can use Compositional Layouts to quickly build good looking layouts that would take forever to accomplish on iOS 12 and below. But what if you want to use more than one type of cell in […]
Read postChanging a publisher’s Failure type in Combine
Published on: April 15, 2020One of Combine’s somewhat painful to work with features is its error mechanism. In Combine, publishers have an Output type and a Failure type. The Output represents the values that a publisher can emit, the Failure represents the errors that a publisher can emit. This is really convenient because you know exactly what to expect […]
Read postThere are several ways to initialize and configure properties in Swift. In this week’s Quick Tip, I would like to briefly highlight the possibility of using closures to initialize complex properties in your structs and classes. You will learn how you can use this approach of initializing properties, and when it’s useful. Let’s dive in […]
Read postEvery once in a while I run into a situation where I update my iPhone to the latest iOS before I realize I’m still using an older version of Xcode for some projects. I usually realize this when Xcode tells me that it "Could not locate device support files". I’m sure many folks run into […]
Read postCalculating the difference in hours between two dates in Swift
Published on: March 25, 2020Sometimes you need to calculate the difference between two dates in a specific format. For instance, you might need to know the difference between dates in hours. Or maybe you want to find out how many days there are between two dates. One approach for this would be to determine the number of seconds between […]
Read postExpand your learning with my books

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