Douglas Hill’s archive

This page lists my longer, more considered articles. Use the year heading links to see all posts in each year.


NSCopying in a Swift World: An exploration into how a modern Swift programming mindset clashes with Objective-C’s NSCopying protocol.

Zoom transitions: A detailed, illustrated guide to my favourite addition in the iOS 18 SDK.

London to Athens by train and ferry: Photos and notes from my three-week trip to Greece to attend a wedding without flying.

2024 iPad Pro impressions: Initial thoughts on the new 13-inch iPad Pro after trying it in the Piazza Liberty Apple store in Milan.

Five years with the 2018 iPad Pro: Reflecting on many thousands of hours using the 2018 iPad Pro and considering what hardware a new iPad should have to last until 2030.

Grounded adventures: Four years without flying: My journey from flying around the world as a digital nomad to not flying at all.


Vision is an exciting addition to Apple’s lineup: Considering how Apple’s newly announced Vision platform could fit in with its existing platforms.

Conditional compilation for Apple’s yearly updates: How to smoothly transition an iOS and Mac Catalyst app for Apple’s yearly updates between June and October.

NSPredicate: an old API with new surprises: Discovering an inconsistency in how NSPredicate handles matching inequality with nil values, and implementing something better.

Using JavaScript in a Swift app: How I used JavaScriptCore to add a JavaScript dependency to my iOS app to remove tracking parameters from URLs.


Download failures with Swift Package Manager binary targets: A tale of how reading an error message more carefully allowed us to work around an issue with our tooling.


What is a deprecated API on iOS? A look at Apple’s API evolution strategy and the effect of the deployment target and base SDK Xcode project settings.


What’s new in KeyboardKit for iOS 14? Some details about KeyboardKit’s new support for Swift Package Manager, sidebars and lists with UICollectionView.

The case for lists in UICollectionView: Exploring the power and flexibility offered by creating lists using UICollectionView.

Breaking down the remote WWDC experience: A breakdown of how well WWDC 2020 went compared to previous in-person editions.

iPad-focused WWDC 2020 wish list: New stuff I’d like to see on iPad.

Level up your trackpad support using UIInteraction: How to make your iOS app work well with scrolling, secondary clicking and dragging on a trackpad or mouse.

DynamicButtonStack: Motivation and design details

Improving iOS menus by putting icons on the left with swizzling: How I improved the usability of iOS contextual menus and the share sheet with some swizzling fun.

Localisation using Apple’s glossaries: How I localised KeyboardKit into 39 languages without needing translators.

Moving a Git repository into its submodule: How we improved our Git repository setup by moving our PDF Viewer for iOS repository into our PSPDFKit repository.


Page Up, Page Down, Home and End in Catalyst apps: Apple didn’t add support for scrolling with Page Up and Page Down in UIKit: They added this in WebKit/Safari.

Open links in Safari, not Safari view controller: Why we changed our default for opening web links from SFSafariViewController to the Safari app.

Open source advent: The creation of KeyboardKit: From 1–24 December 2019, I published open source code every day. Most days, these efforts focused on hardware keyboard control in iOS apps, which came together as KeyboardKit. This article collects my daily updates.

FB6185896: App unexpectedly terminates instead of receiving application:didDiscardSceneSessions:


Self-sizing table view cells in practice: A look at self-sizing table view cells for apps supporting iOS 10, 11, and 12, covering three implementation approaches and some pitfalls I encountered supporting these across our UI in PSPDFKit.

Smart grid sizing: How PSPDFKit is smart about choosing thumbnail sizes.


How to use iOS Data Protection: How apps can use iOS Data Protection to secure their files.

Making the most of remote work: At PSPDFKit, we strive to hire the best people for the job, regardless of where they are in the world. Here, I want to share how I’ve been making the most of remote work.


Preventing popovers on popovers: Some unexpected things found when looking into presenting action sheets and activity view controllers.

iOS 10 and OS X 10.12 wish list: Here are some changes I would like to see in the next versions of Apple’s major platforms.

Why I made Magic Spell: I found myself fixing a lot of spelling errors in source code, so I made a Mac app to check spelling in many files at once.

My favourite games of 2015


Presentation controllers and adaptive presentations: Our problems with UIPresentationController and adaptive presentations at PSPDFKit.


My favourite games of 2013



Clear: Clear is exciting. It pushes the boundaries of how we think software interfaces work and is full to the brim with delightful interactions. Here are some thoughts on the app.


Greg Joswiak at SVC2UK: I attended Silicon Valley comes to the UK, where Greg Joswiak from Apple gave a talk.

Camera Plus: A review of TapTapTap’s Camera Plus app.

Designing notifications

My lab report process: I’ve developed a somewhat unusual process for writing university lab experiment reports.

Tab Bar in the iPhone Photos App

iWork for Mac pricing


Some Thoughts on the Instapaper App’s Interface: An unsolicited redesign of my favourite app.

Report From My Time in Germany: A write up about my DAAD RISE internship at the University of Lübeck’s Institute for Signal Processing.

Wi iTV

YouTube and Web Apps on iOS

Deleting from the iPhone Home Screen

Ideal PDF handing in Opera

My iPhone Background Processes List

iPhone OS 4 Developer Preview Event

Instapaper 2.2: When you use an application as much as I use Instapaper, small changes can make a big difference. Here are assorted thoughts on the 2.2 update.