Changelog: Giving Way

A hand ticking items off a checklist.

Photo by Jakub Żerdzicki on Unsplash

The last changelog went out on 18 August. Since then I have shipped 226 releases across twenty-five apps, which is more update prompts than anyone deserves, and I owe you an explanation for them.

Some of it already has a post of its own: the open source contributors who keep finding what I miss, the dark mode and the contrast checks that followed it, retiring SpaceMan, and how I test things by looking at them. This is everything else. Most of it is macOS 27.

macOS 27 moved the furniture

ActiveSpace switched spaces instantly, using a synthetic trackpad gesture and a direct system call. macOS 27 ignores the first and half-honours the second: the space counter moves and your windows stay where they were, which leaves you on a desk you cannot click. 2.2.0 stops switching spaces itself. It sends the Mission Control shortcut macOS already has for the space you picked, and lets macOS do it. Around 1,500 lines went in the bin, including a virtual display that existed only to support the old trick. If you use it, open Settings once: there is a new section that turns on any shortcuts macOS is missing.

MenuTidy hid icons with an invisible spacer that pushed its neighbours off the edge of the bar. macOS 27 draws the whole menu bar as one window, so there are no neighbours to push. 2.2.0 asks macOS to do the hiding instead, and the system reflows the bar itself. Håvard reported it on the day macOS 27 shipped, and the lead that fixed it came from the same thread. Reveal Hidden Icons is gone on macOS 27, because macOS now has its own.

WindowPin forwarded your clicks and scrolls into the real window behind a pin. macOS 27 no longer lets one app do that to another. 2.2.0 asks the pinned app to move its own scroll position, and a click now takes you to the real window. It also stopped a pin stealing your keyboard focus, and it no longer writes window titles to a world-readable log.

On macOS 14 to 26, all three behave as they always did.

The newspaper stopped asking WebKit

Jorvik Daily News shows you an article by pulling out its text. For a long time it rendered that text in a hidden web view, and on macOS 27 the web view simply stopped answering. The page would be ready and WebKit would report it 10% loaded. Or the renderer would die and send no signal at all. Or it would refuse to load anything into a view that was not on screen.

I fixed each of those in turn, across more than a dozen releases, and I have to thank @thechurchofthechad-dotcom for logs that made every one of them visible. Then 1.5.0 stopped using a web view at all. Articles are now drawn natively, straight from the extracted text, and there is nothing left in the reading path that can stall without saying so.

1.5.0 is also sandboxed. Your feeds and read marks move across once, automatically, on first launch. Everything the app parses comes from somewhere it does not control, so I put it through four adversarial security reviews, and the fixes are in. 1.6.0 adds a line when one of your feeds has gone quiet, and it now reads two-digit years in feed dates correctly.

Three screensavers were arguing with themselves

This one was mine, not Apple’s. macOS 27 announces a change of screen layout a few milliseconds after a full-screen window appears. Rainy Day, ASCII Saver and Save Cannes each rebuilt their window when they heard that, and the rebuild caused the announcement again. Rainy Day was rebuilding about 30 times a second, so it never reached the timer that changes the scene. All three now check whether a display actually moved before doing anything.

While I was in there, I tightened how they behave around the lock screen. None of them starts while the Mac is locked, and dismissing one makes sure the screen does lock when you have asked for that. Rainy Day and Save Cannes no longer ask for Accessibility at all. All three can be suspended, and they stay out of the way during a call or a film.

Save Cannes grew the most, much of it from Christophe (@christobaldo): a separate source for each display, auto dismiss, and an art mode that plays on just one screen.

Things every app stopped doing

On macOS 26 and later, the menu-bar apps could open an empty Settings window at launch, and command, opened a second one. That came from a placeholder SwiftUI insists on before it will build an app. The placeholder is gone, and 阿菜 Cai deserves the credit for finding it.

Every app also dropped an entitlement it no longer needed, the one that let a helper library load without being signed by us. They are all signed by us now.

The shortcut recorder is one shared control across the suite. A shortcut can be cleared, a bare F-key can be a shortcut on its own, and pressing a shortcut that is already set no longer fires it. Settings captions now sit inside the row they describe.

That is most of what changed in Ballast, Browser Notes, Calendar Upcoming, ClipMan, CopyLens, HawkEye, MirrorGuard, RainbowApple, Reverie, ScreenLock, Citadel and Strataris. Ballast also remembers where you left its visualiser again.

Smaller things

Lookout keeps better time and a better list. Relative timestamps no longer freeze, a check that fails and then passes drops off, a reaction counts as a reply, and discussions on repos you own are now included.

Kairos End Early now works on a schedule that has not started yet. It used to report no error and change nothing.

QuitProtect has a properly tested quit sequence and recovers when its event tap is disabled, most of it Cai’s work. ShortcutHUD remembers where you put it.

HyperCaps now does something useful with media keys. Hold caps lock and press one, and your apps receive Hyper plus the function key it is printed on, so caps lock⏮ can be bound like any other shortcut. Browser Commander learned to go back and forward from a Hyper shortcut as a result.

One thing you may need to do

If you have HyperCaps 2.0.18 or Browser Commander 2.1.9, those two builds went out missing a piece of the updater, and they cannot install anything newer by themselves. That was my mistake. Please install HyperCaps and Browser Commander once from the download page, or with brew upgrade --cask --greedy, and updates work normally from then on.

The theme, if there is one

A lot of what I build works around macOS. It fakes a gesture, pushes a window, hosts a browser nobody sees. That is fine until the operating system changes, and then every workaround is a thing that breaks.

The fixes that held up this month were the ones where I stopped. ActiveSpace sends the shortcut, MenuTidy asks the system, the newspaper draws its own text. Each one is less code than what it replaced.

Giving way still needed checking, though. The security reviews kept finding faults in the previous day’s fixes, and the two builds in the section above came out of a release I thought was routine.

Everything above is out now, through the built-in updater, the download pages, or Homebrew.