Douglas Hill’s posts in 2022

2 January 2022

Did anyone manage to add a binary Swift Package in Swift Playground on iPad? For me it says Fetching Versions for a minute or two and then does nothing. No error message. Can’t find any documentation on whether this is supposed to be supported.

»

9 January 2022

I’ve finally found a workaround for Apple Maps sometimes (not always) rewriting my home address to a different address when navigating. I made a Text Replacement containing the latitude and longitude, so I can just type “homell” and it’ll find the exact correct spot every time! »

12 January 2022

Does this sound right, that if you were programming you’d solve a problem on iOS or on Android but in Swift or in Kotlin? »

14 January 2022

Pasting links into Bear is still the most reliable way to quickly move webpages between my iPad and Mac. »

It looks like when you show a UIDocumentBrowserViewController it’s never deallocated, so if the system wants to disconnect a scene to save memory this might not be very effective for document-based iPad apps. (FB9844760) »

20 January 2022

Nintendo should get more praise for Switch system updates taking 30 seconds. (I timed it.) The slower part is likely relaunching the game. (37 seconds for Smash.) »

21 January 2022

All projects should be started near the start of a month to minimise the amount of clicking to change months when setting up due dates. Surprise: I never want a due date in the past, yet almost all calendar pickers spend half of every month showing more past than future.

See also this post from 2010 marco.org/2010/03/28/more-ideas-than-time-logarithmic-calendar-view

Thankfully (as an app rather than a picker) Fantastical exists and can be set to start with the current day/week instead of the first day of the week/month. »

22 January 2022

Apple’s new 96W power adapter, which came with my MacBook Pro, supports 15V USB PD, which is exactly what the Nintendo Switch dock requires. Since you can easily swap the plug on Apple’s adapters for different regions, I now have a universal docked Switch power supply. Awesome! »

23 January 2022

On old Macs that aren’t compatible with macOS Monterey, Apple still posts a notification telling you about all the cool new features. When you click it, the software update preferences pane says you’re up to date. 🤦 »

25 January 2022

If the Source Control menu was removed when disabled in Xcode Preferences then all the menu items would fit to the left of the camera on the 14-inch MacBook Pro.

»

27 January 2022

Pet photos blog post 😍

This was an A-grade idea @heytherewills twitter.com/PSPDFKit/status/1486726946851418117 »

28 January 2022

Extra fantastic

»

3 February 2022

I wonder how many years after iCloud Photo Library was introduced will it be before Photos for Mac stops switching to the import screen when an iPad/iPhone is connected. »

8 February 2022

Isn’t “download the latest available version” basically the definition of “update”? 🤔 help.apple.com/app-store-connect/#/dev7013b314c

»

9 February 2022

Pull to refresh in Safari is one of those ideas that doesn’t work well in practice. I’m often losing entered data because I accidentally scroll or zoom out too far. (FB9687325)

Pull to refresh is OK if there’s a timeline with new posts on the top (as it was designed in Tweetie) and it 100% doesn‘t disrupt any state, but reloading a webpage is highly disruptive and there is often nothing special about the top. »

15 February 2022

Is there a good resource for seeing a list of App Store storefronts for features & top lists and which language (or maybe languages?) each one uses? Didn’t find a straightforward list but maybe I’m searching for the wrong thing. »

16 February 2022

My number one hope for iOS 16 on iPad: Make Spotlight fast again. »

17 February 2022

Sorry for the Objective-C, but spot this sly bug.

if (x1 < x2) {
    return NSOrderedAscending;
}
return x2 > x1 ? NSOrderedDescending : NSOrderedSame;

»

18 February 2022

In Austria you need to show proof of vaccination at restaurants etc. @pdfviewerapp works really well for this because we implemented not just restoring documents but also where you’re zoomed into, so it always launches showing the QR code and info for my most recent dose. »

The question is: How do you say the ~= operator out loud? 🤔 twitter.com/FloWritesCode/status/1493507891109711875 »

It took my MacBook Pro 3–4 weeks to learn that’s almost always used plugged in. Once it’s decided to cap charging at 80% you don’t need to run it unplugged to get it down to 80%: It’s smart enough to run on battery power even when plugged in to achieve this. Just be patient.

4 days later: Update on the MacBook Pro battery charging limit: After being unplugged and shut over the weekend, it decided to charge from ~79% back to 100% when plugged in on Monday. I feel like this feature to avoid battery degradation would work a lot better if it didn’t try to be ‘smart’. »

19 February 2022

I noticed if I join a new Wi-Fi network with my iPad, my iPhone will automatically connect, but my other iPad won’t and needs the password sharing prompt. I guess this is part of iCloud Keychain? Would be nice if this could work without an alternative internet connection. »

23 February 2022

Yesterday app review reported a bug in @pdfviewerapp, which was much appreciated, but it wasn’t a regression so the rejection was blocking our customers from receiving other bug fixes. I resubmitted the same binary, and it was accepted.

Today we have an App of the Day feature. Much appreciated. ☺️ twitter.com/pdfviewerapp/status/1496510581456711681 »

3 March 2022

Vimeo did this to us too (in 2020). twitter.com/nelson/status/1498370009973723137 »

25 March 2022

Homebrew pushed me into accidentally installing the unnecessary command line tools. I deleted them, but now System Preferences wants to download them again. Searched around but didn’t find an up to date way to stop this. 😔

»

26 March 2022

Want to make a bet on that iOS?

»

29 March 2022

Since iOS 15.0 we’ve been seeing a frequent crash in @pdfviewerapp with UIDocumentBrowserViewController: Trying to prepare a DOCItem in mode 1 without using bookmark and with a nil _wrapper. (FB9735753)

»

Today Apple Maps taught me the Slovak name for Vienna for some reason.

»

Tomorrow I’m going into a European country I haven’t been to before, and it’s not Luxembourg. Woo! »

31 March 2022

There’s an update to the @SlackHQ iPad app that hides the channels list sidebar except in full screen in landscape on a 13" iPad Pro. In any narrower setup (split view or portrait) the sidebar is not shown. For me, this is a huge step back in iPad productivity. »

7 April 2022

The power delivered by the Apple Studio Display’s downstream USB‑C ports is curiously missing in the tech specs. One problem with the LG UltraFine 5k display is these ports only give 5–6W, which is pretty low for an iPad Pro. apple.com/studio-display/specs/

»

12 April 2022

It looks like Safari for Mac website notification settings were migrated into System Preferences but deny was changed into allow for me. Whoops. »

15 April 2022

Wordle 300 6/6

Poorly played; extremely lucky. Down to a 50:50 guess in the last round.

⬛⬛⬛🟨⬛ 🟨⬛⬛🟨⬛ ⬛⬛⬛⬛⬛ 🟩🟩🟩⬛🟩 🟩🟩🟩⬛🟩 🟩🟩🟩🟩🟩 »

19 April 2022

Probably everyone realised already, but when Apple email says

Your certificate will no longer be valid in 30 days. To generate a new certificate, sign in and visit Certificates, Identifiers & Profiles.

No need! Just go to Xcode Preferences > Accounts > Manage Certificates… > +

I’ve been doing what it says and messing about with the Apple Developer website and Keychain Access for years. The new flow with Xcode is about 100 times faster. »

What a sad day

Wordle 304 X/6

⬛🟩⬛🟩⬛
🟨🟩⬛🟩⬛
⬛🟩⬛🟩🟩
⬛🟩⬛🟩🟩
⬛🟩⬛🟩🟩
⬛🟩⬛🟩🟩 »

As an iOS developer, I’m worried about the number of services I use where I chose the website in Safari on iPad over the app. Been like this with GitHub and Basecamp for ages. Recently switched away from the Slack iPad app too.

Even though the feel is often all wrong, so much great UX comes for free with websites: select/copy more text, everything is scalable by default in a more simple way than Dynamic Type, automatic dark mode thanks to Noir, bookmarks, sending what you’re looking at to someone else. »

20 April 2022

It seems a weird choice to me that the iPad Simulator launches showing American news in a widget. I don‘t want to see any news when I’m trying to develop software. »

21 April 2022

Turns out typing “the” two times in a row is a really common typo, mostly in our dependencies but also in our own code.

»

26 April 2022

  1. Pretty sure this app won’t damage my computer because I wrote it.
  2. It was never downloaded because I compiled it.
  3. Is my computer reporting me to Apple as a malware author?

»

27 April 2022

??? twitter.com/swift_leeds/status/1519227179325956096 »

6 May 2022

Is Look Up on the Mac the only keyboard command that acts based on what’s under the mouse? The Define command in KeyboardKit uses the selected text, which seems like the obvious thing to do. (github.com/douglashill/KeyboardKit/blob/8e90bfd742af87994cfd2b6f3dea49a120e7ab6b/KeyboardKit/KeyboardTextView.swift#L9-L19) »

Cheat sheet for updating UIDocumentPickerViewController initialisers from API that was deprecated in iOS 14 since there’s no automatic fix button for this:

init(documentTypes: types, in: .import) -> init(forOpeningContentTypes: types, asCopy: true)
init(documentTypes: types, in: .open)   -> init(forOpeningContentTypes: types)
init(urls: urls, in: .exportToService)  -> init(forExporting: urls, asCopy: true)
init(urls: urls, in: .moveToService)    -> init(forExporting: urls)

»

7 May 2022

Our app @pdfviewerapp just prompted me for a rating on the App Store despite me having these disabled system-wide in the Settings app. And then the Submit button was disabled. »

10 May 2022

11 May 2022

The discontinuation of the iPod touch is the discontinuation of one-handed computing for most people. I don’t know of anything else that size on the market anymore. kottke.org/09/10/one-handed-computing-with-the-iphone »

15 May 2022

Probably kind of niche, but I’d very much like a USB-C to Nintendo DS Lite charging cable. The trouble is the USB-C spec was published 3 years after the DS was succeeded by the 3DS. »

17 May 2022

London 🚆 Brussels 🚆 Cologne 🚆 Berlin »

20 May 2022

If you use Universal Control across two devices with different settings for which side of the Magic Mouse is secondary click, it takes the setting from the host Mac, not the device you‘re interacting with. Makes sense because this depends on where the mouse is in front of you. »

24 May 2022

I sort of get the idea, but I don’t understand why these ads in Apple Maps are so visually prominent and irrelevant to me.

»

25 May 2022

Berlin 🚆 Prague »

1 June 2022

7 years at @PSPDFKit »

2 June 2022

Vienna 🚆 Nuremberg 🚆 Frankfurt 🚆 Brussels 🚆 London »

3 June 2022

Hoping iOS 16 has API to show a menu programmatically. 🚀👩‍🔬 »

6 June 2022

That animation when you unsend a message. I just want to send and delete to see it. »

Drag and drop for dogs! »

OK an app I’m not using just randomly asking permission in the middle of the keynote. 🤷

»

What if I want a Twilight MacBook Air? »

Please can I have handoff for Zoom too? »

Change filename extensions 🤯 »

15-inch iPad to go with this? »

The really really thick borders around apps with Stage Manager looks nice, but seem like a massive waste of space. Am I the weird one for making windows fill the height of the screen? »

Xcode 14 needs macOS 12.4, but Software Update doesn’t show it. I guess I’ll call it a day.

29 minutes later: Fixed the bad Software Update cache with softwareupdate -l

29 minutes later: This doesn’t seem fully thought through. 😅

»

I really hope the new find UI in text views on iPad also comes with cmd-E and cmd-G support. Even better with a find pasteboard shared across apps. »

8 June 2022

Is there a straightforward way to check the base SDK for conditional compilation in Swift? Assuming the macOS update comes out in October, that means our project needs to compile with both the old and the new SDK for 1/3 of the year. »

Best lab »

For WWDC labs, did anyone try sharing the Webex link with a teammate to add them? I presume this works, but didn’t try it before. »

9 June 2022

There was background noise.

I thought it was raining.

But I realised it was my MacBook Pro’s fans from the clean build I started three minutes ago.

Easy to forget the fans exist. »

10 June 2022

Do I win a prize?

»

I’m still impressed and amazed by how well remote WWDC labs work. It doesn’t make sense how it’s possible to do a lot of labs and yet I’m pretty sure I’m getting the best person to answer my questions in almost all of them. Brain filled! »

12 June 2022

Just withdrew cash from my @monzo account for the first time after using the account for years. Cashless transition is going pretty well in the UK. »

13 June 2022

If someone changes their Apple ID email address, that person needs removing and re-adding to all iMessage threads. Otherwise it’s a silent black hole. »

16 June 2022

I didn’t know that UIBarButtonItemGroup — the API used for centred navigation bar buttons and user toolbar customisation on iOS 16 — has actually been around since iOS 9. For the last 7 years, it was only for the text input bar. developer.apple.com/documentation/uikit/uibarbuttonitemgroup »

26 June 2022

Tempted to install the iOS 16 beta just so I can open the Apple Feedback app in a normal way instead of needing to do a weird trick using a shortcut to open a secret URL. »

28 June 2022

Looking forward to being back putting on another NSLondon! (iOS developer meetup in London) twitter.com/NSLondonMeetup/status/1541419500918145026 »

29 June 2022

Despite using @_readingapp for years, yesterday was the first time I encountered an XHTML page. My parser was treating it as plain text because it turns out the Uniform Type Identifier public.xhtml does not conform to public.html. Interesting question: Is XHTML a type of HTML? »

1 July 2022

If you use the excellent Xcodes app, you probably want to make sure your backups are skipping ~/Library/Application Support/com.robotsandpencils.XcodesApp/ (github.com/RobotsAndPencils/XcodesApp) »

3 July 2022

I had no idea that when you make a bank transfer, your postal address might be sent to the recipient. Seems pretty bad from a privacy point of view that this isn‘t made clear. (This is with @n26, a German bank.) »

6 July 2022

Is it just me, or does Mail on iPad on iOS 15 lose the message you were writing about half the time for anyone else, often also bringing down the whole system? »

7 July 2022

It was fantastic to run @NSLondonMeetup yesterday at Deloitte Digital, and it means a lot to me that several people have offered to help out with organising the meetup. We need to build the community back up after all the lockdowns! »

11 July 2022

Great post from @steviki looking at how we took the time to perfectly recreate the (newer) iOS text selection magnifying glass using view snapshots. pspdfkit.com/blog/2022/replicating-ios-text-magnifying-glass/

OK the video I attached had the correct aspect ratio. Tweetbot or Twitter has stretched it. 🤷 »

13 July 2022

Good to see Google Calendar is a well-polished cornerstone of operations all over the world, sending out invitations for events at “once”.

»

1 August 2022

Has anyone else seen Spotlight on iPad became sometimes painfully slow (5+ seconds) after iOS 15? Thinking about trying to retrain my muscle memory to go to globe-shift-A (App Library) instead of cmd-space but App Library search doesn’t auto focus the first result. »

3 August 2022

I wrote a little post about a simple workaround for an issue we saw in SwiftPM. Read those error messages carefully! Read more »

9 August 2022

This should be a fun event tomorrow. It’s great seeing the enthusiasm of our new NSLondon organisers. twitter.com/NSLondonMeetup/status/1557103221591638016 »

10 August 2022

Weird thing: in the last few iOS versions, when my devices with home buttons boot, they ask for the passcode but don’t show the keyboard. You have to press the lock button then wake it up again to show the keyboard. »

13 August 2022

I found @_readingapp crashing opening an incredibly long article (a book) but only in landscape. It was a stack overflow. Fixed by changing from recursion to a loop. Feels like a student assignment, but there you go.

@_readingapp Surprising this didn‘t come up before, but I suppose I just never opened an article needing over 1000 columns before. Even most books are shorter than this. »

14 August 2022

Hmm there are already ads in Maps (guides), Books (for other books) and TV+ (for other TV+ content). twitter.com/markgurman/status/1558846839746506752 »

16 August 2022

Woohoo a spot opened up at @NSSpain from the waitlist. Bought my ticket! Perfect timing since I’ll already be nearby-ish in Portugal. »

17 August 2022

Road trip time! London ⚡️🚙 Lisbon

1 week later: Setting off on the final leg of my journey south, Salamanca 🇪🇸 to Lisbon 🇵🇹. Time for the #pspdfkitretreat. »

5 September 2022

Sounds like all apps with in-app purchases need to update their UI conditionally for Croatia to show prices in both euro and kuna and state the conversion rate. Would have been nice if Apple could have handled this, but I guess 15/30% isn’t enough to cover that. »

7 September 2022

We’re at the point where I never have or will own an iPhone with a notch, just like 3D Touch. (Still using my 1st gen iPhone SE.) »

Why is iPhone “Pro Max” and other stuff is merely Max. »

8 September 2022

As expected, the Xcode 14 release candidate reverts to the macOS 12 and Catalyst 15 SDKs. To get your Swift code compiling for both iOS and Mac:

#if canImport(RoomPlan)
// Use iOS 16 or macOS 13 API
#endif

It’s a bit more obvious in Objective-C:

#ifdef __IPHONE_16_0
// Use iOS 16 or macOS 13 API
#endif

We’ve been doing this since June so our code compiles with any of Xcode 13, Xcode 14 beta, and the Xcode 14 release candidate. »

Problem: Magic Mouse connected to MacBook Pro lags when MacBook Pro is playing audio through AirPods.

Solution: Use other Magic Mouse connected to iPad Pro to control the MacBook Pro using Universal Control.

Stupid, but it works. The improvement in responsiveness is enormous. »

I’ve been seeing so many tweets from @IOSDEVUK and missing you all. 👋 from Portugal. »

12 September 2022

☑️ KeyboardKit updated for iOS 16 and Xcode 14 github.com/douglashill/KeyboardKit/blob/main/CHANGELOG.md »

13 September 2022

Definitely get in touch with @ivancantarino to meet up if you’re around Porto! twitter.com/ivancantarino/status/1569621371226886144 »

Sad to have left Portugal but excited to be on my way to @NSSpain. Stopping in León today; arriving in Logroño tomorrow.

Also it’s raining lots. This might be the most rain I’ve seen in 2022 so far. »

15 September 2022

Good first morning to kick off @NSSpain with talks by @merowing_ @basthomas @HiraleeMalaviya and @flarup. That icon archeology slide is fantastic.

43 minutes later: A talk about swizzling. Perfect. (This is @jfahrenkrug at #NSSpainX.)

»

16 September 2022

“We’re not doing rocket science; it’s just a table view” #nsspainX »

I’ll just share this without context #NSSpainX

»

And now it’s tapas time #NSSpainX

»

29 September 2022

My main hesitancy about trying the iOS 16 beta on my iPad Pro is how much slower and less stable iOS 15 has been compared to iOS 14.

Specifically: Spotlight sometimes takes ~8 seconds to return any results; springboard sometimes crashes when pasting text; everything starts crashing sometimes after composing in Mail — needs a reboot to fix. »

3 October 2022

In Swift, when casting to a specific subclass and you’re sure you should have either that subclass or nil, would you assert this with as! or treat the wrong type the same as nil?

as! SomeType?

as? SomeType

»

Getting another round of App Store rejections because our code references top-secret Apple function names like addToGroup, setupView and… updateItem. Only Apple — at the intersection of software, hardware and the arts — could conceive of updating items. »

7 October 2022

100% this twitter.com/krzyzanowskim/status/1578336086526693376 »

9 October 2022

I’m interested in the Apple Watch Ultra (would be my first watch) but it’s not compatible with my iPhone, so it’d be a high cost, and I’d lose one-handed computing. »

10 October 2022

We’re looking for an experienced iOS developer to join my team at @PSPDFKit. Nice place to work. Fully remote by design. Unusual challenges making an SDK. Willingness to use both Swift and Objective-C is necessary. pspdfkit.bamboohr.com/careers/80

(We’re potentially also opening up an iOS internship soon. Need to get a few things sorted out.) »

I thought this existed, but never managed to find the API. Probably because this is a top-level function rather than a type with an initialiser, which isn’t what I’d expect in Swift. twitter.com/kyleve/status/1575353657825972224 »

12 October 2022

Looking forward to heading up far north to the very centre of the UK for @swift_leeds next week. »

17 October 2022

Fabulous! Firebase Crashlytics now shows the author of each comment posted on a crash. No need to prefix comments with your name any more. Older comments (pictured) show as from “Project member”.

»

18 October 2022

I will probably buy the new iPad Pro because I spend about 1/3 of my life on 2018 iPad Pro, and I could really do with more performance for Slack in Safari. Should be a better version of my favourite computer ever.

That said, it’s a shame they made the new iPad Pro look bad by fixing the front-facing camera position on the regular iPads but not on the Pros. »

25 October 2022

No luck with the macOS Ventura installer. It either hangs at launch or otherwise gets stuck after clicking the first button (without hanging). »

26 October 2022

This sounds like in practice it might be easiest to just try one volume button and then go for the other if volume goes in the wrong direction. What if the iPad is flat? What if it’s in a stand facing away from you across a table? twitter.com/rosskimes/status/1585375120323149824 »

28 October 2022

Anyone else seeing a crash from _UIShareServiceProxyRaiseInvocationUnsupportedForInstance?

Attempt to invoke -_activityImage on <_UIShareServiceActivityProxy_Share>, which is not supported for proxies to out-of-process activities.

We’re seeing this from iOS 15.5–16.0. »

Wouldn’t it be nice if App Library showed app names? twitter.com/rjstelling/status/1586101018084843521

»

14 November 2022

brb just checking something in my copy of The C Programming Language by Kernighan and Ritchie »

8 December 2022

Getting mixed messages here. Not sure if our Apple Developer membership will renew or expire later today, which would be nice to know.

»

12 December 2022

New in KeyboardKit: SwiftUI KeyboardShortcuts for common actions:

Button("Delete") {
    // Delete something
}
.keyboardShortcut(.KeyboardKit.delete)

Now the user can press cmd+delete to trigger the button. Thank you @Iamsebj for the contribution! github.com/douglashill/KeyboardKit#swiftui »