Ramblings of an indie dev.

All of my long-form posts on programming, business, and everything else, collected in chronological order. My opinions represent those of my employer.

Swift Build Times and Module Verification…

A diagnostic of slow Swift build times after modularizing, focusing on module verification and practical fixes to speed up compilation.

Tweaking Animation Timing

Techniques for adjusting animation timing using custom timing functions to achieve more natural, spring-like motion.

Firefox Add-ons Review Madness

A developer’s account of a surprisingly difficult interaction with Mozilla's Add-ons review process and lessons learned.

Generic View Controllers with Storyboards

Patterns and practical workarounds for using generic view controllers with storyboards when the storyboard needs a concrete class.

Hey Siri, I'm Arriving Home

A hands-on account improving a HomeKit garage door setup with more reliable hardware and automation tweaks.

AnyDecodable

Presents `AnyDecodable`, a flexible approach to decoding JSON with `Codable` when the exact types are unknown ahead of time.

Xconfig

Introduces Xconfig, a small Mac app that displays Xcode build settings for the open project to save time and reduce terminal usage.

Splitting Your Xcode Project into Modules

Practical steps to modularize an Xcode project into separate frameworks and common pitfalls related to linking and build flags.

Unsafe Swift

A tutorial-style deep dive into working with unsafe pointers in Swift—memory layout, buffers, and patterns to work safely.

The Missing "k" Bug

A walkthrough of an interesting bug investigation (the ‘missing k’) and how diagnostic thinking led to the fix.

@DynamicFont

Describes a Swift UI component to centralize font choices and support Dynamic Type and Dark Mode consistently across the app.

Hey Siri, Open My Garage Door

A DIY HomeKit project to add garage door control using a Raspberry Pi and Homebridge, focused on reliability and practical improvements.

The Alert Hammer

A critique of macOS security alerts: why overuse of consent prompts harms usability and the goal of protecting users.

Bootstrapping your indie business

Notes and lessons from a talk on starting and sustaining an indie tech business, based on personal experience.

Thoughts on WWDC 19

Post-WWDC reflections highlighting notable platform updates and a closer look at SwiftUI.

UI Testing and NSScrollView

A short solution for UI tests that need to interact with off-screen elements inside `NSScrollView`.

Search Scopes in Xcode

A practical guide to Xcode's Find features with an emphasis on using search scopes to speed up code navigation.

Inverted Expectations

A pattern for asserting that something did *not* happen in tests, and how to write reliable inverted expectations.

Xcode: Comparing Build Settings

Practical tips for comparing and reasoning about Xcode build settings, from long-term usage experience.

iPad Pro — First Impressions

Hands-on first impressions of the iPad Pro—speed, keyboard, Face ID, and the state of app support.

Building Expectations

Introduces a simple Expectation object (backed by `NSCondition`) for waiting on asynchronous tasks outside of XCTest.

The 2018 iPad Pro

First impressions of the 2018 iPad Pro—what works, what doesn't, and how it shapes the iPad's role as a post-PC device.

Quick TCP Server Using NSSocketPort

How to use `NSSocketPort` to spin up a simple TCP server for testing without adding heavyweight dependencies.

Is There Hope for the Mac App Store?

A reflection on the Mac App Store's current problems and ideas for improvements that would help both users and developers.

Rewinding Animations

A short tip on how to run spring animations in reverse (for example by using a negative speed) and why that helps achieve natural UI effects.

Adopting Dark Mode and Older Macs

Approaches for adopting Dark Mode while keeping compatibility with older macOS versions and APIs.

NSOperation KVO Pitfall

A deep-dive into an NSOperation KVO bug and practical guidance on managing asynchronous operation state to prevent hangs.

The Developers Union

A call for developers to organize and advocate for App Store changes—like free trials—that can improve sustainability for users and creators.

Managing iOS UI Testing Fixtures

Practical techniques for creating and sharing deterministic fixtures for iOS UI tests, helping avoid flakiness and sandboxing pitfalls.