Douglas Hill’s articles


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

Tweets on my website: My past tweets are now available on my website. No sign in required. In the URL, replace “” with “”.

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.

6th generation iPad mini dimensions: A comparison of the new iPad mini (6th generation) to previous iPad mini models.


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.

Keyboard control in UIKit apps

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

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.

Beyond size classes: Making better use of large screens

App termination

Berlin to London by train

London to Lugano by train


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.

Improving user experience with Apple Pencil


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

My favourite games of 2015


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


My favourite games of 2013


Gaming overhead


Concrete, tarmac and asphalt


Hard-to-see scroll bars


Greg Joswiak at SVC2UK

Torch apps for iPhone 4

Camera Plus

Text areas on iPhone

World of Goo

Designing notifications

iOS keyboard sounds

My lab report process

Wikipedia style


System Preferences iOSification

Fake Finder

Wi iTV

iPad and engineering textbooks