Douglas Hill’s posts in 2025
7 January 2025
Today’s weird low-level issue: Calls to os_log_with_type
will log <decode: bad range for [%{public}@] got [offs:318 len:1238 within:0]>
if the message has a length from 966 to 1989. The workaround is to split the message in two. »
19 January 2025
Booked my ticket for Swift Craft in May. Most European iOS conferences are around Sept/Oct, so it’s nice having this one earlier in the year. (I’d nostalgically call this the UIKonf slot — just before WWDC.) »
20 January 2025
The M4 iPad Pro introduced haptic feedback on iPad via the Pencil and trackpad. I wrote about how we went against Apple‘s recommendations to get haptics working across both iPad and iPhone. Sometimes, “trust the system” isn’t enough. »
Today it’s five years since I last went on a plane. I continue to have no plans to fly anywhere, while still enjoying slower travel on the ground. Here’s a brief review of my travel last year and in the coming year. »
22 January 2025
I requested to change our company name displayed on the Apple’s app store from PSPDFKit GmbH to Nutrient three months ago and never heard back. Just tried again. Did anyone manage this before? »
Is there a best practice for implementing description
and debugDescription
for main actor classes with Swift strict concurrency? I’m going with checking the thread for now, which works, but seems off. »
27 January 2025
Interesting finding: UIPointerInteraction
updates continuously while scrolling on Mac, but not on iPad (only when the pointer moves on screen). The Mac behaviour is more correct because the content under the pointer might change when scrolling, but this makes the performance way less forgiving.
»
28 January 2025
I wrote a post comparing ShareLink
, mailto links, and MFMailComposeViewController
so you can choose best way to send emails in an iOS app. »
30 January 2025
Apple’s text autocompletion has gone too far. It can take the valid word I want and replace it with a longer word with the same prefix. For example, I want to type “when” but it’s replaced by “whenever”. “Git” may be changed to “GitHub” and “app” to “Apple” (with a capital A, naturally). »
31 January 2025
Today is the first time I’ve noticed Apple Mail display a Verified Logo for a sender. Ironically, this is on an obvious PayPal spam email. »
In 2024, I read about as many books as I read in the three preceding years combined. I wrote a post reflecting on trends in my reading habits and sharing some of my favourite books from last year. »
3 February 2025
The update to Swift Playground last week added the iOS 18 and macOS 15 SDKs. It’s 4.5 months after these SDKs shipped in stable Xcode and nearly 8 months after the first Xcode 16 beta. Given this app is the only option for making iOS apps on iPad, Xcode for iPad can’t come soon enough. »
12 February 2025
Added LinkedIn as an experimental additional way to follow my posts. I’ve heard that while the social media landscape has been tumultuous, LinkedIn has been a rock. Everything will be cross-posted from my website, same as how Bluesky etc. are set up. No filtering for only ‘professional’ posts. »
Wondering if it would be a good idea to replace my M1 Pro 14-inch MacBook Pro with a 13-inch MacBook Air (if it’s updated to M4 or M5 sometime soon). On the one hand, the 14-inch Pro is a bulky accessory to my iPad just to run macOS. On the other hand, we have a lot of code to compile. »
Did anyone manage to join Apple’s App Store Small Business Program? I’ve requested this twice for our company account and never heard anything back. »
14 February 2025
Received an email from Apple about new South Korean rules on subscription trials — which came into effect already — saying “additional consent must be obtained” and “The App Store will help to get consent”. Unclear what we need to do, if anything. Maybe safer to remove the app from sale in Korea? »
16 February 2025
Automatic translation is hard. On a translated webpage that was supposed to show an IBAN for bank transfers, Safari ‘translates’ IBAN (which is already English) and removes part of the code.
Original:
IBAN: AT33 XXXX XXXX XXXX XXXX
Translation:
Account number: XXXX XXXX XXXX XXXX »
18 February 2025
Really cool to see our larger NSLondon organising team allowing us to try different kinds of events for the iOS developer community. This Sunday we’re doing a walk between the Battersea and Regent Steet Apple stores, passing Buckingham Palace. (Too bad I can’t join because I’m in the Alps. 😄) »
20 February 2025
Working on the iOS team at Nutrient is different from many other iOS development roles. I wrote a post about life on the iOS team at Nutrient with insights into how we work, the challenges we face, and what’s important to us. »
And yes, we’re hiring for a position on my team. Looking for a person passionate about building developer tooling who lives and breathes iOS development. The role is 100% remote, and we work async-first, so it’s very flexible. »
21 February 2025
Wondering how exactly I’m determined as being “in the United Kingdom” regarding Advanced Data Protection. Presumably the store region and registered payment card. Thinking it might be time to start a big (painful) migration to a new European Apple Account. »
25 February 2025
I’m late posting this, but Swift Connection has published the recording of my talk on zoom transitions in Paris last September. I also put up a page linking to the relevant resources. »
28 February 2025
My weird way to speed up six App Store Connect submissions (iOS/Mac/Vision × App Store/TestFlight) is to open two browser windows so I can click buttons in one while the other is waiting on the server. (It would probably be sensible to automate this.) »
Reminds me of growing up playing two Pokémon games at once so I could choose moves in one while the attack animations happened in the other. Those Pokémon weren’t going to train themselves. »
At first, I thought it was a Zoom programming error that this popup appears every time I start a video call on my Mac, but it looks like this is a system feature that boring Zoom users like me should be constantly nagged about. Clicking the × doesn’t do anything. »
1 March 2025
It’s very easy if you‘d like to join me making a donation to the Ukrainian government. (Or call it an investment in security and democracy if you prefer.) Weird making donations to a government, but here we are. 🇺🇦 »
2 March 2025
Is there a trick to getting iPad app screenshots to not show rotated on Apple’s anticompetitive store? Looks fine on App Store Connect. I guess maybe because one screenshot is portrait it breaks the others, but the only way to know is to release a new app version and see.
4 March 2025
Notion added a feature to their website on iPad where placing the mouse pointer near the top or bottom of the page scrolls up or down. Great if you struggle with scrolling on other websites. It’s a nice companion to their formatting bar that covers up the text you’re trying to edit. »
5 March 2025
Update on Apple’s “Turn On Reactions” nag: Turning off Notifications for FaceTime then restarting my Mac made these popups stop when using Zoom. This makes little sense given these aren’t notifications, and I’ve never used FaceTime on a Mac. Found in this Reddit thread thanks to Caesar Wirth. »
6 March 2025
Apple’s aggressive text autocompletion cleared a new bar. After spending most of this week doing interviews for our open job (which is great but it’s a lot!) I was texting friends about weekend plans and when I typed “in” it was replaced by “interviews”. Not cool. »
With this example, it’s hard to believe the iOS/macOS text autocompletion uses a transformer language model or whatever given that if you take a correct English sentence containing “in” and replace “in” with “interviews” you most likely don’t end up with a correct sentence. »
I’m (partially) sorry about the negative tone of my posts recently. Text autocompletion with advanced models is relatively new, and will improve with iteration. I wish I was as confident about improvements to encryption laws and software distribution on iOS (and global cooperation/peace etc). »
7 March 2025
Our newest release, Nutrient iOS SDK 14.6, adds AI Assistant. Another thing I like in this update is that we’re following my recent advice to prefer mailto links to MFMailComposeViewController
(by default — it’s an SDK so of course we made this configurable). Also our changelog has an RSS feed.
»
12 March 2025
🏔️ Innsbruck 🚄 Vienna 🏙️ for a few days »
13 March 2025
Cool, I managed to make Nintendo Music play from two points in the track concurrently, with the audio streams overlaid for extra energy. iOS devs, this might be my one chance to say this: They should have used a singleton! (I removed the audio in the recording because only one of the streams was picked up.)
Federico Viticci writes about how desktop-class experiences are found in web apps rather than native iPad apps. I’ve had a similar experience: I spend much of my work time in Slack, GitHub, Jira, Notion, and Google Docs. These all have iPad apps, but I use the websites on my iPad instead. »
Most of my career making software with Apple’s SDKs has prioritised iPad over iPhone, which was always a bit of a niche. It doesn’t bring me any joy to say this since I love the polish and consistency native apps can theoretically provide, but I increasingly feel like the web is the way forward. »
17 March 2025
Given that multiple stores for apps exist and Apple chose to name theirs in a generic way, I’ve changed all posts on my website saying “the App Store” to “Apple‘s app store”. (While doing this, the earliest post I found regarding the lack of competition in this space is from 15 years ago.) »
18 March 2025
After reviewing five job applications in a row with the phrase “perfectly aligns”, I updated my Life on the iOS team at Nutrient post to use plainer language to set the tone better. We don’t need to achieve, align on, thrive on, and foster when we can have, talk about, enjoy, and provide. »
25 March 2025
The Xcode 16.3 release notes list some interestingly named C++26 features, including Poison Pills are Too Toxic, The Mothership has Landed, and Symmetry for spaceship. »
30 March 2025
With European summer times starting this weekend, I’m tactically moving from France to England today to (except for a few hours) go straight from Central European (Winter) Time to British Summer Time, which are both UTC+1. Take that silly clock changes. »
1 April 2025
Reminder that calendrical calculations are hard, so you should always use Foundation’s Calendar
and DateComponents
APIs.
16 April 2025
Looks like Xcode 16.3 has introduced new (incorrect) upload warnings:
Your app, or a library that’s included in your app, uses Apple Push Notification service (APNs) registration APIs, but the APS Environment Entitlement isn’t included in the app signature’s entitlements. »
24 April 2025
Thank you superstars at Apple for iOS 15.8.4. Great to see security fixes for products released nearly a decade ago. I’m still living the one-handed phone life with the 1st-gen iPhone SE. »
28 April 2025
Here’s a quick roundup of upcoming iOS conferences in Europe. I’ll be at Swift Craft next month and hopefully at least one more in the autumn. »
4 May 2025
My reading app will become unavailable on Apple’s app store in five days, because I’m letting my paid Apple Developer membership expire. As I understand things, if you “Get” the app now, you’ll still be able to download it after that point. »
19 May 2025
Heading off to the Swift Craft conference. Now I have 24 hours to work out my lightning talk about developing across Apple platforms. »
21 May 2025
Before yesterday, the Apple developer website wasn’t using the word keynote in reference to the video at the start of WWDC week. The calendar event called it a kickoff. This has been updated so it’s now called a keynote like in previous years. »
22 May 2025
Registration for our NSLondon WWDC25 keynote viewing party at Ford opens at 13:00 today. I expect it will fill up quickly. Note: With Meetup, there’s a two step process of first requesting to join the NSLondon group and then RSVPing (registering) for the particular event. »
2 June 2025
It’s one decade since I started at Nutrient/PSPDFKit! We’ve grown, and a lot has changed, but not everything: same remote lifestyle, open communication, and drive to improve. After 45k messages and 2554 pull requests from me, we’re still happily using Slack, GitHub and Google Workspace. »
4 June 2025
Mac pro tip: Use option + shift + brightness up/down to change the brightness in smaller increments. The increments seem different on the 2024 MacBook Pro compared to the 2021 model, so indoors I often find 6 bars too dim but 7 bars too bright. 6.25 bars is about right. »
6 June 2025
Here’s a written version of my impromptu lightning talk at Swift Craft 2025 about the available options for codebases that work across Apple platforms. »
8 June 2025
Since I might want real-time posting during Apple’s keynote tomorrow, I made my site build a bit quicker on GitHub Actions. My key finding is that calling swift
has a high startup cost here. Even swift --version
can take 9 seconds. I went with caching the compiled Swift build script.
»
Gah just booked an unchangeable train ticket an hour too early because of time zones like an absolute novice. You wouldn’t guess I work with a team where everyone is in a different time zone. At least it’s the first train of the day so I just have to be up a bit earlier. »
9 June 2025
Is it just for me that typing into a Shortcuts “Ask for Input” action no longer works on Mac? Key events always go to the main Shortcuts window, so the only way to enter text is by pasting from the context menu. »
There was always a question of whether the ‘slides’ in WWDC keynotes were real or added digitally, but now it’s clear these are secretly visionOS windows. »
Hopefully they‘re saving the best until last for iPad. (Based on the order in the list of platforms shown near the start.) »
How is liquid glass going to look with reduce transparency enabled (which I use)? »
What I want in macOS are more stunning aerial photographs as backgrounds like we had for Catalina and Big Sur. »
This looks interesting for our PDF Viewer app. »
Highly sceptical of this new windowing system on iPad. Looks messy. I'd use a Mac if I want a Mac. But we'll see. I think Stage Manager is a pretty good design, just very buggy. »
10 June 2025
Looks like registration for WWDC labs tomorrow already closed, presumably at 10pm BST since I submitted one fine at 9:57pm. The submissions for today’s labs were still open after midnight. How can I know when the submissions close each day? »
12 June 2025
Apple are running an in-person session in London covering their WWDC highlights. It’s only just over a week away. I applied. »
13 June 2025
And that’s WWDC labs wrapped up. Putting Webex away for another year. Only did 5 labs this year, but very useful as always. Thank you Apple people for the help! »
15 June 2025
Never thought this day would come: installed the native WhatsApp app on my iPad. Since their web app worked pretty well the last few months and Apple doesn’t allow web apps to live only in App Library, the biggest practical change with the native app is removing WhatsApp from my iPad dock. »
Very excited to be taking trains from London to the Norwegian fjords around Bergen next month for hiking and kayaking. I’ll stop in Copenhagen and Oslo on the way up. This will be my first time in Denmark and Sweden. 🇬🇧🇧🇪🇩🇪🇩🇰🇸🇪🇳🇴 »
16 June 2025
Mac dictation just produced “There's a floor in the plan”. Classic homophone issue with flaw vs. floor, but surprising the language model doesn’t rank flaw as more likely. Maybe the term “floor plan” confuses it by marking these as two words often used together. »
17 June 2025
We’re trying an old idea again at NSLondon. If you’ve watched some WWDC sessions now, come and put it into practice coding together at a cafe on Sunday 29 June. Location TDB. Tell me if you know a great cafe we should meet at! I’m planning to use the time to test and update KeyboardKit for iOS 26. »
19 June 2025
We launched a Nutrient company podcast with our CEO Jonathan. The first episode is a chat with Nick, who’s an incredibly thoughtful and productive engineer on our AI team. Feed, Castro, Overcast, Spotify, or if you really want YouTube. »
There are still a few hours to sign up for Apple’s WWDC highlights event in London this Monday. I’ll be there. There are also events at many other locations around the world in the coming weeks. »
20 June 2025
Here’s another roundup of Swift/iOS conferences in Europe later this year. I’m planning to be at SwiftLeeds and #Pragma. »
23 June 2025
Had a great day at Apple’s WWDC highlights event at their well-appointed Battersea space. They covered a lot of ground in 2 hours of talks, then there was a lot of relaxed time for lunch, chatting, and people with laptops out working together in a nice environment. »
Looking forward to our experimental and informal NSLondon coding and coffee thing this Sunday. We’ll meet in the cafe area of the Royal Festival Hall (Southbank Centre). »
30 June 2025
Nice user review. Good to hear our app is doing some good in the world.
10/10 app, it stopped me from throwing my iPad across the room. »
Follow/subscribe for updates