Skip to content

Hi đź‘‹ I'm Joseph Duffy

I enjoy building software. This website contains information about the apps I have created, open-source projects, and blog posts. Welcome to my corner of the internet!

Recent Posts

Self-hosting macOS GitHub Runners

This post explains how to set up an Apple Silicon Mac as a self-hosted runner for use with GitHub Actions. I will focus on setting up Tartelet, but I will provide some alternatives at the end.

The Bug That Bit Me Twice

I’ve been working on a fix for a bug in Overamped, which causes the popover UI shown when tapping on an image in Google Images to be blank, if the link goes to an AMP page. This was a silly bug that never should’ve happened; knowing that Google can change their page structure at any time I should’ve been more cautious with my checks.

As a temporary quick fix I removed all custom handling of Google results, tested my changes in the simulator, and uploaded a new build to TestFlight.

After installing the TestFlight update on my phone I checked a search result that I knew recreated the problem, but it was still happening! I have other extensions installed so I disabled some, refreshed, and the bug was fixed!

I thought it would be very strange for the same – very specific – bug to appear in multiple extensions, so I did a little digging.

Don't Use Scope Modifiers with Extensions

Extending types in Swift support setting the scope for the extension, i.e. public, internal, or private, with internal being implicit if nothing is specified.

This may seem useful, but given the following snippet it’s impossible to know what the scope of a function is:

func doSomething() {
    // Do the thing
}

Overamped Retrospective

Overamped has been available on the App Store for over 3 months, and I think it’s time for retrospective. I’ll try to cover the “success” of the app subjective, along with that I learned and my overall feelings.