An iOS shortcut to show proof of vaccine
Sep 12, 2021, 6:46 PM
Here in Oakland and the rest of the Bay Area, more and more restaurants, bars, venues, and various events are requiring that people show proof of vaccine before entering. (As it should be.) Thankfully, all businesses and events allow...
Useful label-based GitHub Actions workflows
Aug 25, 2021, 1:08 AM
My current team has started using GitHub Actions to automate some tedious tasks for pull requests. In particular, we use labels on GitHub to categorize pull requests or highlight important metadata about them. Most of the time, a machine...
Caching Bundler on GitHub Actions
Aug 23, 2021, 5:28 PM
When GitHub actions first launched, the recommended way to cache your Bundler dependencies was to use GitHub’s cache action. However, that is no longer the case. You should be using the Ruby team’s setup-ruby action instead.
Different ways to observe properties in Swift
Aug 8, 2021, 8:16 PM
After I wrote and released Foil, my library for implementing a property wrapper for UserDefaults, one of the criticisms on Twitter was that a mechanism for observing such properties should have been included. I disagreed. In the post I...
Fixing a hard-to-find bug in Dark Mode
Jul 15, 2021, 4:14 PM
I previously wrote about implementing Dark Mode in an older codebase, specifically how Dark Mode works (or doesn’t) with CGColor. I recently fixed a bug in the same project that was difficult to track down because it manifested in such a...
Debugging a DiffableDataSource CellProvider
Jul 11, 2021, 8:05 PM
I was recently working on a project that uses modern collection views on iOS — that is, using diffable data sources, snapshots, and cell providers. I hooked up all the components and my collection view was working, or so I thought. I...
Diffable data source behavior changes and reconfiguring cells in iOS 15
Jul 8, 2021, 7:27 PM
This year at WWDC, some significant improvements and changes were announced for UICollectionView and UITableView. You can watch 10252: Make blazing fast lists and collection views for all the details, but I want to highlight some of them...
Is SwiftUI ready?
Jul 1, 2021, 8:31 PM
I’ve been following what’s going on with SwiftUI since it was released with iOS 13 at WWDC 2019 and have even taken extensive notes, but I have avoided using it. As I wrote before, I mainly wanted to avoid dealing with bugs and workarounds...
What is a rent strike?
Jun 30, 2021, 1:37 AM
I recently became acquainted with The United Front Against Displacement at an event in Oakland. UFAD is an anti-gentrification organization and there is a Bay Area chapter along with chapters in a few other major cities.
Apple's DocC is excellent, but unusable for open source projects
Jun 29, 2021, 7:55 PM
I was very excited at this year’s WWDC when Apple announced DocC, their new “Documentation Compiler” tool that generates documentation from comments in your source code. Unfortunately, it’s not going to work for the majority of open source...
RSS feeds, Jekyll, and absolute versus relative URLs
Jun 6, 2021, 12:59 PM
Lately I’ve been upgrading and making improvements to my website and blog. As part of that work, I was updating and refining how my RSS feed gets generated with Jekyll. And then I realized something that I had not given much thought to...
To distribute in the Mac App Store, or not: Is the app sandbox worth it?
Jun 2, 2021, 7:48 PM
For the past few weeks I have been debating on whether or not to distribute a new Mac app via the Mac App Store or independently. I have arrived at a crossroads in development where I need to make this decision. I am mostly code-complete...
iOS 14 App Library
Jun 1, 2021, 3:07 PM
I think App Library is one of the best features added to iOS in the past few years. I’m not being sarcastic, I know some folks dislike it. However, I absolutely loathe trying to organize apps on my phone into folders, because many apps do...
Three months of Big Sur
Jun 1, 2021, 1:07 PM
I upgraded to Big Sur three months ago. I know I’m (fashionably?) late to this party, but here I am. This is the longest I have ever waited to upgrade macOS. It feels weird, considering WWDC is next week where we will see what is next for...
Time Machine error 45 is fixed in Big Sur
Apr 8, 2021, 1:00 AM
Previously, I wrote about Time Machine “error 45”, an obscure bug in macOS Catalina. I still have no idea what was causing backups to fail, nor what “error 45” means. However, I am happy to report that I think this issue has been fixed in...
Resources for learning SwiftUI
Apr 7, 2021, 1:47 PM
A few months ago, I shared my notes and resources for learning about compilers and LLVM. It turned out to be pretty popular and folks seemed to find it useful. So I decided to do it again, but this time for SwiftUI. However, unlike...
Why Swift closures are not Equatable
Apr 5, 2021, 8:46 PM
Despite the fact that closures (and functions) are reference types in Swift, they cannot be compared using == or ===. But why?
Migrating OmniFocus to a new Mac
Mar 31, 2021, 6:26 PM
One aspect of using OmniFocus involves maintaining an archive of your data (if you choose). Over time — think years of using OmniFocus as your main task management tool — your local database of projects and tasks will grow very large,...
Apple's cooperation with authoritarian governments
Mar 30, 2021, 10:56 PM
Over the past few years, Apple seems increasingly willing to cooperate with authoritarian governments, uninterested in protecting its own users, and unwilling to actually standup for human rights in broad terms, as often portrayed by its...
A better approach to writing a UserDefaults Property Wrapper
Mar 27, 2021, 12:05 AM
UserDefaults is one of the most misused APIs on Apple platforms. Specifically, most developers do not handle default values correctly. In fact, I have never worked on a single production codebase at a company where this was done...
Returning to normal, Part 3
Mar 23, 2021, 5:53 PM
After only five days, yet another mass shooting has happened in the US. This post follows Part 1 and Part 2 in this ongoing series documenting how the US is recovering from a life-threatening virus.
Xcode tips for everyone
Mar 22, 2021, 5:54 PM
Lately, it feels like every few days someone is sharing a new Xcode tip on Twitter or on their blog. They range from hidden settings to features I simply never knew about. I started saving links and planned to add a new “Xcode tips”...
How to test your Mac app (or not) and decide which versions of macOS to support (or not)
Mar 19, 2021, 4:24 PM
As I continue to pursue Mac app development more seriously, I can build on and borrow from my many years of iOS experience. While many aspects of writing Mac apps are very similar to iOS, or at least somewhat familiar, other aspects are...
Using pipes in Swift scripts
Mar 18, 2021, 2:05 PM
I have a few Swift scripts to automate tedious tasks for maintaining my blog. I updated one today to use pipes. It took me a minute to figure out, because it did not feel very intuitive. I’m not sure if I feel that way because the...
Xcode UI testing reliability tips for iOS
Mar 17, 2021, 10:59 PM
Xcode’s UI testing framework has had its ups and downs over the years. Most recently, it has been much more robust and reliable in my experience. However, tests still tend to flake sometimes. Here are some ways that I have been able to...
Returning to normal, Part 2
Mar 17, 2021, 8:39 PM
I did not expect that I would have to follow-up on yesterday’s essay so soon, but I can’t say I’m surprised. In the past 24 hours, there were two mass shootings in the US. It is shocking and horrifying, yet somehow entirely predictable.
Deleting tweets and other social media content
Mar 17, 2021, 1:09 AM
I have been periodically deleting my tweets for a while now. Yesterday, I finally found a reliable solution for deleting my Twitter “likes” as well and I spent some time deleting all of them. Long ago, I also deleted all of my content on...
Returning to normal
Mar 16, 2021, 2:41 PM
Oakland has been anything but normal over the past year during the pandemic. But we are starting to see glimpses of normality. Little by little, the whole country is returning to “business as usual”, as they say. And the first real...
Fixing macOS Big Sur search bugs: And maybe others
Mar 10, 2021, 1:30 AM
This post is mostly for posterity, for anyone currently experiencing these bugs on macOS, and to praise Titanium Software’s excellent Mac utility app OnyX.
How to reboot the Touch Bar without rebooting your MacBook
Mar 2, 2021, 11:58 PM
The Touch Bar on my MacBook started freezing and experiencing UI glitches recently. It was completely unresponsive. At the time, the only way I knew to fix it was to reboot my entire machine, which felt ridiculous. Luckily, there is a...
A web host worth using
Mar 2, 2021, 8:29 PM
I’ve written about my web host before. I’ve used NearlyFreeSpeech.net for years. It’s very “bare bones”, very DIY, and very no-bullshit. I highly recommend them, especially if you only need to host a static site. It is so inexpensive you...
Top posts of 2020
Jan 3, 2021, 2:42 PM
Earlier this year, I decided to re-implement analytics for my site after discovering a viable privacy-aware (and open-source!) alternative to the user-hostile spyware garbage that we call Google Analytics. I have really enjoyed using...