Combine for Mere Mortals
Jan 8, 2021, 11:32 AM
I'm very excited to announce that my Combine Swift Course is now complete and available for purchase. Learning Combine has been extremely rewarding, but learning it can be daunting, so I decided to make the course I wish I had when I...
Managing Version Numbers with Fastlane
Oct 20, 2020, 6:11 PM
In this post I will describe how I use fastlane to manage my iOS and macOS version numbers for my releases.There are many ways to deal with versioning, but I prefer to define them manually loosely following a semver model.If you're not...
Sign-in with Apple Profile Information and Security
Mar 31, 2020, 8:37 AM
Sign-in with Apple is a fantastically useful new feature in iOS 13 and macOS Catalina. I knew when it was announced that I would want to support it. I’m currently working on this for NSScreencast and things haven’t gone quite as smooth as...
Swift for Good
Jan 17, 2020, 1:49 PM
A few months ago Paul Hudson asked me if I would be interested in contributing to a new book. The idea of the book was this: many authors, each writing a chapter about Swift, with all proceeds going to charity. I quickly accepted and began...
Modern AppKit File Permissions
Oct 23, 2019, 7:38 PM
Sandboxing has been a fact of macOS development for quite some time now. With each release of macOS we see an increasing number of features and new security constraints that we must live with.
Xcode Environment Specific Configuration
Oct 2, 2018, 11:50 AM
Almost every app you build with Xcode will need some sort of configuration. Whether it is API Keys for 3rd party SDKs, the URL of your API, feature toggles, or a logging level of verbosity, it’s a good idea to keep this configuration...
Side Mirror Gets Dark Mode
Oct 1, 2018, 2:17 PM
Side Mirror 2.1 was released to the Mac App Store with support for Dark Mode on macOS Mojave.
Capturing Self with Swift 4.2
Sep 14, 2018, 10:59 AM
Swift blocks are an increasingly common way of providing _callback_ type behavior to asynchronous functions.
Swift 4.2 introduced an interesting change recently, but first let's take a step back and review what "capturing" means.
Introducing - appDevDiary, a Podcast
May 8, 2018, 1:13 PM
I'm teaming up with my friend Joe Cieplinski (fellow musician and app developer) to build an app for guitarists. We're documenting our journey in a new podcast.
Functional Refactoring in Swift
Feb 15, 2018, 1:14 PM
Here's an example I came across recently where I wanted to clean up some imperative code and explore a functional approach to the same algorithm.
Codable Improvements in Swift 4.1
Feb 8, 2018, 10:22 AM
In Swift 4.1 Apple has addressed a common point of customization with the new keyDecodingStrategy on JSONDecoder.
dotSwift Paris 2018
Jan 31, 2018, 5:27 PM
I just returned from a trip to Paris for the dotSwift conference.
Since this is my third trip to Paris, I wanted to see a few things that I had missed in my previous trips.
Hidden AVFoundation Gem
Jan 16, 2018, 2:51 PM
I've probably written aspect ratio code a hundred times. Each time I approach the topic, I write a quick and dirty implementation, get it wrong, debug it with pencil & paper, and then fix my mistake.
Since this is something I need...
Apple Needs Better FaceTime Cameras for the Mac
Dec 12, 2017, 3:45 PM
But as the iPhone has led the pack in camera optics and technology in a small package, none of that love has made it back to the Mac.
Jerky Scrolling with UIRefreshControl + UITableView
Dec 6, 2017, 12:12 PM
While recording an episode for NSScreencast, in which I reload rows of a UITableView while scrolling, I noticed that the scrolling acceleration would screech to a halt.
Side Mirror 2.0
Jun 29, 2017, 10:19 PM
I'm excited to announce that Side Mirror 2.0 is now live on the Mac App Store!
Ultimate Guide to JSON Parsing with Swift
Jun 21, 2017, 11:25 PM
Swift 4 and Foundation has finally answered the question of how to parse JSON with Swift.