Skip to content

Hi! 👋 I'm Joseph Duffy. I enjoy building software. This website contains information about my commercial software, open-source projects, and blog posts. Welcome to my corner of the internet!

★ My Favourites

Four Squares

Four Squares Icon

Four Squares is a game of memory, skill, and concentration available for iOS, iPadOS, and macOS. Watch what happens each turn and replay what you see.

Nevis

Nevis Icon

Find and install applications found in DMGs and ZIPs.

Configurable to watch directories, ask before performing actions, moving used files to trash, and is completely free to try.

HashableByKeyPath framework release 1.0.0


Today I have released the 1.0.0 version of a Swift package that aids with adding Equatable and Hashable conformance by using KeyPaths.

The package is available on GitHub.

I created the Swift Playground that sparked this concept in December 2018, so this concept has been rattling around in my brain for a couple of years. The API has changed a lot since the original concept, but the core has stayed the same: a protocol that requires a single function to be implemented that uses KeyPaths to synthesise Equatable and/or Hashable conformance.

Keep Reading

iOS Share Sheets the Proper Way - Locations


Sharing a location on iOS is something that not a lot of apps need, but after requiring it for my latest app, Scanula, I found that there isn't a good resource explaining how to do it properly. This is the first post in a series of planned posts going over a few of the tips, tricks, and common pitfalls I have found while working with iOS Share Sheets.

Keep Reading

Recent Entries

Hosting DocC Archives


At WWDC21 Apple introduced DocC, a tool for creating archives of Swift documentation that includes the static files required to host a version of the documentation on a website.

In this post I will summarise various methods of serving a DocC archive:

  • Netlify
  • Vapor middleware
  • nginx
  • Apache

All the examples provided here are hosting the DocC archive for VaporDocC, the Vapor middleware I wrote for hosting DocC archives.

Keep Reading

VaporDocC v0.1.0


Release Notes

  • Support redirecting requests for the root (“/“)
  • Support redirecting requests with missing trailing slashes to include trailing slashes

Pull request Add JosephDuffy/VaporDocC.git on SwiftPackageIndex/PackageList


The package(s) being submitted are:

Checklist

I have either:

  • [x] Run swift ./validate.swift.

Or, checked that:

  • [ ] The package repositories are publicly accessible.
  • [ ] The packages all contain a Package.swift file in the root folder.
  • [ ] The packages are written in Swift 5.0 or later.
  • [ ] The packages all contain at least one product (either library or executable), and at least one product is usable in other Swift apps.
  • [ ] The packages all have at least one release tagged as a semantic version.
  • [ ] The packages all output valid JSON from swift package dump-package with the latest Swift toolchain.
  • [ ] The package URLs are all fully specified including the protocol (usually https) and the .git extension.
  • [ ] The packages all compile without errors.
  • [ ] The package list JSON file is sorted alphabetically.

Handling iCal Files in iOS


The iCal format, first defined as a standard as RFC 2445 in 1998, is the universally accepted format for distributing calendar files, mainly used for distributing events.

As part of my QR code scanning app Scanula I added support for detecting events in scanned objects. Thanks to the fantastic libical and the Swift wrapper swift-ical it's fairly easy to parse an iCal feed, but adding it to iOS is a bit trickier.

Keep Reading

Scanula version 1.2.0


Release Notes

Version 1.2 of Scanula provides better integration with system features, improvements to existing feature, and a few bug fixes.

  • Support for system dark mode
  • Support long press to preview scans
  • Improved UI on iPads
  • Use system icons
  • Adding a scanned calendar to the system calendar will now add all fields from the iCal object
  • Improved handling of sms: URLs
  • Fix changing brightness when viewing a generated barcode
  • Fix action extensions sometimes not showing results
  • Various small bug fixes and UI improvements

The iPod touch Is My Favourite Device for iOS Development


It's important to test across various screen sizes, which the iOS simulator is good for, but it's also important to test on real devices where possible. I currently have an iPhone 11 Pro, an iPhone 6, and 2 iPod touches. Out of all these I find the iPod touch to be the best device for a lot of iOS development.

Keep Reading

Four Squares version 2.1


Release Notes

Four Squares 2.1 adds support for manually uploading completed games to iCloud, including games completed in Four Squares 1.0. Games completed in Four Squares 1.0 can also now be deleted.

Four Squares version 2.0


Release Notes

Four Squares 2.0 is a huge update bringing new modes, customisations, features, and an overhauled UI.

New Modes

In Time Attack mode you start with only 30 seconds on the clock. Every pattern you get right will add 3 more seconds to the clock. How long can keep going?

Speedrun mode gives you 3 lives to try and reach of sequence of 10 in the fastest time.

New Customisations

Old and new themes are available, along with brand new sound packs.

Existing themes have been updated to better support both light and dark mode.

Brand New UI

The UI has been reworked to make customisation easier and support more platforms. Look out for a macOS app in the near future!

Completed Games

Each game you play is now saved and can be viewed in the app.

You can even choose to play the same sequence to keep working on your high score!

App Clip

Four Squares now includes an App Clip, so you can share a completed game with a friend and they can try to beat your score without having to install the app.