Douglas Hill’s articles
2023
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.
2022
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.
2021
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.
2020
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.
2019
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.
Beyond size classes: Making better use of large screens
2018
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
2017
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.
2016
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.
2015
Presentation Controllers and Adaptive Presentations: Our problems with UIPresentationController and adaptive presentations at PSPDFKit.