• HTTP in Swift, Part 1: An Intro to HTTP

    For a while now I’ve had a series of blog posts floating around in my head on how to build an HTTP stack in Swift. The idea started last spring with Rob Napier’s blog posts on protocols, and matured last summer and fall while I was working at WeWork on an internal Swift framework.

  • The Missing Accessory

    I’ve got a bag of accessories that I cart around that meets about 95% of all the tech needs I tend to have these days, but there’s one accessory I’ve wanted in there that doesn’t exist: the perfect Apple Watch charger.

  • Anything worth doing...

    I’ve been wanting to blog more, but it’s always seemed like such a hassle. I appreciate the speed and flexibility of statically-generated sites, but the authoring experience around them isn’t that great. On the other hand, the authoring experience on hosted solutions (like Wordpress or Medium) is fantastic, but you lose a lot of the speed of a static site, and the ownership becomes more murky.

  • Introducing Time

    Four years ago I blogged about the oddities of leap days.

  • Conditional Compilation, Part 3: App Extensions

    App Extensions tend to somewhat problematic when it comes to conditional compilation, because there are methods and functionality that are not available in app extensions. For example, app extensions don’t have a UIApplication instance, and so the UIApplication.shared property is marked as NS_EXTENSION_UNAVAILABLE_IOS(...).

  • Silencing Specific Build Warnings

    In one of the online communities I participate in, another developer recently asked the question:

  • When Recruiting Goes Horribly Wrong

    I had an experience with a company and a recruiter recently that I wanted to share with you as a sort of “cautionary tale” about When Recruiting Goes Horribly Wrong.

  • Building a Cross-Platform Framework

    I love to browse through Github and see the sorts of frameworks people build. Pretty frequently I come across repositories that make a good effort to provide a cross-platform experience by offering iOS, watchOS, and tvOS versions. Sometimes there’ll even be the odd macOS version too!

  • Conditional Compilation, Part 2: Including and Excluding Source Files

    In the previous post, we saw how the SWIFT_ACTIVE_COMPILATION_CONDITIONS build setting can inject values in to our .swift files that we can use to conditionalize code depending on our active SDK and/or architecture.

  • Conditional Compilation, Part 1: Precise Feature Flags

    When developing an app or a library, it’s pretty common that at least once in the course of development, you’ll need to conditionalize compilation of your code. Maybe you’ll be accounting for a bug in the operating system where things that don’t work quite the same on your device as they do on the simulator. Or perhaps you’ll want to simply exclude code from your simulator builds because the simulator simply doesn’t have that functionality (like invoking the camera).