Friday, June 5, 2026

Sirius Pomodoro

Zac Hall:

The third most popular free iPhone app in the U.S. App Store today is a mysterious productivity app that’s only available in Russian. That’s a pretty obvious red flag that something isn’t quite what it seems.

[…]

The app icon looks similar to a star mapping app. The app itself isn’t available in English. It seems unlikely that this productivity app organically found its way to the third-place ranking for its advertised purpose.

[…]

The reality seems to be that the app is a Russian banking app disguised as a Pomodoro timer. Activity on Telegram this week points to the app actually being a client for Russian financial institution VTB Bank.

Nick Heer:

In Russian media, the developer says there are other apps lined up to take the place of this one after it is inevitably removed.

Previously:

CloudKit Bugs in May 2026

Jaanus Kase (Mastodon):

We deployed direct silent CloudKit notifications in Tact in late 2024. They proved to be too unreliable to use in a messaging app like Tact: notifications arrived late or not at all. To be fair, this is within the bounds of the Apple SDK contract, which does say that the delivery of silent notifications is on a best-effort basis, and you can expect a lower service level than with visible notifications.

Since Tact is a messaging app where users do expect to be notified of new messages reasonably fast, Tact in May 2026 switched to visible notifications delivered from CloudKit. Those do work reliably and fast, but the user experience is not as fast as it could be. CloudKit has several bugs in this area, and the bugs compound.

So this is simply an inventory of open bugs filed to Apple around the area of CloudKit, notifications, and the related developer experience, as of May 2026.

Previously:

Permissions in the CloudKit Public Database

Guilherme Rambo:

When using the public database for content hosting or feature flags, you don’t want any random iCloud user to have the rights to publish or edit content on your behalf or to change the feature flags that control your app’s behavior for all of your users, that would be really bad.

That’s where CloudKit’s security roles come in. You can think of them as Unix access control groups for record types. They allow you to restrict the types of operations that users belonging to a given group (security role) can perform on any given record type, and you can then assign security roles to specific users.

[…]

The creator role means “the user who has created this record”. So it’s possible to allow any authenticated user to create a record of a given type in the public database, but not read or write to any record other than the ones that they have created themselves.

[…]

But the most interesting thing about security roles for content hosting and similar applications is that we can define our own security roles and assign them to specific users.

Simon B. Støvring:

So can we actually use CloudKit’s public database to store user-specific and/or sensitive data without it being widely available? So it’s more like a traditional database an app can build functionality on?

Can anyone confirm this?

If that’s the case, I’ve totally misunderstood the public database for years. I have always considered it suitable only for sample data and other data meant to be broadly accessible without auth.

Moritz Sternemann:

yep correct! That’s the conclusion I also came to when working more with CloudKit a while ago. You can definitely have data in the public database that’s only readable by the user who created it.

Jaanus Kase:

The main distinction for me is, who owns the data

Private db: user owns data, I as developer literally have no way to access it. Also it’s counted towards the user’s iCloud storage quota

Public db: I as developer own the data, and my app has storage quota not tied to any user

Thursday, June 4, 2026

WWDC 2026 Preview

Joe Rossignol:

Apple’s annual developers conference WWDC returns for 2026 next week, and the company has teased the event with a new “All systems glow” tagline.

Clarko:

“We’re keeping Liquid Glass, you weiners”

Joe Rossignol:

Apple has shared a wallpaper, playlist, and a “Get Ready” video ahead of the event.

Basic Apple Guy:

I’ve been Sherlocked.

Jason Snell:

I’ve been attending Apple’s WWDC since sometime in the 90s, which is… a long time. But this year’s event promises to be one of the most interesting ones yet, mostly because Apple really stepped in it in 2024, promising a bunch of features it didn’t deliver. Last year was a bit of an apology tour, but it didn’t directly address what had been promised the previous year.

Which means that Apple has really piled two years of promises on the agenda of WWDC 2026. The stakes couldn’t be higher. Here’s what I’ll be watching for at this year’s event, especially when it comes to its AI do-over.

Dave Mark:

For me, 2 big questions for WWDC:

Will there be enough actual, proper working Siri/AI features to keep people from migrating to other platforms?

And will there be enough AI privacy gains to pull people from other platforms?

John Gruber:

The annual live audience episode of The Talk Show during the week of WWDC.

Jordan Morgan:

The 12th annual Swiftjective-C pregame quiz is here!

Brendan Shanks:

Has Apple eliminated one-on-one labs with engineers this year at WWDC?

Adrian Schönig:

That was the best part. What a bummer.

Juli Clover:

Apple has announced the winners of its annual Apple Design Awards.

Apple’s page doesn’t have a permalink.

Jason Snell:

These days, I’m getting emails pitching me for an endless stream of new Mac apps. It’s quite remarkable because there was a period five or ten years ago when it seemed like all app development on Apple’s platforms was focused on iOS. Even more interesting, these are all indie Mac apps that seem to be built using native Mac frameworks, not the product of big corporations that are just rolling their cross-platform development system out everywhere. These apps seem to have a point of view and are focused on the Mac.

Of course, it’s happening because of AI.

[…]

And, yes, a couple of weeks ago, I made a Mac app of my own [Double Ender], using Claude Code. I can’t say that I wrote it, because I didn’t write a line of Swift code. It would be more accurate to say that I envisioned it, or produced it, or product-managed it. I knew what I wanted, described it in detail to an AI assistant, iterated a whole lot, and ultimately got something that basically does everything I imagined it would do.

[…]

The Xcode learning curve is just too high. Either there needs to be a novice mode for Xcode, or Swift Playground needs to be given a boost, or a new tool needs to be built for the task.

D. Griffin Jones:

It is time for us on the Cult of Mac podcast to lay out our predictions for Apple’s WWDC26 Keynote.

Simon B. Støvring:

In just a few days, Apple will kick off WWDC with their keynote and introduce Vaporized Glass, a design language centered around hiding UI. You can’t complain about illegible controls if users can’t find them in the first place.

Previously:

Update (2026-06-05): Basic Apple Guy:

It’s nearly time for WWDC26, which means it’s time to make my annual bingo board of predictions, prognostications, and presentation ponderings ahead of this year’s keynote.

Jesper:

The two biggest issues facing Apple right now:

  • A software operation in shambles. The macOS desktop has forgotten what it is, cosplaying as a mismash of borrowed attributes from other OSes, that look the way they do because they serve different form factors and different needs. And software quality has gone down the tubes.

  • Borderline open warfare between its own desire for control (and possibly money, through the proxy of “maintained margins”) and the needs of its developers.

Xogot for Mac Beta

Miguel de Icaza and Joseph Hill (tweet):

Xogot was born as a native user interface shell on top of the Godot game engine for iPad devices, and later iPhone devices.

[…]

Because Xogot’s user interface was written in SwiftUI, and because we had already committed to Apple’s design system, bringing Xogot to macOS felt like a natural next step. That does not mean it was automatic. We still had to adapt many parts of the interface, study modern Mac applications, and rethink details so Xogot would feel true to the platform and the modern idioms on the Mac.

[…]

Our goal is for Xogot to feel like a professional creative environment for game developers: a tool for building games with Godot that can sit comfortably alongside the apps in Apple’s Creative Studio, like Final Cut Pro, Logic Pro, Motion, and MainStage, as well as the other first-class creative and development tools Mac users rely on.

[…]

Our goal is to make running your game on an Apple target feel as simple as choosing the target you care about and pressing play. Want to share your game with friends on a Mac? You should be able to package it up without needing a PhD in certificates, signing identities, and provisioning profiles. Want to test on an iPhone? Xogot will handle the packaging, signing, deployment, and device connection details so you can get your project running and start debugging without fighting the toolchain.

Via Jamie Birch:

This is the most complex (yet well crafted) native Mac app I’ve seen in years. They say it’s SwiftUI, but didn’t clarify whether it’s targeting UIKit for Mac or AppKit – but either way, it’s amazing to see a team build an app on the scale of Xcode from scratch these days.

Previously:

Where Did SwiftUI Leave You Hanging?

Keren R. Bell:

This is a call to join the topic-of-the-month for the Swift Blog Carnival!

[…]

What do you LOVE about SwiftUI? What boggles your mind about it?

David Bureš:

.sheet is STILL not animatable (a feature since the first OSX release)

[…]

Toolbar item placement is completely broken.

[…]

.searchable is a complete mess that shouldn’t be a thing at all

[…]

Due to a conflict between List’s aggressive view destruction on scroll, and the way .task works, the millisecond a view that calls an API to load and parse a short string disappears, that already parsed string gets de-assigned. Once that particular list item appears again, it has to perform the extremely expensive API call and parsing again. Instead of just saving a 10-character string to memory. […] This leads to funny bugs, such as scrolling too fast through a list that’s made up of only text making the whole Mac freeze up and crash

Patrick McConnell:

SwiftUI is just too incomplete, inflexible and inextensible. It’s also great and that’s what makes this so frustrating.

[…]

Developers used to get Sherlocked when Apple would copy a third party apps features into the OS or packed apps. Now we get road blocked where only Apple can make use of a feature leaving us on the outside left trying to explain to users why Apples app has feature X,Y and Z and we don’t.

[…]

In a framework built on containers and modifiers just don’t go too deep into those containers or things may just break. Often this means your UI simply stops rendering on the screen. You may think you’re not doing anything wrong and then boom your code just doesn’t work.

[…]

Over the years we’ve all seen frameworks offering to create apps with no code or allowing you to write in your favorite language and run on all platforms. There were demos showing it working. None of those ever seem to pan out. They always come up short or perhaps they allow you to shoehorn in some native code to do something the framework authors don’t provide. If this sounds familiar this is what Apple is offering with SwiftUI. Looks impressive in canned demos, often falls short but you can just drop back to your old coding ways to fill in the blanks. I’ve always viewed this as a bunch of incomplete hacks. Now this is Apple standard practice.

[…]

I want SwiftUI to be so much more than it is currently. I want to make real Mac apps with it. I don’t want an iPad app in a Mac wrapper.

Mark Szymczyk:

I encountered the following limitations with SwiftUI:

  • Limited rich text editing experience.
  • The file exporter returns a folder URL when exporting to PDF.
  • SwiftUI lets you save documents in unwanted export file formats in Mac apps.

Nathan Manceaux-Panot:

Despite this simplicity, the first implementation of that list was shockingly badly-behaved. It was:

  1. Extremely slow (scrolling would cause multi-second freezes!)
  2. Visually broken in multiple ways (you’ll see)

[…]

This was honestly very entertaining code to write! I think it’s especially fascinating how it’s essentially imperative code, expressed through declarative modifiers. It’s an absolute mess to read, because on top of that mismatch between behavior and expression, respecting view tree constraints forced an unnatural order for everything. Glorious, and dismal.

[…]

And at the same time, it’s a maddening amount of work for such a basic user interface.

Sarah Reichelt:

Recently, I have seen multiple posts on Mastodon suggesting that SwiftUI is a failure, that nobody is using it, and that Apple should have focused on improving or replacing AppKit and UIKit instead of wasting everyone's time with SwiftUI. While I have great respect for some of the people saying these things, I disagree. I love using SwiftUI, I think a large number of developers are using it, and I want to explain what I find so great about it.

[…]

The reactive aspect of SwiftUI feels like magic! It allows me to have something like a stored setting with a default value, connected to a menu item with a checkmark, a toggle in a settings window, a button in the toolbar, and a switch on the main interface. SwiftUI keeps these all in sync without any effort on my part.

[…]

The AI proponents argue that if AI is writing all this verbose code, then there is no need for the more concise SwiftUI. While I have started using AI to write some code, I still review every line and the more the AI writes, the harder this becomes and the more likely it is that there will be un-detected bugs.

[…]

I don't want to imply that I think SwiftUI is perfect. I have struggled with various aspects of it, and I have had to find workarounds for some things that I want to do. Partly, this is due to the buggy nature of Apple software at the moment, but as someone who primarily works with Mac apps, I am feeling the pain of the lack of attention to the Mac. Again, this is not a SwiftUI problem, but a general Apple problem.

Ziga Dolar:

After shipping three small apps with SwiftUI (and actively working on the fourth), I’ve come to a simple conclusion: SwiftUI is great for narrowly scoped small apps.

[…]

Getting from zero to a working app that doesn’t look like a mess was incredibly fast - which helped with staying motivated. For me at least, being able to see interactive progress is part of what drove me to build apps, and SwiftUI makes that feedback loop a lot quicker (and since I struggle with staying motivated, that’s a big win).

[…]

Handling routing in SwiftUI is easier with a router and an enum of all main navigation destinations, that can easily be navigated to from anywhere.

And if you add a new screen or flow without handling it, the code won’t compile, so the compiler makes sure that nothing gets missed.

[…]

SwiftUI didn’t make me a better developer or remove complexity from app development. But it removed enough friction that I started shipping ideas again.

Keren R. Bell:

I still maintain my personal opinion which is, it’s ok that there’s some expectation to dip back to UIKit / AppKit, but yeah, Apple needs to stop shouting “SwiftUI all the way!” at us when it can really only do anywhere from 40%-70% of the way.

[…]

We love SwiftUI. It’s awesome, fast and simple. The allure of highly legible, nearly-natural-language interface writing is strong. But we don’t have to let our love and hopes for SwiftUI limit us: It’s one tool in a big box. It’s ok to use the ol’ WKWebView here and there.

Max Seelemann (Mastodon):

SwiftUI shipped in 2019, seven years ago. At WWDC 2022, Apple put up this infamous claim during the State of the Union[…] Here we are in 2026, right before another WWDC, four years and four major release cycles after that claim. How well does it hold today? In my opinion, we’re not even close. Modern SwiftUI can do a lot. But it’s still riddled with inexplicable bugs and weird limitations that prevent developers from building truly great experiences. Or at least, experiences that match system behavior.

[…]

Example 1: On iOS, SwiftUI can’t autofocus a text field in an appearing sheet to bring up the keyboard in the same animation.

[…]

Example 2: On macOS, drag & drop is essentially impossible to get right. Seven years in, we’re on the third major iteration of drag & drop in SwiftUI. […] Yet you still can’t have it all at once: reorder inside and drag out of the same view, plus drop validation when items may not be accepted, plus defining which drop operation (copy / move / link) a destination would cause. Let’s not dare to think of allowing Option to toggle between “move” and “copy”.

[…]

I believe Apple should tap into this invaluable resource of skilled developers with affection for its platforms and open-source SwiftUI. Sounds crazy. But is it? Swift has been open-source for years now, to great success. Let’s explore the thought, shall we?

Colin Cornaby:

This is not the only call for open source SwiftUI I’ve seen so I’m not trying to pick on it.

But my understanding is that SwiftUI cannot become open source. It touches too many private APIs. Even on platforms like macOS it’s no longer really a wrapper for AppKit, and it’s reaching deeper and deeper into private frameworks.

Previously:

Wednesday, June 3, 2026

WWDC 2026 Wish Lists

Daniel Andrews:

If that’s true, here’s what I’m hoping for: fix Liquid Glass on the Mac where it’s genuinely bad. Not a cosmetic tweak, a real rethink of the parts that trade usability for novelty. Bring back some intentionality to the design. Focus on human interaction, stability and speed as primary goals, not footnotes in the release notes. Do small, meaningful things for developers. It’s just one cycle so my hopes are pretty low. But just directional progress and iteration.

Brian Webster:

It’s insane that there’s no way to programmatically create/modify a shortcut. I’m really hoping this gets fixed at WWDC this year. 🤞

[…]

I wish for a headless, agent-first Xcode Server in the menu bar — exposing every UI-only operation as MCP (including the .xcodeproj-mutating ones), queueing builds across projects, and running nightly maintenance on sims and derived data.

Cihat Gündüz:

Here are five things I most want them to ship — the gaps slowing me down most in the era of agentic engineering.

Jordan Morgan:

Consider this — each dub dub session which presents a new API comes packaged with a skill.

[…]

Depending on who you ask, MCPs are amazing or terrible token wasters on their way out. Regardless, I’d love a direct, official line to Apple’s docs.

Krishna Sadasivam:

Apple made no secret that it will be dropping Intel support with macOS 27. Does this bode well for a “Snow Leopard” type release? I really hope so. Renewed focus on software quality would be a strong overture to developers and users alike. Fix bugs and improve performance!

My wishes from last year still stand. I’m not holding my breath for a better designed Systems Setting panel. I also think that Liquid Glass is here to stay, despite the backlash it’s received. I’m hoping Apple will include more options for users to customize the color for both the windows and the Dock.

While I am excited about potential software quality improvements, I remain ambivalent about Apple’s AI push. I see some beneficial value in AI, but I don’t want it to be rammed down my throat.

Steve Troughton-Smith:

I wouldn’t mind some qualitymaxxing at WWDC.

Antoine Van Der Lee:

While I already mentioned an MCP example and we already have an Xcode MCP and CLIs, I just wish for Apple to continue supporting agentic development.

[…]

Similarly, I think they can further open up developer tooling. Apps like Icon Composer and Xcode Instruments don’t work well with agents today and can be further optimized for integrations. Updating App Store Metadata, archiving, and publishing a new release: to automate these, we still have to do a lot of work ourselves. Yes, there’s Xcode Cloud, but I believe this process can be optimized even further with agents.

Majid Jabrayilov:

We already have on-device image generation using the ImagePlayground framework. Why not have image analysis as part of Foundation Models? I think it is the most expected feature along with increased context size.

[…]

Layout protocol is great and allows us to build super custom layouts from flow layout to hexagonal layout. One thing it is really missing at the moment is the option to make it lazy, like LazyVStack or LazyHStack.

[…]

Another important feature I expect almost for three years is the recycling view in SwiftUI. At the moment, all views are displayed eagerly or lazily, but there is no reusing mechanism like in UITableView or UICollectionView.

Joel Breckinridge Bassett:

As outlined years ago, the history of Apple’s text layout architectures has been very convoluted and without any long term vision for some time now. When I ran across Artem Loenko’s post, ‘Native all the way, until you need text’, my first reaction was ‘that’s what happens without a unified vision’. Nobody at Apple seems to be asking ‘where can we take customers and developers?’ The difference in Apple Pay Wallet and text teams is striking. Loenko outlines the basic problem of using TextKit 2[…]

[…]

This is the state of Apple Pay Wallet since the arrival of iOS 18.1 NFC & SE Platform. The only real change needed for 2027 is the expansion of UWB support in CCC digital car keys to include recent UWB FiRa Consortium spec developments in Mobile FeliCa, Mobile MIFARE and Aliro. This would allow UWB Express Mode use with transit cards, hotel keys, home keys, office keys and ID badges.

Fatbobman:

But this year, at least by the time I was putting together this issue, there seemed to be noticeably fewer such posts than around the same time last year. […] Perhaps the issue isn’t a lack of anticipation, but rather that the traditional format of a wishlist is no longer quite sufficient. […] We hope to see updated features, more stable frameworks, and a clearer platform direction.

Sarah Reichelt:

I had not noticed the vanishing WWDC wish lists until you mentioned it, but I had felt no desire to write one this year. We haven’t even got stability in the OS 26s yet and within a couple of weeks we’ll get betas of OS 27s which cannot be any better unless Apple has scrapped 26 and built 27 on top of older, more polished versions. This sounds incredibly unlikely, so they will be piling bugs on top of bugs and hoping nobody notices.

Helge Heß:

I think my top wish for #WWDC would be ways to properly integrate the SwiftNIO event loop into the concurrency runtime (so that async/await can be used w/o hopping threads all the time). Or maybe just make the NIO event loop part of the concurrency runtime in the first place.

Tony Arnold:

My WWDC wishlist? A new, simpler, directly editable Xcode project file.

I’m duplicating a target today for an AppStore vs Direct Distribution variant, and Xcode crashes when I try to duplicate the target via the UI.

So yeah, easier to maintain project files would be a very welcome addition.

Howard Oakley:

It’s now almost a year since we got our first glimpse of Tahoe at WWDC 2025, and eight months since it was released to the public. Despite widespread outcry and detailed criticism, it has changed remarkably little. If you were unconvinced of its merits last September, I see little here that’s likely to persuade you otherwise. The only remaining question is whether, in the razzle of WWDC, Apple will do anything substantial to relieve the dazzle on our displays. I fear I already know the answer.

Warner Crocker:

iCloud syncing. Just make it reliable and give us Sync Now buttons. We get one is Messages. How about the rest of the core apps?

Perpetual Betas: I know, and respect that Apple is continuing to work on each new operating system throughout the year. Kudos. It can’t be easy. That said, find a way to keep from mucking things up on the backend for users who don’t participate in betas. Perpetual beta weirdness is hell for normal users.

[…]

Error Messages. Tell us more. Yes, I know something failed. Tell me more about what failed and point to a solution or information that can help me find out more. 

[…]

App Store. For a company that spends untold amounts of money on its brick and mortar stores, I remain shocked at how they can be proud of the software versions of any of its App Stores. 

Codenter:

I can deal with ugly UI, missing features, whatever. Xcode is different because it constantly makes me waste time on problems that feel completely detached from my code.

[…]

Some days it’s SwiftUI previews: change one harmless view and suddenly previews stop loading, or you get some useless wall of diagnostics that disappears after nuking DerivedData. Some days the simulator decides it doesn’t want to boot after an update. Sometimes indexing eats the whole machine, autocomplete gets drunk, fixed errors keep hanging around, or debugging from Xcode is mysteriously way slower than running the same thing normally.

Helge Heß:

My secret bet for WWDC is OpenSource SwiftUI. Why? Because it’s kinda inevitable that someone else does that otherwise using the current tooling. Just imagine a working List! 🙈

Confidence level: 0.1%. Probably won’t happen because of ignorance(/arrogance?), but would likely be the right decision for that specific project.

Steve Troughton-Smith:

The best kind of WWDC is the WWDC that gives me a big grab-bag of tools to make my apps better along several axes, and doesn’t burden me with a huge amount of needless churn just to tread water.

My favorite WWDCs are the ones where iPad gets a lot of love — there aren’t many of them, and no signs whatsoever that this year will be one of those years.

(A GOAT WWDC would be one where they introduce a true cross-platform successor to UIKit and AppKit and back away from the SwiftUI dumpster-fire)

Previously:

Update (2026-06-04): Imthaz Ahamed:

I wrote mine a month ago.

  1. A Snow Leopard year where focus is on quality
  2. Siri that is competent, and Siri being able to talk across devices (like ask Siri on my iPhone what my iPad battery level is at)
  3. Apple Watch Independence — this is long overdue, I want Apple Watch to not be tied to one iPhone, but be able to connect/switch to different iPhones(or even iPads!). Maybe a toggle in the Watch control centre.

Tim Schmitz:

Here’s my WWDC wish list entry: When I say “Hey Siri, add hot salsa to my grocery list,” add a single item called “hot salsa” instead of two unrelated items called “hot” and “salsa,” which it currently does every. single. time. 🤦‍♂️

Yep.

Matt Massicotte:

Here’s my “watchlist” of things I’ll be paying special attention to.

Update (2026-06-05): Rui Carmo:

My expectations are effectively rock-bottom by now. Apple has become a hardware company where software seems to have been tacked on as a somewhat under-maintained afterthought. But I can’t help but keep a scorecard, so here’s what I’m hoping for–in rough order of how often it ruins my week.

[…]

I want Mail to be automatable again. Not necessarily the full plugin API they killed, but an AppleScript dictionary that isn’t frozen in amber and a MailKit surface that can file, tag and search without ceremony–because the one app I live in all day is the one black box I can’t point an agent at. While they’re at it, smart folders and rules that sync from the Mac should finally arrive on iOS, roughly twenty years late.

Spotlight should simply find things that exist. I’d settle for that alone–no AI, no reinvention–just reliable, complete results and the one-line reindex affordance the Mac has had for years made available on iOS, so a corrupted index doesn’t mean a multi-hour restore that breaks Apple Pay and FaceID along the way.

[…]

Stabilise SwiftUI or admit it’s a research project. Views that worked on iOS 17 behave differently on 18 and seem broken on 26, and I lose hours dropping to UIKit to dodge layout bugs reported years ago.

Juli Clover:

Some of the same features that are coming in iOS 27 will come to macOS 27, like the new version of Siri and the dedicated Siri app, but we want to hear from MacRumors readers. What are you hoping to see in macOS 27?

Do you want updates to Liquid Glass? Changes to multitasking? Bug fixes? Better external display support? Improved memory management since no one can afford RAM anymore?

When Dropbox Spawns a Million Folders

Mike Bombich:

The two numbers at the end of that path are the file and folder count for this folder. That “Base.lproj” folder has no files in it, but 1 million subfolders. That’s absolutely bonkers! That really can’t be sane. The app, MenuClock (not the real name), looks like it’s just a simple digital clock, so it really shouldn’t have many items in that folder at all.

I offered my best guess: I suspected that some conflict arose in that application’s bundle specific to Dropbox, and Dropbox ran amok, creating lots of folders (perhaps remotely, then locally, like an echo chamber).

Finder had trouble emptying the trash with so many files, and the customer had to do this separately on each Mac connected to the Dropbox account.

We never did determine the exact underlying cause for the propagation of folders in that application bundle, but the reappearance of the item on various devices after removing it elsewhere suggested that the cloud-syncing software was likely (errantly) recreating the application and its subfolders. With a lot of persistence, John was finally able to eradicate them.

Previously:

macOS Needs Its Spaces Grid Back

Christian Inkster (Hacker News):

With the release of macOS Lion, Apple introduced Mission Control, its new take on virtual desktops that inexplicably restricted them to a horizontal line only. I remember thinking at first that I just hadn’t seen the setting somewhere, Apple wouldn’t just completely change how I used my computer right? right?

[…]

I wasn’t alone in my frustration. Alternative solutions popped up but the best of them Total Spaces caused me weird slowdowns and relied on modifying the system dock which was a no go once that eventually required bypassing system integrity protection.

[…]

That was until a couple of months ago, when I saw that someone had managed to remove the animation from macOS when you move from one space to another, without needing system edits. This animation clearly annoyed some people but never really bothered me. However as soon as I saw a space move without an animation I instantly realised I could solve my complaints.

[…]

I like the idea of a lightweight wrapper around the native spaces, with support for desktops or fullscreen apps. Just with a grid to navigate. But there is a reason pretty much all solutions that controlled native spaces died out. macOS keeps most of the mission control apis locked down. Its not simply a matter of calling a documented api to add a new desktop, or re-arrange them around. But the ability to move to a space instantly meant I could just create a model that took the single row native spaces and presented them like a grid.

He wrote an app called GridLion—and of course ran into lots of problems with permissions for accessibility and screen recording and is excluded from the Mac App Store.

Previously:

WhisperPad Rejected From the Mac App Store

Rene Zelaya (Hacker News):

In April, Apple rejected an update to my Mac dictation app, WhisperPad, under Guideline 2.4.5. Their position was that I was using the accessibility API in a way that wasn’t an accessibility use. The app exists because I have a hand injury. Apple had approved earlier versions doing the same thing. This time they did not.

I had used Apple’s built-in dictation first, and the experience was a particular kind of frustrating. The transcription was close but rarely right, and every correction meant going back in with the keyboard, deleting, retyping. I was hurting my hands to fix the tool that was supposed to be saving them.

[…]

They responded that they would take a closer look. They told me not to reply in the thread, and said they would come back with a decision. That was April 21st.

Then it went quiet. By May 21st I had heard nothing[…]

Finally he heard back and was rejected again. He didn’t want to “sacrifice the reach of the App Store” so he made a “compromised version” for the store and is also selling the full version via Paddle.

Previously:

Tuesday, June 2, 2026

Bricking Microsoft Office 2019

Adam Engst (TidBITS-Talk, MacRumors):

If you are still using Microsoft Office 2019 for Mac, it will stop working fully on 13 July 2026. Word, Excel, PowerPoint, and Outlook will enter “reduced functionality mode”—a euphemism meaning you can view and print documents but cannot edit, save, or create new ones. Microsoft’s documentation doesn’t clarify what this means for Outlook users.

Why is this happening? A security certificate expiration is forcing Office 2019 into read-only mode, though Microsoft acknowledges this only obliquely in the FAQ. Without a current certificate, the apps can’t confirm you have a legitimate license.

[…]

At least in this case, Apple didn’t push users of older systems to buy new hardware—it just quietly kept things working. […] In contrast, Microsoft is quietly changing its story.

Consumer Rights Wiki (Hacker News):

After Office 2019 for Mac reached end of support in October 2023, Microsoft assured customers their installed apps would “continue to function.” The July 13, 2026 conversion instead drops the apps into a Microsoft-defined “reduced functionality mode,” in which files can be opened and viewed but not edited or saved. By May 30, 2026, the original 2023 end-of-support page had been re-dated and rewritten on Microsoft’s site; the “continue to function” clause was removed.

We thought the deal was that, if you purchase a perpetual license instead of subscribing, you don’t get feature upgrades but the apps keep working on the original hardware and OS version. Customers don’t like online license activation because it’s annoying and subject to temporary network or server problems. With smaller companies, there’s always the risk that they go out of business, and the server goes down, so you lose access to the app. (None of my apps use activation.) I didn’t expect that to be a danger for Mag 7 companies, but it turns out that Apple broke Mac App Store purchases for older OS versions (as well as movie and music purchases on newer hardware), and now Microsoft is letting its own activation break. I’m sure there’s something in the EULA that says they can end support, but it still feels like a violation of the social contract. The customer did their part by paying; it was the company that chose to impose the activation model in order to weed out cheaters; shouldn’t it then own any problems that creates?

But it’s actually worse than that because even subscribing to Office 365 doesn’t fix the problem. You need a newer version of Office, which necessitates a newer version of macOS, which may necessitate getting a new Mac—all to fix what seems like an artificial problem.

Amber Neely:

It’s also bricking its mobile apps on devices running iPadOS 16 and iOS 16 or earlier.

Previously:

Update (2026-06-03): Jason Snell:

Old software becomes incompatible. It’s a fact of life. But to build it so that it just suddenly stops working one day, and to take no steps to ameliorate that situation, is pretty disgusting.

Update (2026-06-05): Macworld (June 4, 2026):

Spend $29.97 today and pay $0 for Office on your Mac tomorrow (and forever)

[…]

For many people, the best software is the kind you buy once and keep using. Microsoft Office Home & Business 2019 offers the classic Office experience right on your Mac, letting you create documents, presentations, and spreadsheets without worrying about recurring charges. A lifetime license is currently available for $29.97.

Office 2019? Lifetime?

Nick Heer:

My workday began with a notification from Teams that the desktop app will stop working on 20 July, as Microsoft says it is only compatible with the three most recent versions of MacOS.

[…]

Also today, OneDrive automatically updated to a newer version, which is incompatible with the version of MacOS I am running. I received no warning until I tried launching it. Microsoft provides no support for this kind of problem for end users but, luckily, I had a Time Machine backup I could use. However, I realized OneDrive would probably automatically update and I would have to do all this all over again, and it contains no relevant preferences.

No Bounty for Mysk

Mysk:

We had lengthy discussions explaining the bug to Apple. It was clear to us the bug was new to Apple Product Security. After 5 months, they informed us that the report was treated as a duplicate and it was addressed.

We just got this update for CVE-2026-28910: No bounty.

[…]

It is hard to believe that our report was a duplicate. The bug was present in all previous macOS releases and now all of a sudden two independent reports addressed it at once!! What are the odds of that? We reported the bug in October 2025. Apple fixed it in March 2026. So they knew about this critical bug earlier than October and left it unpatched all this time?

Mysk:

We have a series of bad experiences with the way Apple Product Security treats our reports. It started with the clipboard, we spent lengthy exchanges convincing them it was a bug, they concluded it wasn’t an issue. When we published the demo we submitted to them, the media helped raise awareness about it. Pressured by social media demands, Apple introduced the clipboard notification in iOS.

And recently we reported a bug that the Passwords app would contact websites over HTTP to download icons. Same behavior: not an issue -> lengthy discussion -> FINE we fix it. Then they said our work didn’t meet their criteria for a bounty. After that and in iOS 26, they introduced this option in the settings (see screenshot). It is clearly based on our unpaid work that we fought hard to convince their team it was an issue.

Mysk:

We will no longer submit bugs we discover in Apple systems through Apple Bounty Program.

neils:

Apple did this to me in 2019 over a messages 0-click bug. So I did some magic and got myself added to their daily bug bounty standup call, which was just a FaceTime group call. I submitted another vuln with a screenshot of their call and got a threatening letter.

Lior Halphon:

A few years ago I reported a bug, which Apple fixed. When I asked for the bounty and credit, they ghosted me. They did eventually provide both the payout and the credit (although they listed the wrong affected OS versions in the security bulletin), but only after Twitter shaming.

That said, the whole experience never felt malicious or deliberate, it simply reeked of incompetence and severe lack of organization.

Denis Kanonik:

From my experience of reporting bugs to Apple - they never admit that you were the first, it’s always duplicate. Even if there are no bounty promised or expected and novelty is obvious.

Bob Burrough:

Apple peeps […] you should reward the effort expended by the 3rd party for helping secure your products…not whether the report is new to you….especially when the issue hasn’t yet been published. Even reviewing the duplicate helps you understand the bug.

Previously:

fsck_hfs Cache Exhaustion Bug

Kıvanç Günalp:

fsck_hfs in macOS Sequoia (version hfs-683.x) has a cache exhaustion bug that reports false corruption on large HFS+ volumes. On machines with 8 GB RAM, volumes of 24 TB or larger trigger “Couldn’t read node” errors during the extended attributes check.

[…]

fsck_hfs pre-allocates a cache at startup — a pool of 32KB blocks used for all disk reads. The size of this pool is determined by available system RAM[…]

[…]

BTCheckUnusedNodes races through tens of thousands of free nodes, and every unique disk offset it touches gets a Tag_t structure allocated via calloc and inserted into the cache’s hash table. Each tag claims one 32KB buffer from the pool. When the release path runs, it returns the tag to the LRU list — but the LRU management doesn’t keep up with the rate of allocations.

[…]

The irony: a function designed to verify filesystem integrity is itself broken — reporting phantom corruption on perfectly valid volumes.

I’m surprised that we keep seeing new HFS+ bugs. I would have thought that code would be frozen by now.

Previously:

Monday, June 1, 2026

macOS 26.5.1

Juli Clover (release notes, no security, no enterprise, no developer, full installer, IPSW):

According to Apple’s release notes for the update, macOS Tahoe 26.5.1 addresses an unexpected shutdown issue affecting certain enterprise users on M5 Macs.

See also: Mr. Macintosh.

Previously:

iOS 26.5.1

Juli Clover (release notes, no security, no enterprise, no developer):

According to Apple’s release notes, the update fixes a previously documented charging issue with iPhone Air and iPhone 17 models.

Previously:

BBEdit 16

Bare Bones Software:

This release of BBEdit introduces expanded support for macOS “Shortcuts”, via additional actions provided in the Shortcuts application. A “Transform Text” operation allows invocation of “one shot” operations of many kinds, and transforms are provided for extracting matching lines, deleting matching lines, sorting lines, and text replacement.

The shortcuts can either interact with the front document or use BBEdit as a headless text processing engine (without having to launch the app). This is great news for Shortcuts fans, as it’s now really easy to receive text, operate on it, and send it along to the rest of your shortcut. Personally, I’m not a fan of locking logic away in the Shortcuts database. I would be more inclined to use a text factory or AppleScript. Text factories provide more options and a better interface than is available in Shortcuts, and both text factories and scripts can be saved as standalone files and easily reused in other contexts (from within BBEdit or other scripts).

Added support for using the W3C HTML checker service. This is on by default, and improves the correctness and accuracy of syntax checking in HTML5 documents.

Most of my projects are embarrassingly still HTML 4, but in some limited testing I found that this worked as expected. By default, it works online, which felt plenty fast and presented the results in the familiar BBEdit errors browser window. (I love how, unlike in Xcode, errors and search results are in separate windows that you can keep open.) They say that the connection to the W3C is secure and that no data is retained, but it’s also possible to install a local copy of the checker for maximum privacy.

A longstanding issue for me is that a lot of my HTML pages contain dynamic elements inserted by PHP or Python on the server. The local files that I edit in BBEdit are either templates, content that will go into templates, or statically rendered pages with a few pieces still missing. In order to check the final versions of these pages, I can use a bookmarklet for the W3C checker or load the final HTML and send it to BBEdit for analysis. This can be done by using an AppleScript to send the source from Safari or by loading the page using BBEdit’s Open File By Name command. BBEdit can also check for broken links, but this is for links to files within the local copy of a site you’re editing. It won’t check remote URLs. If I try to check a page from this blog it will complain about all the links that are just path references because they aren’t stored locally (or, indeed, anywhere except in WordPress’s cache).

BBEdit can search for text in images, via OS-provided image text recognition. Use the Find or Multi-File Search windows to search for (and extract, if desired) matches for a given string or Grep pattern within image files.

This is really cool. Spotlight has had image searching for a while, but it’s much more useful in BBEdit. You can do more precise searches, finding case-sensitive or regex matches. The matches are presented in the aforementioned standard results window, so you can see all the files, as well as the context around the matching text, in one list.

The use case that immediately came to mind was searching through screenshots, e.g. in documentation for my apps. I also found it useful for finding text in memes and for searching for ski trails in my folder of maps. It was able to find trail names where text was curved or at an odd angle, and it highlighted the matching region of the map in yellow. When there are multiple matches, you can arrow-key through them and watch the highlight move.

Text and image files can be part of the same search, and the performance is impressive. I mostly just leave image searching on, but there were a few cases where I was searching a big folder and knew I didn’t need image results, so I turned off image searching to make it go faster. The multi-file search window now makes it easier to see at a glance whether options like this are enabled.

Added settings to projects, instaprojects, and notebooks for project- (and notebook-) specific color scheme settings.

I tend to use different color schemes in different apps. It’s hard enough to find ones that I like, so I certainly don’t want to create more. But judging by the reactions I’ve seen, people really do want to create multiple color schemes within the same app to quickly tell apart different projects.

Added controls to allow use of an alternative color scheme when printing, if desired. The default is to use the document’s current color scheme, but if you routinely work in Dark Mode and print things out, selecting an alternative color scheme generally provides a better outcome.

I don’t use Dark Mode, but this makes a lot of sense. I already had it set to use a different font for printing.

Keyboard emulation for vi is available, via the corresponding setting in BBEdit’s “Keyboard” settings. This enables a basic set of vi navigation and editing commands and modes. :q will close the active document rather than quitting BBEdit.

Personally, I prefer the Emacs keybindings, and there’s good news on that front, too. There’s been a longstanding bug where Control-N (to move down a line) would sometimes stop working. It was a really strange issue that I could never figure out exactly how to reproduce, and it only affected that one Emacs key. BBEdit 16 now supports the Cocoa-standard DefaultKeyBinding.dict file. I added a "^n" = "moveDown:" line, which is redundant for NSTextView apps that already have it built in, but for BBEdit it seems to sufficiently override whatever code path was intermittently failing, so now the key works consistently for me.

Added a button to the Languages preferences for installing a desired language module. This will handle copying of the language module to the appropriate location; so any obsolete instructions regarding where to copy the module can be ignored.

The interface for languages and their settings has been overhauled a bit and overall works more smoothly now. There’s also now a nice interface for importing and exporting grep patterns, so you don’t have to dig into BBEdit’s files.

The file information panel (via “Get Info” or the document status icon in the navigation bar) adds an indicator when the file has been quarantined by macOS. The adjacent “Clear” button will attempt to remove quarantine.

This is one of those minor features that is technically not needed, because I can easily do it from Terminal. But it’s annoying, and whenever I do it I think I should probably write a script to remove the quarantine on the front document. I never got around to that, but now I can just click a button. Also, if you haven’t checked out the info panel in a while, besides showing the basic file stats it can also adjust file permissions and show Spotlight metadata.

Expanded syntax coloring support, via the Language Server Protocol “semantic token coloring” feature. When supported by the language server, this allows the server to provide information on specific ranges of the source code that supplements BBEdit’s built-in syntax coloring for the given language.

I still love the idea of LSP, but it hasn’t quite lived up to my hopes yet. The usefulness probably varies greatly based on which language you’re using. These days, I mostly write Swift, so I’m comparing with the functionality that’s built into Xcode. The main problem is that Apple’s SourceKit-LSP doesn’t support Xcode project files. In order for LSP to find your dependencies, you have to run a script to create a compile_commands.json file and/or install xcode-build-server and set up a buildServer.json file. It was never fully clear to me what I was supposed to do. Of course, my projects also have Objective-C files and Swift code that extends Objective-C classes, so clangd is in play, too.

I got it working to a certain extent but never to the point where it would find all the files it needed in Apple’s frameworks, my own frameworks, and the related files in the same target. So the display of the compiler errors/warnings just wasn’t useful when editing files in my projects. I’m not sure whether this was due to bugs/limitations of SourceKit-LSP or user error. BBEdit’s LSP features do work very well for standalone files with no dependencies, e.g. if I have a test file to explore an API or I’m writing a “script” in Swift.

Setting aside the compilation errors, I do find the new semantic token coloring helpful. It’s not as good as Xcode’s, which can use different colors for local and instance variables. And there are some issues with the coloring of unknown symbols and with local variables sometimes changing color between definition and use. But I prefer it to the basic syntax coloring.

Code completion is a mixed bag. Sometimes it works really well, basically like in Xcode. Other times, it won’t complete because it hasn’t found my dependencies or because AppKit was an implicit import rather than listed at the top of the file. I sometimes wish there were a way to turn off LSP completions (without turning off the rest of LSP) and just use the regular, lower-tech BBEdit completion engine that’s more reliable.

A pleasant surprise is that the Edit ‣ Show Symbol Help command is often more reliable than Xcode at showing the inferred type for a variable.

Added a command to the View menu and to the contextual menu in the sidebar: “Move to Window…”. This opens a dialog in which you can choose an extant window for the active document (or selected sidebar documents, as appropriate), and upon confirmation moves the document(s) to the designated window and makes it active. A search box is available to filter candidates.

I love how this can be completely keyboard-driven.

Enhanced the Unicode display section in the Character Inspector palette to show the Unicode code point names for the respective characters.

You can select a range of characters, and it will show the hex code points as well as the names. This is really handy for breaking down complex characters into their parts. Emoji display within text windows has also been improved.

The Minimap palette gets a cursor position display, and a popup menu button displaying the name of the function containing the start of the selection range. Clicking on the function display will open a function menu, from which you can choose another location in the displayed file.

These are good improvements, but I still find the Minimap much less useful than Xcode’s, which shows some section headings directly in the map and lets you browse others by hovering. The other main editor features that I miss from Xcode are multiple cursors and syntax-aware indentation.

Git revision lists (as used in “Compare Revisions”, “Compare Arbitrary Revisions”, and the file version menu in the navigation bar) get indicators for revisions that have annotations (such as commit tags or special status as branch head revisions). Further details are available via hover tooltips.

This is an improvement, but most of my revisions aren’t tagged, so all I have to go on are the date and the commit hash. The comparison commands are great if I want to quickly go back a few versions or if I know the desired date. I wish BBEdit had another column or pane to show the commit message. Otherwise, there’s a multi-step process of opening the revision history, finding the desired hash, and then looking for it in the other window. At that point it feels easier to switch to Tower and locate the file there so I can use its history browser.

AI worksheets support streamed responses, which will shorten the time before responses from the service start to appear in the worksheet. If wrapping is turned on (as it is by default), streamed responses will appear in chunks (corresponding to an unwrapped response line) rather than a word or two at a time.

Added an “Other…” item to the popup menu for model selection in the AI Worksheet preferences, as well as in the worksheet popover. This makes an API request to the service (if supported) requesting a list of the available models, and then provides a searchable list.

Streaming is a huge improvement, as some of the models take a while to produce a large amount of output. Instead of it looking like nothing is happening, you can start reading the response right away. The Other… command is much more important than it sounds because the pre-defined models that show up in the pop-up menu may not be the ones you want. I recommend checking the full list now and then and updating your default. In some cases you may want a model that’s not even listed there. For example, chat-latest is the current ChatGPT Web model, and it auto-updates to use newer models as they become available, but it doesn’t appear in the list returned by the API. Also, beware of old worksheets that are still set to use an old model.

My other tip is that the AI APIs BBEdit uses seem to default to more concise responses than you would get on the Web. There’s no setting to change this, but you can prompt it within the chat to be more verbose.

The codeless language module internals have been extensively reworked to improve performance, and to correct longstanding issues. With these changes, individual patterns (string, comment, keyword, etc) can be tested and developed using the Pattern Playground if desired, and used in a language module with some assurance that they’ll behave consistently (which was by no means guaranteed before).

[…]

Made significant performance improvements to SFTP protocol operations, including file transfers. Most operations will be visibly faster, in some cases an order of magnitude or more can be expected (limited by network throughput to the server).

There’s a whole section of the release notes on performance improvements, but I think these are the two most important ones. I’ve been using BBEdit’s FTP support since the 90s. It’s always been convenient, but at some point I switched to mostly using Edit in BBEdit from Transmit because it felt faster. With BBEdit 16, the SFTP operations and browser feel so much faster, due to using Dispatch I/O and bulk communication with the helper XPC service. It’s usually quick enough that it doesn’t bother interrupting the flow with a progress sheet, so it feels pretty much like working with local files. Since getting back to working this way, I’ve rediscovered the benefits of having BBEdit manage the SFTP connection: remote files show up as recents so I can quickly go back to them, and I can leave a log file open and reload it.

I continue to use BBEdit every day, for all manner of coding and non-coding tasks. It continues to be rock solid, and Bare Bones continues to do a good job adding useful new features while also maintaining and optimizing the old ones.

BBEdit is still $60—or $4/month or $50/year (up from $40/year) in the Mac App Store—with upgrades still at $30. Of course, many of the features also work in free mode.

See also:

Previously:

Friday, May 29, 2026

StopTheMadness Pro 26

Jeff Johnson:

My Safari extension StopTheMadness Pro has a feature to protect private windows. In other words, StopTheMadness Pro stops websites from detecting private windows in Safari. I won’t explain how my feature works, but in this blog post I’ll explain how websites detect private windows.

Jeff Johnson:

I’m sorry to say that at this time I don’t plan to make any additions or enhancements to YouTube-specific features in StopTheMadness Pro.

[…]

The downsides of adding YouTube-specific features to StopTheMadness have outweighed the upsides. YouTube is an endless time sink. Even though StopTheMadness is not a YouTube-specific extension, I’ve spent more time working on YouTube than on every other website in the world combined. Seriously. And YouTube doesn’t remain static; Google continues to change YouTube, sometimes breaking my features, requiring even more work.

I generally use Downie for YouTube videos, and it requires an insane number of updates to keep working.

Jeff Johnson:

Although DuckDuckGo doesn’t allow you to specify the number of results per page, it does have a setting to enable infinite scroll, which is more convenient than Google’s strict division of results into pages of 10 links. The problem is that I prefer to use private windows for the majority of my web browsing, especially searches, which means that any settings would disappear when the window is closed. DuckDuckGo claims to support URL parameters for settings, but in my testing, the parameters don’t actually seem to work reliably.

As you might expect, my solution to the problem is my web browser extension StopTheMadness Pro.

Jeff Johnson:

This update brings a great new feature: autoclick buttons! Specify a button on a website to be clicked automatically. For example, agree to terms and conditions, reject cookies, or close a popup.

I’ll have to report back on how well this works across various sites, but it sounds great and was successful in my initial testing:

In selection mode, manually click the button that you want to be automatically clicked.

[…]

StopTheMadness Pro uses CSS selectors to autoclick buttons. In order to click a single, specific button, and not mistakenly click the wrong buttons, StopTheMadness Pro searches for a unique way to identify the button on the page. If a unique identifier cannot be found, then the autoclick feature can’t be used with the button.

By default, StopTheMadness Pro attempts to find the button on the web page for 10 seconds after the page loads, and then it stops looking.

Previously:

Mac External Display Support Reference

RetinaDesk:

How many external monitors can your Mac actually drive? Pick your exact Apple Silicon Mac — we’ll show the maximum external display count, per-port resolution and refresh caps, valid configurations, and the gotchas that burn people.

The site’s maintainer, Parish Khan, writes:

After your March 2024 post on the M3 MacBook Pro getting two-display support via software update, Apple quietly amended the 14-inch M3 base spec only with macOS 14.6 in July — no follow-up announcement. The tool flags it clamshell-only since that’s still the catch.

Two other things worth knowing: the M1 Ultra Mac Studio is listed at 5 displays not 8 (that count starts at M2 Ultra), and 8K 60Hz is HDMI-only on every Mac, including the Thunderbolt 5 machines.

Howard Oakley:

Selecting external Retina-resolution displays for use with Apple silicon Macs is extremely complicated. Even when you read Apple’s tech specs it’s often not clear exactly which combinations will work together.

Previously:

Update (2026-06-01): Adam Engst:

Each display gets at least a week of daily driver testing on current Apple silicon hardware, with a consistent focus on text rendering, color profiles and consistency, brightness and backlight bleeding, single-cable behavior, and long-term eye comfort. Included stands, speakers, and webcams also come under scrutiny. The result is a detailed review with pros, cons, who the display is best for, and detailed specifications. Khan then combines all that information into three buying guides:

Bartender Pro

Applause Group:

Bartender Pro includes everything in Bartender 6, plus Top Shelf and future Pro tools as they’re released.

[…]

[Top Shelf is a] powerful new way to interact with your MacBook’s notch — bringing common utilities into what used to be wasted space.

The Pro features require a new $15/year subscription.

Dan Moren:

Top Shelf is part Dynamic Island, part clipboard manager, part file utility. Frankly, much of it also feels like the kind of feature Apple should building itself, because my experience over the last year or two with the notch in the MacBook displays continually makes me annoyed at just how user-unfriendly it is.

To trigger Top Shelf, you bring the cursor up to the notch; the interface expands outward from there, just like the Dynamic Island on the iPhone. By default, the first screen contains a pair of customizable widgets for common features like Calendar, Weather, and Music.

[…]

Files allows you to temporarily store, yes, files that you might want to move between apps. Drag and drop a file in there and then you can drag it back out of Top Shelf into another app. That pane also has an AirDrop section; drop a file there, and it will trigger the system’s AirDrop feature, with the file already pre-populated.

The Files feature sounds like Yoink.

See also: MacRumors and Mac Power Users Talk.

Ben Lovejoy:

However, there are also some truly remarkable [Apple] oversights which are somehow allowed to persist from macOS generation to macOS generation. […] menu items can end up being hidden behind the MacBook Pro notch, with Apple seemingly unaware or unconcerned about this. I typically only have four or five third-party menu bar items on screen at any given point (albeit including a wider timezone clock one), and yet it is still very common for one of them to end up invisible.

Previously:

Thursday, May 28, 2026

ARC Overhead in Swift Sorting

Sean Heber:

I made a function in Tapestry 23x faster today by sorting an array using its indices instead of using its data directly. Like this:

let unsorted = items
var indices = Array(unsorted.indices)
indices.sort { a, b in unsorted[a].thing > unsorted[b].thing }
items = indices.map { unsorted[$0] }

Versus presumably something like:

items.sort { a, b in a.thing > b.thing }

With Objective-C, at least pre-ARC, this was simple. The array owns the objects, and they do not get retained and released when passed to your comparator, or within it. Unless you do something silly, like removing objects from the array during sorting, it will be safe and have no memory management overhead.

With Swift, I find the situation rather confusing, and I was not able to find any documentation that lays out exactly what happens. Various searches and AI prompts turned up all sorts of conflicting information. Gemini, in particular, had some explanations that sounded reasonable but that I began to doubt because the sources that it linked to did not actually say what it claimed. I’ve tried to figure this out, but it may well be that some of my conclusions are wrong.

There are several things going on:

  1. Swift will insert retains and releases for the closure parameters. I can see this in the disassembly and by setting breakpoints. I think this is only because they’re accessed within the closure. They don’t need to be retained by the caller because the closure is non-escaping.

  2. If the optimizer is enabled, Swift can sometimes remove that retain counting. I’m not sure exactly when this happens. In my tests, where everything is defined in the same module, it worked for both classes and structs, but I get the impression that sometimes the optimizer is not able to remove the ARC traffic. This is a longstanding frustration with Swift, that the behavior under optimization can be wildly different and that it’s not obvious when you’re changing something in the code that defeats a crucial optimization.

  3. There can also be ARC traffic from the non-comparator aspects of the sorting. Values need to be moved and sometimes copied into temporary buffers, since Swift uses a complex sorting algorithm that does merging as well as swapping. Some of this seems to be done at a low level to avoid ARC, but at least for structs I don’t think it can be totally avoided.

  4. Swift also has exclusivity checks, which can detect (at runtime) if you’re modifying the array from inside the closure. So safety is somewhat decoupled from memory management.

Heber was sorting large structs and saw overhead related to properties that were not accessed in the closure. I’m not sure whether this was due to #1 or #3 or both. In any case, switching to indices adds (linear) overhead from creating two additional array buffers, but it reduces other types of ARC overhead because only integers are passed as parameters and moved around during sorting.

Is there a way—other than using indices—to guarantee the minimum ARC traffic? Swift now supports explicitly marking parameters as borrowing. That seems like conceptually the right idea. It directly expresses that the elements are owned by the array and so don’t need to be retained at other levels. But I don’t think it helps here. For #1, I think the parameters are already essentially borrowed, and it doesn’t address the overhead from #3. Also, the caller (sort) is not typed as taking a closure with borrowed parameters. Changing the closure wouldn’t change its behavior.

I also wondered whether it would help to use one of the other built-in sorting methods. With Comparable, you can avoid passing in a closure. But if the closure isn’t capturing anything, the signature seems identical to that of < in other respects. Still, maybe there are cases where the compiler would be able to see through more for certain Comparable types?

KeyPathComparator also seems promising in that more of the work happens internally. Maybe this could be optimized as the language evolves to do things that are not possible with normal functions/closures. But, so far, I think it’s mostly just syntactic sugar. In my tests, it still retained and released a lot with optimizations disabled.

Lastly, there’s the option of the Schwartzian transform. This can reduce the computational overhead during each comparison, e.g. if thing is a computed property. It needs extra space for a temporary array, but if you’re already making one for the indices trick, you can use the same one, just wider to store pairs.

Unfortunately, I don’t have a very satisfying conclusion except that I would be skeptical about trying to reason from first principles how the complete system will behave. I think you need to profile to see what’s actually happening. Even that’s easier said than done because the sorting algorithm switches between different modes based upon the size and character of the data.

Previously:

Wednesday, May 27, 2026

Iris 1.0

Tyler Hall (Mastodon):

The first version, from November 2020, was called AntiPhoto. The name was a mood. I had tens of thousands of photos and videos scattered across drives and old phone backups, and Apple Photos wanted me to live inside its library, on its terms. I didn’t want a walled garden. I wanted something that could point at a messy folder and just make sense of it.

[…]

For every dreamy sketch there were months of deeply unglamorous hitting my head against the wall, none of which makes a good screenshot. The single hardest problem was often just scrolling. A photo library isn’t 200 items, it’s 200,000+, and they all have different aspect ratios, and you want a buttery justified grid that never stutters. I have a screen recording I named “100k Spinning Scroll” from April 2022 — the day a library of 101,706 items finally scrolled without choking — and I remember it feeling like a bigger win than any feature. But even today, Iris has performance hiccups — especially around complex searches and truly massive libraries. But if I waited to solve every bug, I’d never ship.

[…]

I set out to build an anti-Photos utility — a search engine for a hard drive. What I actually ended up with is a memory keeper. Open a photo today and Iris tells you the date, surfaces “16 items on this day,” drops a pin on the map, and lists the people in the frame with their ages quietly calculated from their birthdays.

It’s now available:

Somewhere along the way, “your library” turned into “an account someone else owns.” That’s not the future we want. Iris reads from the folders or Apple Photos library you already have, builds a fast and intelligent library on your Mac, and leaves the originals exactly where you put them. No cloud. No accounts. Your memories are yours.

$14, no subscription, either direct or from the Mac App Store.

Previously:

Update (2026-05-29): Tyler Hall:

ATP 561 [talked] about how to handle photos with “don’t care” dates. Stuff like “1960s” that can’t be pinned to a specific date/time. […] I’m not sure if what Iris does is the best approach, but you can assign a decade, year, or month (or any combination of those) and it’ll bucket it into an “approximate” section where it makes sense.

Nick Heer:

But that is not the coolest part. No, that is that it lets you explore your tens- or hundreds-of-thousands of photos in a way that treats each of them as little memory boxes. So often, it is not just a picture of your kid, or your dog, or your dinner; it is a time you would like to remember. There are a bunch of things in each file that can bring you back to that moment. Photos does a poor job of that; Iris, on the other hand, is made for exactly that, something Hall takes seriously.

Halide Mark III

Ben Sandofsky:

Mark III is now available in the App Store. This post highlights the major new features, starting with Looks, which produce gorgeous photos straight-out-of-camera.

[…]

Inspired by “Less, but better,” we partnered with the renowned Hollywood colorist Cullen Kelly to develop a succinct set of gorgeous, physically accurate processes exclusive to Halide. Each look was engineered with a specific intent. We verified every look thousands of times on real-world reference photos.

[…]

As Mark III became better and better, I actually missed its results when I reached for a standalone camera. I figured a lot of people might feel the same. So we’re excited to announce that Halide now lets you import RAW files from standalone cameras to apply the same magic that defines Halide.

I like the idea of looks, and the Apple vs. Halide Rembrandt comparison is striking, but I don’t like the workflow of making these decisions from my phone.

Previously:

!Camera

John Gruber:

!Camera’s use of LUTs for filter-like effects opens the app to a wide world of non-proprietary looks. The best source I’ve found for new LUTs to import is the Panasonic LUMIX Lab app — Panasonic’s built-in LUTs are boring, but the app has a whole community of user-submitted LUTs and I’ve found several of them that are lovely. !Camera’s custom “SuperRAW” format, is, in my opinion, key to the appeal of the app:

No more flat lifeless photos, no AI processing, no weird artifacts. Our SuperRaw™ photo processing has been crafted to showcase more film-like tones and preserve a photo’s beautiful natural grain.

Previously:

Project Indigo

Allison Johnson (2025):

Adobe’s Project Indigo is a camera app built by camera nerds for camera nerds. It’s the work of Florian Kainz and Marc Levoy, the latter of whom is also known as one of the pioneers of computational photography with his work on early Pixel phones. Indigo’s basic promise is a sensible approach to image processing while taking full advantage of computational techniques. It also invites you into the normally opaque processes that happen when you push the shutter button on your phone camera — just the thing for a camera nerd like me.

If you hate the overly aggressive HDR look, or you’re tired of your iPhone sharpening the ever-living crap out of your photos, Project Indigo might be for you. It’s available in beta on iOS, though it is not — and I stress this — for the faint of heart. It’s slow, it’s prone to heating up my iPhone, and it drains the battery. But it’s the most thoughtfully designed camera experience I’ve ever used on a phone, and it gave me a renewed sense of curiosity about the camera I use every day.

Joe Rosensteel:

I appreciate what Adobe is doing with Project Indigo. It’s a free iOS camera app, but it is heavily disclaimed as being experimental with unique features you can’t find in other apps. But Adobe also says they’re targeting “casual” photographers, which seems misguided.

[…]

You can’t adjust the tone mapping like you can with Photographic Styles. You’re supposed to take it into Lightroom and treat it like the RAW output of a DSLR or mirrorless camera.

The default result tends to be much more naturalistic than the Camera app.

John Gruber:

I’m deeply intrigued by Indigo, and I have a few friends who’ve shown me some extraordinary photographs taken with the app. If they hadn’t told me, I’d have wagered their photos were taken with dedicated large-sensor digital cameras, not phones.

Previously:

Unpro Camera

Jeremy Gray (2025):

Unpro Camera promises “that unprocessed look” that has become popular lately and is in the same vein as Halide’s Process Zero option.

[…]

Unpro not only aims to produce a more retro-looking image, free from modern smartphone processing techniques, but the app also channels old-school vibes through its design and user interface. Unpro sports a skeuomorphic design, meaning that it digitally recreates real-world objects. In this case, the app has a shiny-looking virtual shutter release, a faux leather texture like a camera’s grip, and pseudo-illuminated icons for things like AF/AE locking and zoom mode. It is worth noting the buttons in the UI don’t move around — they’re always in the same location — which the developer says makes it easier to learn how to use.

Uncorrelated Contents:

Unlike most camera apps, Unpro features a carefully-crafted photo processing pipeline that produces excellent JPEG renditions of RAW and ProRAW photos without the need for manual editing.

[…]

Another feature that, as far as I know, is unique to Unpro: the ability to capture a RAW and ProRAW (or RAW + a deprocessed photo) in rapid succession.

Previously:

Monday, May 25, 2026

Iris Rejected From the App Store

Tyler Hall:

Rejected after six days waiting for review, and four minutes after launching the app for the first time.

The app uses one or more entitlements which do not appear to have matching functionality within the app.

com.apple.security.network.server

I guess they never opened the Settings window during all the time they spent reviewing the app?

Tyler Hall:

App Review rejected Iris for a second time, this time for two reasons.

  1. They again claimed the app uses the com.apple.security.network.server entitlement without matching functionality - even though I responded to the first rejection with an annotated screenshot and detailed explanation showing the server feature in the app.

  2. They asked for more information about how Iris uses face recognition data - asking me to quote from my privacy policy - despite both the privacy policy and the app itself explaining that no data (including face data) ever leaves your Mac and all processing happens entirely on-device.

Ironically, their rejection included a screenshot of Iris’s Settings window—showing the Privacy tab that explains exactly this.

Pasi Salenius:

My MAS app used to go through in under an hour, now takes close to a week.

And there’s a big difference between waiting a week to be approved vs. waiting a week just to begin the process of arguing over specious violations.

Jeff Johnson:

I’ve always found it odd that Apple appears to be bragging about these statistics, yet if you do the math, the statistics turn out to be somewhat embarrassing. Based on the 2024 numbers, over 130K app submissions every week reviewed by nearly (in other words, fewer than) 500 “dedicated experts” (a characterization I would question) means 260 reviews per week on average by each reviewer. If we assume, extremely generously, that 500 reviewers work 40 hours every week with no meetings, no training, no breaks, and no vacations, that leaves less than 10 minutes of review time on average for each submission.

[…]

You might ask why Apple, the most profitable corporation in history, with a 77% gross margin in “services” revenue, that could obviously afford to hire more app reviewers, doesn’t also hire better reviewers, more qualified, actual experts in app development and the market? The answer to my rhetorical question is that app reviewer is an unpleasant job, mostly mindless rule-following, repetitive, facing constant deadlines, reminiscent of assembly-line work. It’s a virtual assembly line.

[…]

It isn’t intended to be true curation, and thus, by no surprise, it isn’t true curation. From Apple’s perspective, adding more reviewers would just add to their costs without adding to their profits, which is the point of the App Store, and reviewers were never particularly good at stopping scams, so the investment in more inescapably low-skill reviewers wouldn’t necessarily bring substantial returns. I’m sure that Apple wants to avoid the embarrassment of scams in the store, but Apple can’t do that without fundamentally changing the nature of the App Store and software distribution on iOS, so they live with the embarrassment and rely on Apple apologists to hand-wave away the problem as “a few bad apples.”

Previously:

Update (2026-05-26): Richard Buckle:

This perfectly encapsulates why I no longer develop for Apple platforms.

Matt Sephton:

I also got this rejection for my app Localmost…which is a local web server manager!

Matt Sephton:

one of my apps was submitted and approved, but the first update I pushed was rejected because they wanted “test account details” to which i replied “the app does not have an account system” and then it was approved. it’s just so amateur hour. AND they still haven’t got me on the 15% track, the email said “sorry we’re busy right now so there are delays”

Pierre:

Our app resembles a marketplace, so we are always worried of reviewers being overzealous. We had to deal with a few rejections in the early versions. Also, we publish some apps with the branding and name of some big companies (think intellectual property red flags). What seems to work (maybe it is pure chance ?!) is that we provide a nice QA anticipating possible critiques in the Notes section next to the login/password.

Junjie:

I had the (unfortunate) opportunity of submitting 3 updates to MAS for @due in 4 days and want to provide another data point[…] Even before this week, my experience has been similarly speedy. But of course, the trouble with the App Store is that you never know when you’re on the unlucky side of things.

OpenAI Model’s Proof of Erdős Unit Distance Problem

OpenAI (Hacker News):

This proof is an important milestone for the math and AI communities. It marks the first time that a prominent open problem, central to a subfield of mathematics, has been solved autonomously by AI. It also demonstrates the depth of reasoning these systems now support.

[…]

The proof is available here. The companion paper by leading external mathematicians is available here. You can find an abridged version of the model’s chain of thought here .

Apps for YouTube℠™®•!

Jeff Johnson:

Several of these apps have a link to a privacy policy web page that’s hosted on a generic free site such as sites.google.com, docs.google.com, github.io, wixsite.com, or vercel.app, which is always a bad sign. A couple of the apps use URL shorteners for the privacy policy link: bit.ly and shorturl.at. Why is that even allowed?!? And some of the privacy policy links are broken, returning HTTP 404 Not Found. Does Apple App Store review even look at the privacy policies?

[…]

I don’t know whether this surfeit of YouTube apps was the product of multiple developers acting independently or one developer hiding behind multiple Apple accounts, an App Store scam that I’ve seen before. I’ve never heard of any of these developers, and I doubt that you have either, not even AdBlocker LLC, the developer of App for YouTube ℠, who is not to be confused with Adblock Inc, the developer of AdBlock, who is to be confused with Eyeo GmbH, the developer of Adblock Plus, who acquired Adblock Inc in 2021. Got that? In any case, many duplicate app names with random symbols at the end is clearly a perverse experience for App Store users, and Apple’s so-called curation is primarily to blame. Moreover, almost all of these apps have pricey subscriptions, another App Store red flag that I’ve discussed before.

Previously:

Google’s Intelligent Search Box

Sarah Perez (Hacker News):

The era of the “ten blue links” is officially over.

At its Google I/O conference on Tuesday, Google unveiled an AI-powered overhaul of Search centered around a reimagined “intelligent search box” — what the company describes as the biggest change to this entry point to the web since the search box debuted more than 25 years ago.

Instead of returning a simple list of links, Google Search will drop users into AI-powered interactive experiences at times. Google is also introducing tools that can dispatch “information agents” to gather information on a user’s behalf, along with tools that let users build personalized mini apps tailored to their needs.

[…]

While Google says that AI Mode is not the default experience, Search’s user interface encourages users to ask follow-up questions instead of scrolling down to the links to other pages.

John Gruber:

Odd, to me, to paint this only in terms of user convenience (ostensible user convenience at that), and not in terms of this being a de facto attack on Zillow and the rest of the web.

Nilay Patel (2024):

There’s a theory I’ve had for a long time that I’ve been calling “Google Zero” — my name for that moment when Google Search simply stops sending traffic outside of its search engine to third-party websites.

Amanda Silberling (Hacker News):

On Google’s video announcing the Search updates, one commenter wrote, “this is the best advertisement for letting people know it’s time to get a different search engine.”

[…]

If you’re curious about alternative search engines, you’re in the right place. Here are some places to start (or, embrace chaos and see where Open Web Engine takes you).

Previously:

Update (2026-05-27): Jess Kinghorn (Hacker News):

DuckDuckGo has been one major winner of this Google Search abandonment. Just for a start, visits to its AI-free search page noai.duckduckgo.com between May 20 to May 25 are said to have increased by 22.7% on average week-on-week, with the figures peaking May 24 at 27.7%.

The DuckDuckGo mobile app saw installs spike in the US by 18.1% on average compared to the previous week. TechCrunch reported this growth was sustained over six days, peaking at 30.5% on May 25.

Friday, May 22, 2026

Apple Asks Supreme Court to Review Epic Ruling

Marcus Mendes:

Apple today filed a request with the Supreme Court in an attempt to reverse key lower court rulings over the App Store injunction in its long-running legal battle with Epic Games.

[…]

In its petition, Apple is asking the Supreme Court to review two questions.

The first is whether Apple should have been held in contempt for charging a commission on purchases made outside the App Store.

The second is about the scope of the injunction.

Sarah Perez:

“Epic never brought a class action and never attempted to show that enjoining Apple’s conduct against all other developers — like Microsoft or Spotify, who have nothing to do with Epic — was somehow necessary to provide relief to Epic,” reads Apple’s new petition, which asks the U.S. Supreme Court to review the lower court ruling.

In the same document, Apple also argues against the Ninth Circuit’s civil contempt order over Apple’s compliance with the injunction. The court had ruled that Apple must give developers the right to include links in their apps — links that could direct users to alternative payment options outside of Apple’s own system — if they chose to do so. Apple did permit this as required, but charged fees on those outside purchases, leading to the contempt order.

John Gruber:

Apple’s argument here is that only the letter of the law matters, and the letter of the injunction did not say anything about charging commissions on external payments, and thus they can’t be held in contempt for violating something that was never spelled out explicitly.

Wesley Hilliard:

If Apple wins the “in spirit” portion of its arguments, Apple gets to carry on with its previous 12% and 27% commission rates for external linking. It would also mean proceedings in the lower courts would return to appeals stages.

Juli Clover:

Epic Games and Apple agreed to an expedited schedule and Apple’s petition will be considered on June 25. Apple expects a decision on whether the Supreme Court will hear the case by the time the justices recess for the summer in late June or early July.

Previously:

Stats Visualization in Apple Sports

John Gruber:

I’ve got some gripes about certain specific aspects of Apple Sports. Like, where does one even start to explain how much is wrong with their zero-sum visualization of team stats? Has anyone ever even seen a presentation like that before?

It has to be seen to be believed. What on earth were they thinking?

Still kind of curious that Apple Sports remains iPhone-only — not even an iPad version — but in a way I find that charming too. Maybe Apple is tight on money?

Kieran Healy:

John is right to call the picture a “Zero Sum” representation. The design strongly suggests to the viewer that, within each row, we’re looking at each team’s share of a total. Each pair of black and blue lines seem to be vying for control of their whole row, with the longest line being the “winner” in each case.

[…]

Literally none of the measures in the Basketball data above are zero-sum in this way. Both teams could shoot 100% from the free throw line, or zero percent. But because the first three measures shown are percentages, this reinforces the zero-sum impression given by the lines. It certainly did that in my case. But then, starting with Assists, the remaining rows are just absolute numbers. When I started looking at the absolute numbers, I got confused a second time by the length of the lines. “Oh so it’s not a share, it’s the value” I thought—but no, they do correspond in terms of relative proportions to the teams share within each row. But they’re not really shares they’re just magnitudes. But they have to be shown in a fixed space and we want to make them relatively comparable somehow so … Argh.

Apple’s software design right now seems to love uniformity. Throw a bunch of disparate statistics—or system settings—in a big list. It looks superficially clean and is easy to code. It seems like there’s a chart that’s illuminating the results, but it’s actually worse than a traditional text-only box score. The numbers that you most want to compare are placed maximally far apart. It’s like reading a table of contents with dual-colored dot leaders, but of course in a table of contents you aren’t meant to be reading all the page numbers.

Our fundamental problem is that we just have two cases (the teams) and fifteen different measures, or variables. Each variable, except for the three percentages, is in effect on its own scale. There’s no direct way to make comparisons across them.

John Gruber:

The problem is further complicated by the fact that Apple Sports shows the same screen for all sports, just with different sport-specific stats. I think the solution is to just present these numbers in a table. Yes, tables are boring. But they’re not confusing. What Apple Sports is doing, in an attempt not to be boring, is confusing.

Previously:

Cleve Moler, RIP

MathWorks (Hacker News, Reddit):

Cleve was chief mathematician and cofounder of MathWorks and the author of the first version of MATLAB.

In his early years, he was a professor of math and computer science for almost 20 years at the University of Michigan, Stanford University, and the University of New Mexico. During this time he was known for being one of the authors of LINPACK and EISPACK, two foundational Fortran libraries for numerical computing. One popular paper of his is “Nineteen Dubious Ways to Compute the Exponential of a Matrix.”

He is coauthor of three traditional textbooks on numerical methods and author of two online books,  Numerical Computing with MATLAB and Experiments with MATLAB.

Wikipedia:

Before joining MathWorks full-time in 1989, he also worked for Intel Hypercube, where he coined the term “embarrassingly parallel”, and Ardent Computer Corporation.

Thursday, May 21, 2026

Steve Jobs in Exile

Geoffrey Cain (Amazon):

Drawing on previously unpublished materials and new interviews with the key players, Geoffrey Cain reveals the untold story of Steve Jobs’s “lost decade”—the formative years that shaped the icon we thought we knew.

With unprecedented access to unbroadcast footage of Jobs in NeXT meetings, private company documents, and interviews with his closest colleagues, Cain offers the definitive account of how failure transformed a brash wunderkind into a true business genius.

John Gruber:

And via Cain’s post on LinkedIn announcing the book, the foreword is by NeXT cofounder Dan’l Lewin.

Joe Cieplinski:

Back in 2013, I suggested the story of Steve Jobs would best be told as a 5-act opera, with the most crucial part of the story being Act III.

Steve Hayman:

Jobs left Apple in 1985, founded NeXT, hired me, bought Pixar, and came back to Apple in 1996 at its historic low point, when Apple was near-death, and orchestrated the turnaround we’ve all heard about.

I’ve bought most of the Steve Jobs books, and seen the movies, but they all seem to treat the NeXT years as an afterthought rather than a transformational time. Sure, the NeXT hardware didn’t sell well but the software set the stage for everything Apple makes today.

Geoffrey Cain:

Today is launch day for Steve Jobs in Exile. I spent almost four years digging into Steve’s stretch in the wilderness -- 1985 to 1997, after Apple pushed him out and before it brought him back.

I expected the record to be complete. What more could there be on the most written-about entrepreneur alive? I was wrong. An archivist at Carnegie Mellon told me I was the first person in about fifteen years to open the NeXT archive. People had been holding letters, tapes, memos, recordings in their closets for decades, waiting to show someone. More than a hundred of them sat down with me.

He did a Reddit AMA.

Jason Snell:

It’s a surprising and sometimes gruesome (in a businessy way) story that does not show off the famous man at the center of the story as much as depict all the ways he failed in what turned out to be preparation for his career-defining role as Apple CEO. (I also got to interview Cain about the book this week on Upgrade.)

[…]

The computer that NeXT ended up building didn’t satisfy the requirements of those original higher-ed buyers who were the target market. Jobs had followed his bliss, and his good taste, in interesting directions. NeXT made an interesting product. But the product failed at being a successful product, just as NeXT kept failing at business.

And it just keeps happening, as the book details. Early investor and Jobs believer H. Ross Perot (yes, the former independent presidential candidate!) had ties in the government that would’ve allowed NeXT to sell computers to America’s intelligence agencies, primarily for spy-satellite image analysis. Jobs refused the lifeline, saying he didn’t want to do business with the government.

A deal with IBM had the potential for NeXT’s operating system to take the ecological niche of Microsoft Windows before it had been firmly established on the world’s PCs. Jobs decided he was uncomfortable working with IBM.

See also: Becoming Steve Jobs.

Previously:

Update (2026-05-29): Steve Hayman:

The book has tons of great stories and behind the scenes info; I certainly recognized a lot of the names, but many of the tales were new to me.

Leaving CloudKit

César Pinto Castillo:

CloudKit is one of the best-kept secrets in the Apple platform stack. For years it has quietly powered sync, storage, and sharing for our apps — for free, with zero servers to run, and with end-to-end encryption we didn’t have to design ourselves. And yet, we’re moving off it.

[…]

When a user’s data won’t sync, we have no view into what happened on Apple’s side. We’ve spent years bolting telemetry onto NSPersistentCloudKitContainer.eventChangedNotification just to find out why a save failed — and even with that, we’re guessing from client-side error codes. There are no server logs we can pull, no admin view into the user’s zone.

[…]

CloudKit is supposed to “just work” across Apple platforms. In practice every target has been its own debugging project: macOS only synced on app restart for a while, Apple Watch silently stopped syncing because a user hadn’t accepted a new iCloud ToS — a failure mode we couldn’t even surface to them — and one of our entitlement bugs was reported to us by Apple. AppleTV sync is still flaky in user reports today.

[…]

iCloud signed-out, iCloud full, family-sharing edge cases — CloudKit hands all of this to the client. We’ve built distinct account-state UI for iOS, macOS, watchOS, tvOS, and visionOS, with localizations for each. “Warn the user when their iCloud is full” has been an open ticket of ours since 2025 because we can’t reliably detect it.

Via Fatbobman:

[For] small teams, CloudKit offers an almost unbelievable combination of features[…] But as their product evolved, CloudKit’s limitations became increasingly apparent[…] and most importantly, the inability to truly expand toward the Web and cross-platform ecosystems. Eventually, César’s team migrated to a Supabase/Postgres-based synchronization architecture.

Previously:

Update (2026-06-04): Fatbobman:

Many developers, after integrating CloudKit synchronization with Core Data or SwiftData, encounter a confusing phenomenon: The app synchronizes perfectly across multiple devices, yet when querying Records in the Apple Developer CloudKit Console, it shows “No Records Found” or a completely blank list.

[…]

To resolve this, you need to manually add indexes in the CloudKit Dashboard.

Patrick McConnell:

Sometimes you will mess up the magic. Perhaps you add a record or field to a Model class then remove it. The Schema may become confused and your app may have errors or crash. You can go into the CloudKit console and reset the environment at any point and the current Production Schema will be copied into the Development environment. If you are seeing odd issues with your app revolving around SwiftData or CloudKit feel free to nuke that environment and start over. The next time you run the app in Xcode/Simulator the Schema will be updated to match your actual code. Tip number one is nuke the Development environment and nuke often. Don’t spend hours trying to figure out some strange CloudKit error only to find out at the end that you got your Schema all mixed up.

[…]

In my case what appears to happen is the migration goes fine, the app launches and works as expected with all my new features and shiny new model updates. Until you fully close the app and relaunch. Then SwiftData acts like it’s never seen this data before and is very offended. Boom. FatalError.

Lawsuits Claim OpenAI and Perplexity Shared User Data for Advertising

Madeline Batt:

The lawsuit targeted generative AI company Perplexity, along with Meta and Google, alleging they disclosed transcripts of users’ conversations with chatbots for targeted advertising. The case highlighted a burgeoning monetization strategy for the AI industry to solve generative AI’s profitability problem with a function the technology has proven especially adept at: collecting intimate information about users. Coming a few months after announcements from Meta and OpenAI that they would use data from AI products to target ads, the action and its voluntary dismissal leave the viability of legal challenges to ad-based monetization strategies unresolved.

Maggie Harrison Dupré:

A new class action lawsuit accuses OpenAI of sharing data including user chat queries and personal identifying information like emails and user IDs with the tech giants — and targeted advertising behemoths — Meta and Google, without obtaining proper user consent.

Filed yesterday in California, the lawsuit claims that OpenAI’s data-sharing with Google and Meta violates the California Invasion of Privacy Act, known as CIPA, as well as the Electronic Communications Privacy Act. It points specifically to OpenAI’s integrations with Meta Pixel and Google Analytics, which are data-tracking and collection tools that facilitate targeted advertisements.

Via Nick Heer:

Interestingly, the Office of the Privacy Commissioner of Canada recently concluded an investigation of OpenAI’s training on personal information and whether it can produce that information reliably. It seems to me like questions about third-party ad targeting were out of scope. This is notable, however:

OpenAI represented that ‘untraining’ or ‘reverse-training’ LLMs, so that they no longer use or generate specific personal information for which a deletion request has been submitted, is not currently feasible.

[…]

It is not even clear OpenAI, for example, ensures data in its collection remains in compliance with opt-out requests when training new models.

Previously:

Taphouse 1.5

Multimodal Solutions:

Install, update, and clean up your brew packages from a quiet Mac‑native app. 14,000+ formulae and casks — no terminal required.

[…]

Browse and search through thousands of Homebrew packages with an intuitive visual interface. No more memorizing package names.

[…]

Install or remove any package with a single click.

[…]

See all outdated packages at a glance. Update individually, in bulk, or select specific ones to upgrade together.

[…]

See how much space each package uses. Clean up old versions, cache, and unused dependencies to reclaim disk space.

[…]

Taphouse cross‑references every package you’ve installed against published CVEs. Severity, fix versions, source links — and a one‑click upgrade for the ones that matter.

There’s an impressive set of features that seem to be very easy to use. It’s much better than the command-line or Electron, but it’s a SwiftUI app and various things look and feel a little off. There’s no File menu. The Settings window and sheets are scrollable but can’t be resized.

The core functionality is free. Paying €9.99 unlocks a long list of Pro features: bulk operations, favorites, tags, history, a menu bar icon, background updates, import/export, and managing apps that were directly downloaded, purchased from the Mac App Store, and that update via Sparkle.

See also: Cork (fewer features), Applite (focused on apps), Homebrew Formulae (web list of apps).

Previously:

Update (2026-05-22): The developer fixed some of the issues in a quick 1.5.1.8 update.

See also: Mac Power Users.

Wednesday, May 20, 2026

Inkwell Rejected From the App Store

Manton Reece:

I submitted Inkwell for iOS to Apple for review on April 21st. It has gone through numerous rejections, code changes, resubmissions, clarifications, one phone call, and one appeal to the review board, which I’m still waiting to hear back on.

[…]

The app didn’t have a way to report objectionable content or block users. This rejection was bizarre to me since it’s an RSS reader where people choose to follow users.

[…]

The app doesn’t use in-app purchase so that Apple can take a percentage of Micro.blog revenue. I streamlined the app by removing creation features such as posting and highlighting, removed sign-up and external links, and even removed the app from all storefronts except the US, where there are different rules thanks to Epic vs. Apple. I believe it should now qualify under either 3.1.3(a) “reader apps” or 3.1.3(f) “stand-alone companion apps”.

[…]

Apple’s [Jaguar-era] Inkwell branding was short-lived, and the trademark is now listed as “dead” by the US Patent & Trademark Office. Yet the name still appears on Apple’s trademark page. This is what the reviewer found and objected to, even though other Inkwell apps have been approved without issue.

John Brayton:

Dealing with the App Store is the worst part of developing for Apple platforms.

Apple:

As powerful AI development tools drive a surge in app submissions, Apple’s App Review process has seamlessly scaled to handle the volume and to help ensure every new app and app update meets the App Store’s high standards for privacy, security, and quality.

Tyler Hall:

Apple keeps emailing me about WWDC when all I want them to do is email me about reviewing my Mac app.

Previously:

Update (2026-05-22): Jason Anthony Guy:

Apple loves its big numbers, and its execs will happily hawk them when it’s to their benefit. But what about the flip side? How about reporting the number of legitimate developers rejected for inane reasons? Should those rejections really be promoted as part of some great achievement? Apple’s proud of the “306,000 new developers” it’s welcomed to the platform, but how many saw their apps deplatformed? Apple brags about how many fraudulent apps get blocked; what about the egregious approvals?

Come to think of it, is Apple really patting itself on the back for finally taking down apps everyone but Apple knew were fraudulent from the jump? Is Apple counting those as both approvals and rejections? My mind boggles.

Radu Dutzan (via Nick Heer):

@doppi for Mac has been stuck there for two weeks. First of all, it takes them at least five full calendar days to review a Mac app. Deplorable.

But not just that, they’ve rejected the app twice, and for the dumbest shit. The second time, they cited one of the same reasons I had already explained, making me feel like it’s worthless to spend any effort trying to treat the process as rational.

Manton Reece:

After a full month of Apple rejections, the iOS version of Inkwell has been approved.

[…]

I care a lot about the names of things. In the App Store, Micro.blog is called simply… “Micro.blog”. No gimmicky taglines appended to the name. So it was a little painful that as a last resort, I’ve decided to temporarily rename the Inkwell app to “Ink•well for Micro.blog”. Yes, with a bullet character in the middle of the word.

I tried a few other renames before that, keeping Inkwell spelled correctly but shuffling it around with other words. “Ink•well” is the only name that Apple approved.

[…]

To more narrowly make the case for Inkwell approval under review guidelines section 3.1.3, I’ve also removed two features from the app[…] These are important parts of Inkwell that exist on Android, macOS, and the web.

Hijacking Apps Using Archive Utility

Talal Haj Bakry and Tommy Mysk (Mastodon):

Until macOS 26.4, Archive Utility had nearly unrestricted filesystem access. Combined with a drag-and-drop sandbox quirk, this let an attacker bypass App Sandbox data containers, Transparency, Consent, and Control (TCC) protections, and hijack third-party apps — all without special permissions or elevated privileges.

[…]

Here’s one interesting aspect of the macOS app sandbox: dragging and dropping a file or folder onto an application grants it unrestricted access to the dropped item. This is by design. Without it, apps couldn’t access files dragged from protected locations like ~/Desktop or ~/Documents, and drag and drop wouldn’t work in sandboxed apps at all.

[…]

Knowing about the drag-and-drop loophole, an attacker can try to convince a user to drag and drop Archive Utility’s preferences file into Terminal, which lets them rewrite Archive Utility’s output folder. From there, copying a file out of an app data container is a two-step move: compress the target file inside a protected area, then extract the archive into a folder the attacker controls.

[…]

Code signing should have prevented this kind of tampering with the application bundle, but for some reason macOS didn’t complain. We would like to investigate this further.

Previously:

Core Data Lab 3.0

Ron Elemans:

Despite all that, we have done our best to embrace and implement the concepts of the Liquid Glass design in Core Data Lab 3.0, although with a few tweaks here and there to improve the contrast in especially dialogs.

[…]

Identifying rows in data often depends on attributes with names like ‘identifier’, ‘title’ or ’name’, which not seldom requires scrolling or adjusting the column configuration to make them visible. With ‘Favorite attributes’ you can configure default attribute names that are automatically placed in front or on top of other attributes.

[…]

With the new ‘Favorite content’ setting, you can determine which attribute is shown first, and which other attributes must be shown on top of the said dropdown list.

[…]

You can add multiple diagrams to a project, and it’s easy to center each diagram around a few entities by excluding unrelated entities. The design is heavily inspired by the ‘graph style’ editor of the data model designer tool in Xcode 13 and older[…]

Also, you can now see relationships when opening an object in a separate window, and searching now supports the Matches and Like operations. It’s a free update.

Previously:

Updating Shared Shortcuts

Manuel Grabowski:

No actual concept of versioning or upgrades for shared shortcuts. Sharing shortcuts happens via weird iCloud URLs rather than being an actual aspect of the system. So to update a shortcut, do you just add it again? No indication of what that will do before you press the button. Will it error out? Will it create a duplicate? Will it update/replace the existing one?

[…]

Of course this Playmobil-ass UI doesn’t show anything that would be remotely useful for serious people. Imagine wanting to sort your shortcuts by date or see the last modification date, like some rocket scientist.

Needless to say, there’s no version control or diffing, either. There’s so much stuff that apps can get for free if they use the file system instead of opaque storage. Bypassing it in the name of simplicity makes some things easier but blocks a long tail of possibilities—as well as basic stuff like sorting, if the app doesn’t provide it.

Previously:

Update (2026-05-25): Mike Rockwell:

Apple Shortcuts is such a mess that I’ve actually implemented my own backup system for my shortcuts. That way, if anything goes wrong — and it has several times in the past — I have a weekly backup that I can restore from.

Apple vs. Indian Antitrust Regulator

Juli Clover (Slashdot):

Apple is fighting an antitrust penalty law in India that could require it to pay massive fines in its ongoing antitrust dispute with Tinder owner Match, reports Reuters.

Last year, India passed a law that allows the Competition Commission of India (CCI) to use global turnover when calculating penalties imposed on companies for abusing market dominance. Apple can be fined up to 10 percent, which would result in a penalty of around $38 billion. Apple said that using global turnover would result in a fine that’s “manifestly arbitrary, unconstitutional, grossly disproportionate, and unjust.”

Jackson Chen:

Apple’s refusal to provide financial data to an Indian regulatory agency as part of an antitrust case will culminate in a final hearing on May 21, as first reported by Reuters.

Hartley Charlton:

The Delhi High Court ruling keeps a probe by the Competition Commission of India (CCI) alive, which found in 2024 that Apple had abused its dominant position in the iPhone apps market. The CCI wants Apple's financial data to calculate potential penalties, but Apple has refused to hand it over so far.

Previously:

Update (2026-06-03): Hartley Charlton:

Apple has agreed to hand over financial data to India’s competition regulator, in a move that could bring a years-long antitrust case significantly closer to a penalty decision.

Tuesday, May 19, 2026

Apple’s 2026 Accessibility Feature Preview

Hartley Charlton (Hacker News):

Apple today announced a suite of accessibility updates that use Apple Intelligence to expand capabilities across VoiceOver, Magnifier, Voice Control, and Accessibility Reader, with additional new features for generated subtitles and wheelchair control via Apple Vision Pro.

Shelly Brisbin:

With updates to live recognition, VoiceOver users can press the iPhone action button to quickly ask a question about what’s in the camera viewfinder and get a detailed response. Users can also ask follow-up questions in their own words to get more visual information. These question features resemble what’s available to users of the Be My Eyes app’s Be My AI feature, but it’s unclear whether Apple’s offerings will go further.

[…]

Voice Control is set to get an Apple Intelligence boost, giving users the ability to describe an element onscreen they want to act on, instead of using a numbered grid, or remembering an item’s label. The natural language support should also allow Voice Control users to navigate apps or elements that aren’t labeled for the feature.

Previously:

How Fake Contacts Can Fix Dictation’s Proper Noun Problems

Adam Engst:

Apple doesn’t provide a user-editable list where you can add special words, but there is a back-door way to train Dictation—on all your Apple devices—to work more the way you prefer: through the Contacts app.

[…]

Regardless of the number of words in the name or phrase, I put them all in the First Name field, with the hear-no-evil monkey 🙉 emoji in the Last Name field. That way, these spurious contacts sort to the very bottom of Contacts and don’t clutter the display. I also add them to a Proper Noun-Contacts list (mentally removing the “u” amuses me).

[…]

Dictation picks up some of these entries quickly, such that you don’t have to do anything more. However, in other cases, it requires more training.

[…]

Inserting a zero-width space in the middle of the word did indeed prevent Dictation from recognizing it. Unfortunately, the zero-width space also gets in the way of searching on the full name, so it’s best to put it as far back in the word as possible.

Fantastical at 15

Flexibits:

So, grab a slice of virtual cake and join us on a trip down memory lane as we look back at how far Fantastical (and Flexibits) has come!

Still one of my favorite apps, though I don’t use most of the advanced features.

Previously:

Fortnite Returns to the App Store Except in Australia

Hartley Charlton:

Fortnite is back on the App Store in every country except Australia, Epic Games announced today, as the company declared it is entering the “final battle” of its long-running legal dispute with Apple.

Epic said the decision to push Fortnite back onto iOS globally was prompted by Apple’s own words to the U.S. Supreme Court, in which Apple acknowledged that “regulators around the world are watching this case to determine what commission rate Apple may charge on covered purchases in huge markets outside the United States.” Epic CEO Tim Sweeney framed the move as a strategic provocation, writing on X that the return marks “the beginning of the end of the Apple Tax worldwide.”

[…]

Epic said it won its court case there and that an Australian court found many of Apple’s developer terms to be unlawful, but Apple continues to enforce those terms regardless. Epic said it cannot return “under an illegal payment arrangement” and is waiting for a court order to compel Apple to comply.

Previously:

Kickstart 1.0

Paul Hudson (Mastodon, Twitter):

It’s called Kickstart, and it has only one job: to help indie developers make more money on the App Store.

Instead of juggling spreadsheets, launch docs, analytics dashboards, review tools, and half-finished marketing plans, Kickstart gives you one focused workspace for launch, growth, and iteration.

[…]

Kickstart helps turn all those disconnected responsibilities into clear, manageable next steps. So, instead of wondering what to focus on next, Kickstart gives you practical day-by-day tasks that help move your app forward, and then helps you complete those tasks right inside the app.

Previously:

Monday, May 18, 2026

Apple Gift Card Scheme

Todd Bookman (via Roman Loyola):

Then, according to Carter, the cards are carefully placed back in their original packaging, and are returned to the store’s shelves, where an unsuspecting customer will hopefully purchase them and add money to the card.

[…]

The scale of the scheme is mind-boggling: Apple, working with police, determined that the company shipped 46,364 products to a single warehouse in Windham, New Hampshire during a 10-week window last summer, with a total value of $47 million. That works out to an average of $600,000 a day in Apple products to a single location. A separate facility in Amherst received another $35 million in iPhones over the same period.

[…]

Chinese nationals are working and, in some cases, living inside these rented warehouses. There, workers receive the new Apple products from UPS or FedEx, sometimes thousands a day. They unbox the products, then consolidate all of the electronics into larger, anonymous brown boxes.

[…]

Once the electronics are repackaged into unmarked boxes, the warehouse workers go to UPS or FedEx to ship them to their next destination. Often, that’s to an international exporter based in Florida. From there, it’s on to China, Dubai, or South America, where the iPhones and other devices are resold for profit.

I don’t think I’ve seen anything yet about electronic gift cards not being safe.

Previously:

Update (2026-05-20): Adam Engst:

My recommendation stands: avoid physical gift cards entirely, and if you must use one, redeem it at an Apple Store for physical merchandise rather than adding the balance to your Apple Account.

Update (2026-05-22): Jason Anthony Guy:

I’m infuriated by the apparent institutional failure exposed by the purchases of Apple products[…] Shipping 46,000 products to a single location didn’t raise any suspicions inside Apple? Is there a legitimate business out there that’s buying $47 million of Apple products over a ten-week period, at retail prices, without anyone at Apple even raising an eyebrow? At that volume, I would at least expect a business manager to reach out to establish a relationship. How did this not raise flags?

[…]

I’m sure Apple has data showing the average number of gift cards used in any transaction, the value of those purchases, whether they’re from new or repeat customers, where the products are shipped, and a vast multitude of additional datapoints that could have flagged these purchases. I really hope that, in the year since this scheme was revealed, Apple has implemented meaningful measures that will help prevent another deadly scam.

Claude Desktop App

John Voorhees:

Late yesterday, Anthropic announced messaging support for Claude Code, allowing users to connect to a Claude Code session running on a Mac from a mobile device using Telegram and Discord bots. I spent a few hours playing with it last night, and despite being released as a research preview, the messaging integration is already very capable, but a little fiddly to set up.

Tim Hardwick:

Anthropic are out with yet another update to Claude AI: the company’s Claude Code and Cowork tools can now remotely control your Mac on your behalf.

[…]

The capability pairs with Dispatch (released last week) which lets you assign Claude tasks from your iPhone and return to finished work on your desktop. In the YouTube video embedded below, Anthropic’s demo shows a user asking Claude to export a pitch deck as a PDF and attach it to a meeting invite, all while the user is away from their Mac.

[…]

The new feature is essentially Anthropic’s version of OpenClaw, the open-source AI agent that went viral earlier this year.

John Gruber:

The Claude Mac client itself remains a lazy Electron clunker. If Claude Code is so good I don’t get why they don’t prove it by using it to make an even halfway decent native Mac app.

Tim Hardwick:

Anthropic has released a redesigned Claude Code experience for its Claude desktop app, bringing in a new sidebar for managing multiple sessions, a drag-and-drop layout for arranging the workspace, and more.

[…]

Anthropic has also dropped more of the developer workflow into the app itself. There’s now an integrated terminal for running tests and builds, an in-app file editor for spot edits, a rebuilt diff viewer aimed at large changesets, and an expanded preview pane that handles HTML files and PDFs alongside local app servers. Each pane is also drag-and-drop friendly, so the layout can be arranged to suit.

[…]

In related news, Anthropic also announced Routines – a new way to set up Claude Code automations that run without an active session. A routine bundles a prompt, a repo, and any relevant connectors into a single configuration that can run on a schedule, fire from an API call, or trigger off a GitHub event such as a new pull request.

Wade Tregaskis:

I strongly suspect Claude’s Mac app is written by Claude.

That’s not a compliment.

[…]

There’s its general everyday bugginess – it frequently resets the scroll position of conversations to some arbitrary point miles back in time, for example. Or just abruptly removes focus from the text field while you’re in the middle of typing (doesn’t move it anywhere else, just defocuses). It smells, in a nutshell.

But the “vibe coding” stench really wafts in when you consider that [cynically] their most important user flow – the upsell – doesn’t even work.

Previously:

Memory Integrity Enforcement Exploit

Khanh:

Early this week, we had a meeting at Apple Park in Cupertino. While there, we also shared with Apple our latest vulnerability research report: the first public macOS kernel memory corruption exploit on M5 silicon, surviving MIE. It was laser printed, in honor of our hacker friends.

[…]

The exploit is a data-only kernel local privilege escalation chain targeting macOS 26.4.1 (25E253). It starts from an unprivileged local user, uses only normal system calls, and ends with a root shell. The implementation path involves two vulnerabilities and several techniques, targeting bare-metal M5 hardware with kernel MIE enabled.

[…]

We didn’t build the chain alone. Mythos Preview helped identify the bugs and assisted throughout exploit development.

Previously:

Update (2026-05-26): ironPeak (via Patrick Wardle):

MIE is a real improvement. EMTE stops most pointer corruption, the RO zone keeps the crown jewels behind a hardware gate, and the Secure Page Table Monitor enforces that only one function can open it. All of that did its job. And it didn’t catch this one.

The bug was in the one place MIE can’t protect: the argument validation of the trusted writer itself. An integer overflow in _zalloc_ro_mut’s stack-area filter let attacker bytes spill across slot boundaries inside the RO zone. The bytes landed on a ucred. The cr_uid flipped to zero. Root shell. The pointer was never bad, the page table was never wrong, the tag was always correct.

See also: Hacker News.

Hardening Firefox With Mythos

Bobby Holley:

Since February, the Firefox team has been working around the clock using frontier AI models to find and fix latent security vulnerabilities in the browser. We wrote previously about our collaboration with Anthropic to scan Firefox with Opus 4.6, which led to fixes for 22 security-sensitive bugs in Firefox 148.

As part of our continued collaboration with Anthropic, we had the opportunity to apply an early version of Claude Mythos Preview to Firefox. This week’s release of Firefox 150 includes fixes for 271 vulnerabilities identified during this initial evaluation.

[…]

Our work isn’t finished, but we’ve turned the corner and can glimpse a future much better than just keeping up. Defenders finally have a chance to win, decisively.

[…]

Encouragingly, we also haven’t seen any bugs that couldn’t have been found by an elite human researcher. Some commentators predict that future AI models will unearth entirely new forms of vulnerabilities that defy our current comprehension, but we don’t think so.

Mozilla (Hacker News):

In this post, we’ll go into more detail about how we approached this work, what we found, and advice for other projects on making good use of emerging capabilities to harden themselves against attack.

Dan Goodin:

The engineers said their earlier brushes with AI-assisted vulnerability detection were fraught with “unwanted slop.”

[…]

Mozilla’s work with Mythos was different, Mozilla Distinguished Engineer Brian Grinstead said in an interview. The biggest differentiating factor was the use of an agent harness, a piece of code that wraps around an LLM to guide it through a series of specific tasks. For such a harness to be useful, it requires significant resources to customize it to the project-specific semantics, tooling, and processes it will be used for.

Previously:

Friday, May 15, 2026

Apple Developer App 11.0

Zac Hall (MacRumors):

The update also adds these changes:

  • Refreshed look with Liquid Glass.
  • List filtering by Unwatched, Bookmarked, and Downloaded, and preferred topics.
  • Improved reliability of image capture during enrollment.
  • Bug fixes and various other enhancements.

Steve Troughton-Smith:

[It] has been ported from Catalyst-based to AppKit-based (it is a SwiftUI app in either case). Expect a whole new set of idiosyncrasies along with whatever new improvements/bugs it introduces.

(You can now fullscreen videos properly, for example)

I went to launch the old app so that I could compare it before downloading the new one and realized that I had deleted it because that was the only way to prevent WWDC session links from opening in the app instead of in Safari. So I don’t have a good feel for what’s changed aside from the list filtering mentioned above and the better support for full screen videos.

The current universal links behavior is that if I click a link within Safari it stays in Safari and shows a banner for opening the link in the Developer app. That’s an improvement. If I click a link outside of Safari, it opens the Developer app. There’s no command in the app to open the current session in your browser, though you can use Edit ‣ Copy Link and then paste it.

Previously:

Update (2026-06-04): I’ve deleted the Developer app again. I can’t stand how just having it installed makes NetNewsWire open links from Apple’s developer news site in the app instead of in my browser.

OmniFocus 4.8.10

OmniFocus 4.8:

OmniFocus 4.8 introduces a visually refreshed interface, adopting beautiful Liquid Glass design elements and a modernized look and feel when run on macOS Tahoe 26, iOS 26, or iPadOS 26. This release also includes support for a range of new OS features - support for consulting Apple’s new on-device Foundation Models via Omni Automation plug-ins, OmniFocus Shortcuts actions in Spotlight on macOS 26, iOS 26 CarPlay widgets, watchOS 26 Control Center Controls, and more!

[…]

New Navigation Bar collapses on scroll, providing more space to view your tasks on iOS 26. When expanded, the Navigation Bar contains the redesigned Perspectives Bar and buttons for Quick Open, Search, Smart Add, and Quick Entry. Collapsed, the Navigation Bar displays a minimal set of buttons (including a button showing the current perspective icon, which you can tap to expand the Navigation Bar).

Here’s what that looks like. I guess it’s the kind of design that Apple wants to encourage with Liquid Glass, but I find it annoying how the controls always seem to be moving around and showing either too much or too little.

Starting in version 4, OmniFocus for iOS showed the perspectives bar on the bottom and then had a single + button floating over the bottom-right. You could tap, double-tap, or drag it to create new actions. The new design is an improvement in that there are now dedicated buttons for creating new actions at the current location (Smart Add) or in the inbox (Quick Entry). I nearly always want it in the inbox, so I no longer have to double-tap every time!

But the expanded form of the navigation bar now includes the Quick Open button (previously available with the perspectives) and the Search button (previously available by pulling down the list). I don’t think these items need such prominence, and now they take up enough extra space that, rather than the + buttons floating over the edge of the actions, the bar now obscures the full width of the action (with fuzzy text showing through).

The lower part of the navigation bar shows the perspectives. With Liquid Glass, the bubbles for each “tab” are wider, so I can only see four perspectives at once instead of five. There’s also extra dead space below the bottom of the navigation bar, where a little bit of blurred text shows through. Overall, it feels like it takes up more space than before, while showing less.

The animating design is meant to help by auto-collapsing the larger navigation bar to a form that’s even more compact than before. Here, everything except the two + buttons gets hidden in a menu. It seemed like a promising idea, but after months of use I find it worse than the old design and probably worse than just showing the huge bar all the time (which is not an option, even if you enable Reduce Motion). The interface just feels busy, with the navigation bar animating in and out as I scroll and change perspectives. I never quite have muscle memory for where the buttons will be. And one of my most common actions—switching back and forth between perspectives—now often takes extra taps because I have to go into the menu. It’s not even fully predictable: generally, the bar goes into compact mode when you scroll down a long list, but sometimes OmniFocus continues showing the expanded bar, anyway.

Forecast and Perspective Items widgets are now available in CarPlay on iOS 26.

This is surprisingly really useful because it lets me put arbitrary text on my car’s screen. In theory, you can do this with Apple Notes, but its font size is so large that there’s barely room for any text. OmniFocus lets me pick a much smaller font to see more. You can create multiple widgets. I always have one showing my flagged actions, and I have another car-specific perspective for information that I want to have available there.

On devices running macOS Tahoe 26, iOS 26, iPadOS 26, or visionOS 26 with hardware support for Apple Intelligence, OmniFocus plug-ins can now consult Apple’s new on-device Foundation Models.

As I discussed in my post about OmniOutliner 6, I think this is really cool but haven’t found it to be useful yet. I do think there’s potential here because things are set up so that the AI can leverage OmniFocus’s rich data model. You could ask it to pull dates out of text and then set date properties on your actions. Tags and notes attached to actions can be used for either input or output. Time estimates and project names are also potential fodder. This would need to be done, not purely by prompting but by writing JavaScript using a glue layer that Omni provides. There are some sample plug-ins.

Some other nice changes in recent versions:

Control Center — Quick Entry, Quick Open and Open Perspective controls are now available in the Control gallery on macOS 26.

[…]

AppleScript’s “evaluate javascript” now resolves Promise results from asynchronous functions.

[…]

Setting values for new repetition rules is now fully supported by AppleScript.

I’ve been using OmniFocus since 1.0, and it’s normally been trouble-free, but the last year or so has been frustrating. I haven’t had any data loss, but the little bugs have worn on me. The good news is that some of the worst ones are finally fixed:

The bad news is that some really annoying ones are still in play:

My overall take is that OmniFocus is still a great app, and I don’t know what I'd do without it. I just wish it would get back to being friction-free.

See also: Reddit and Wired.

Previously:

Update (2026-05-29): Jesse Squires:

Sadly, @OmniFocus is nearly unusable with Liquid Glass.

Everything is bouncing around everywhere. Perspectives are a mess compared to the old design. Extra taps for everything. 😩

Thursday, May 14, 2026

SwiftUI: @State and the Attribute Graph

Federico Zanetello:

@State is one of the many SwiftUI’s pillars that, once understood, we take for granted and use pretty much everywhere without a second thought. But what is @State? What’s happening behind the scenes?

Nikita Vasilev:

The answer is that @State does not store its value in the struct. The struct holds only a thin token - a reference to a node in an external, long-lived graph maintained by the SwiftUI runtime.

[…]

State in the Attribute Graph is owned by the view that declares it. Lifetime of the graph node is tied to the lifetime of that view’s identity in the hierarchy.

Rens Breur:

As is generally known, SwiftUI hands off some of its work to a private framework called AttributeGraph. In this article we will explore how SwiftUI uses that framework to efficiently update only those parts of an app necessary and to efficiently get the data out of your view graph it needs for rendering your app.

Chris Eidhof:

In this talk, we’ll look at the system that underpins SwiftUI: the attribute graph.

Previously:

Update (2026-05-15): Mindaugas Rudokas:

For an official “documentation” source, this WWDC video has a segment with pretty good illustrated explanation on how AttributeGraph and update cycle of SwiftUI works (starts at 20:47).

APFS Folder Clones

Anders Borum:

After my experiments with APFS cloning, I made a Quick Action shortcut for Finder that’s much faster than Duplicate or “cp -c -R”, both of which clone files individually instead of the whole tree in one go.

The regular file copying APIs also give you folders full of file clones rather than a directory clone. His shortcut runs a Python script:

The clone is made with the macOS clonefile(2) syscall, invoked directly through ctypes. clonefile asks APFS to create a new inode that shares the source’s data extents — no bytes are copied up front, the new tree just points at the same disk blocks. The two trees diverge lazily: only blocks that are later modified in one side get their own physical storage (copy-on-write).

However, it’s not clear to me what the benefit is. Aside from somehow being faster, it sounds like you end up with the same structure. The clonefile(2) man page says:

If src names a directory, the directory hierarchy is cloned as if each item was cloned individually. However, the use of clonefile(2) to clone directory hierarchies is strongly discouraged. Use copyfile(3) instead for copying directories.

I don’t think APFS really supports directory clones except at the snapshot level.

See also: Ask Different, Howard Oakely.

Previously:

Update (2026-05-15): Kevin Elliott (via Frizlab):

[You] can basically think of cloning a directory as doing two things:

  1. Pushing the copy operation into kernel, avoiding the syscall overhead of directory iteration, creation, and individual clonefile calls.

  2. Preventing all changes to the source hierarchy while the operation is in progress, making the process atomic.

That second point is what makes this potentially dangerous as, in the worst case, you could theoretically panic the kernel by stalling all activity on critical locations long enough that the kernel "gives up" and panics.

Amazon Tokenmaxxing

Rafe Rosner-Uddin (Hacker News):

The Seattle-based group has started to widely deploy its in-house “MeshClaw” product in recent weeks, allowing employees to create AI agents that can connect to workplace software and carry out tasks on a user’s behalf, according to three people familiar with the matter.

Some employees said colleagues were using the software to automate additional, unnecessary AI activity to increase their consumption of tokens—units of data processed by models.

They said the move reflected pressure to adopt the technology after Amazon introduced targets for more than 80 percent of developers to use AI each week, and earlier this year began tracking AI token consumption on internal leader boards.

[…]

Amazon has told employees that the AI token statistics would not be used in performance evaluations. But several staff members said they believed managers were monitoring the data.

Goodhart’s law:

When a measure becomes a target, it ceases to be a good measure.

Previously:

Update (2026-05-15): See also: Jon Snader and Hacker News.

Update (2026-05-29): Dare Obasanjo:

Amazon comes to its senses and realizes tokenmaxxing is dumb. The company has shut down an internal leaderboard that tracked employees’ use of AI tools after workers tried to boost their scores with unnecessary activity that increased the company’s computing costs.

Chrome’s Huge weights.bin File

Tim Hardwick:

The file in question is called “weights.bin,” which powers Google’s on-device Gemini Nano AI model – the engine behind Chrome features like scam detection, autofill suggestions, and the “Help Me Write” tool. Local models tend to be pretty big storage-wise, and this one is no different. The problem is that Google hasn’t clearly signposted the fact that it’s eating 4GB of your drive with training data.

The issue only recently came to light thanks to security researcher Alexander Hanff, who noticed that Chrome installs the model on any device meeting the minimum hardware requirements, only without prompting you whether you’d like it there in the first place.

I was opted into the On-device AI feature but for some reason did not have the file on my Mac.

Wednesday, May 13, 2026

OmniOutliner 6.1

Ken Case:

Redesigning and rebuilding all of our toolbars, sidebars, and inspectors for Liquid Glass gave us a great opportunity to cross-pollinate features, making some familiar platform-exclusive features available across all platforms for the first time. And it was also easier than ever to build new features that work in consistent ways across those platforms.

For all platforms OmniOutliner 6 introduces smart Dynamic Themes, which automatically adapt to Light and Dark Mode, and a brand new cross-platform template picker.

On the Mac, OmniOutliner 6 additionally introduces the ability to open and work with concurrent multiple windows of the same document—something I find particularly useful when working with long outlines.

On the iPad and iPhone, OmniOutliner 6 adds support for creating and editing advanced Saved Filters, and a handy, new Style Attributes Inspector, plus additional style customization support for grid lines, row indentation and column-spanning Notes.

Multiple windows per document is probably my favorite new feature. I have some really big outlines that I don’t want to split up, because I like to be able to search everything at once. It had been unwieldy to flip back and forth to look at different parts of the document, so I had been duplicating the file in order to open another (view-only) copy in a separate window. Now I can just open another window—and it even supports more than two. This is also useful if I want to do a search without losing my current view.

Not being able to edit saved filters on iOS was a longstanding limitation. It didn’t affect me that much because I nearly always use OmniOutliner from my Mac. But I imagine this was a more serious problem for heavier iOS users because—at least for me—saved filters aren’t set-it-and-forget-it like smart playlists in Music. My filters often have embedded query text that I want to edit. It’s great that this can be done from iOS now, and it may be the best iOS implementation I’ve seen of this sort of complex interface. Version 6 also lets you duplicate saved filters, which is great when I want to create multiple complex filters that are the same except for one condition.

But, for me, the change is actually a regression because on the Mac the standard predicate editor interface has been replaced with the new cross-platform filter editor interface. On iOS, it’s impressive that editing complex filters is even possible, but on the Mac the new interface—based around nested sheets that lack default buttons—feels clunky. You also can no longer create new criteria at arbitrary locations; instead, they are always created at the bottom, and then you can drag them to the desired location.

I’m also unhappy with the layout of the window toolbar area. The filter field for regular searches has moved from the toolbar to a separate banner that shifts my content down and takes up more space (while wasting space in my now-empty toolbar). I used to put the i button in the toolbar for toggling the inspector pane. In previous versions, the inspector appeared below the toolbar, so I could click twice in the same place to show/hide the inspector. Now, the inspector goes all the way to the top of the window (even though there’s nothing actually in the top portion of it) so that every time I click the toolbar button it moves out from under the cursor. I think Apple is encouraging this sort of design, but I just don’t see the point. (Toggling the inspector via the keyboard also isn’t easy because I type the “I” key using my mouse hand.) On the plus side, you can now save some space at the bottom of the window by hiding the status bar.

But as I mentioned last year, one of the interesting problems we’ve been pondering is how best to link to documents in native apps. We’ve spent some time refining our solution to that problem, Omni Links, which are now shipping first in OmniOutliner 6. With Omni Links, we can link to content across all our devices, and we can share those links with other people and other apps.

Omni Links support everything we said document links needed to have. Omni Links work across all of Apple’s computing platforms and can be shared with a team. They leverage existing solutions for syncing and sharing documents, such as iCloud Drive or shared Git repositories. They are easy to create, easy to use, and easy to share.

[…]

With Omni Links, this makes collaboration easier than ever: you can select a row, copy an Omni Link, and share it with your team—and anyone with a Mac, iPad, iPhone, or Apple Vision Pro can open the link in the free viewer to see what you shared—no additional purchase required.

Omni Links are really cool and seem to have a good, flexible design. As in previous versions, you can make a link, not just to a file, but also to a particular outline row within it. Each row has a unique ID so that the link keeps pointing to the right place even if you move the row or add other rows around it. What’s new with Omni Links is that when you link to another file (rather than create an internal link within the same document) the links are more robust and sharable (either to other people or to your other devices). Each link consists of a connected folder name and a relative path. Having a floating base for the path solves the problem of each user/device having a different absolute path for iCloud Drive, Dropbox, Git, or wherever else you store your documents. You wouldn’t want to move or rename the file within the folder (as that would change the relative path), but you can change where the folder itself is stored (or even which service is used to sync it) without breaking any document links. You can just go to the Connected Folders window in OmniOutliner and tell it where that folder is now stored. The links are also scriptable via Omni Automation.

With OmniOutliner, these powerful Apple Intelligence language models are fully under your control. Like all language models, they’re not perfect oracles by any means—and they’re not fundamental to using OmniOutliner. But sample plug-ins leveraging Apple Intelligence are ready for immediate one-click installation, and plug-in authors can integrate these language models with OmniOutliner in all sorts of creative ways.

For those who choose to use them, these plug-ins can be nice time savers: automatically summarizing an article into an outline, or generating content such as a meeting agenda or a fictional story based on a simple prompt.

The integration between Omni Automation and Apple’s foundation models is really neat. Everything happens on-device, and it’s able to take input from the current outline selection, the clipboard, or a prompt that you enter, and return the results in a structured outline format. First, you need to install the AI Tools plug-in. Then you can install plug-ins Omni has written such as Outline the Clipboard or Step-List Generator or write your own (in JavaScript). Installation is easy: you can just click special links rather than having to download files and move them into place (though you can also do that if you prefer).

Currently, I see this as more a technology preview that shows potential than a feature I would use in actual work. The sample plug-ins seem useful in theory—e.g. helping you get unstuck by breaking down tasks—but do not provide features that I personally need. Apple doesn’t currently provide a user-level front end for its models. I can imagine a future where an OmniOutliner document becomes an interactive document—like a Mathematica notebook or a BBEdit AI Worksheet. This seems like an almost ideal interface for prompting an LLM because you’d get a local artifact with rich text, structure, and powerful search. Unfortunately, the results from Apple’s local model seem far behind the online competition. The answers aren’t as good and aren’t consistent; sometimes there will be a reasonable amount of detail with good formatting, but other times it will be very brief or make each line a new indented outline child, creating a pyramid of doom.

In testing, I constantly ran into errors. Both the input and output have to fit into 4,096 tokens or you get “insufficient maximum response token limit.” And lots of seemingly benign text triggered “content likely to be unsafe” errors. The local models are also really slow, often taking 30 seconds or more on an M1 Pro. There’s no progress indicator, so sometimes it isn’t clear whether it’s still thinking or the process has stopped with an error (shown in the separate Console window). Presumably, this will improve over time with better models and faster hardware.

OmniOutliner 6 release notes:

Theme colors can now automatically update when Dark Mode is turned on or off. Override the automatic color conversion when desired, to create your own light or dark appearance.

[…]

Image attachments can now be resized to better fit your content. Additionally, attachment support, previously a Pro-only feature, is now available in the Essentials edition of OmniOutliner.

[…]

New “Pasting from other apps” setting offers options for pasting styled text. Dedicated menu items are now available for “Paste and Merge Styles,” “Paste and Match Style,” and “Paste with Original Style” behaviors.

Styled text is great, but moving it between Mac apps has always been a source of friction. Paste and Match Style is usually what I use throughout macOS because it will discard unwanted formatting from the source, making the text harmonious with the destination. Paste and Merge Styles is a new Omni-specific feature that’s better in that it preserves essential styles such as bold and italic, while matching the font and color of the destination. When I wanted to preserve those, I used to have to do a regular (full) paste and then go into the Style Attributes in the inspector and click the × button for the attributes that I wanted to delete. Now this is handled automatically.

(Note: The Mac version of OmniOutliner does still support lots of different options for bold, strikethrough, and underlined text. You can still access these by clicking and holding on the buttons in the inspector, even though the little pop-down menu arrows indicating that this is possible have been removed.)

Paste and Match Style is still useful when you want to strip those basic styles, too, or get rid of links. Unfortunately, it does not get rid of links when copying and pasting from OmniFocus to OmniOutliner. I never want these links because I’m typically cutting OmniFocus actions to move them to OmniOutliner. By the time I paste the text, the targets of the links no longer exist. These dead links are pernicious because I can’t even get rid of them using the Remove Link command; that leaves black text with a blue underline, and the cursor still changes to the pointing finger even though there’s no more link to click. The solution I found is to use a script to only copy the plain text from OmniFocus. Omni also supplies a plug-in.

Ainsley Bourque Olson:

OmniOutliner 6.1, available today for all platforms, introduces a powerful collection of new Shortcuts actions—bringing the collection of actions available for automating OmniOutliner via shortcuts to 25!

OmniOutliner is a universal purchase that’s $24.99 for Essentials and $99.99 for Pro (50% off for upgrading) or $49.99/year.

See also: Bicycle For Your Mind, 9To5Mac, Mac Power Users Talk.

Previously:

Tuesday, May 12, 2026

Xcode 26.5

Apple (xip, downloads):

Xcode 26.5 includes Swift 6.3 and SDKs for iOS 26.5, iPadOS 26.5, tvOS 26.5, macOS 26.5, and visionOS 26.5. Xcode 26.5 supports on-device debugging in iOS 15 and later, tvOS 15 and later, watchOS 8 and later, and visionOS. Xcode 26.5 requires a Mac running macOS Tahoe 26.2 or later.

[…]

Messages can now be queued in the coding assistant.

Agents can now ask clarifying questions to provide more accurate results.

[…]

Mac (Designed for iPad) apps with pointer authentication are now compatible with macOS Tahoe 26.5 and newer.

Previously:

Update (2026-05-18): Max Seelemann:

Aaaaaand another few hours that went into diagnosing, reporting and working around a new compiler bug (with Xcode 26.5 / Swift 6.3.2). 🥲

Swift 6.3.2 ships a compiler bug that can violate MainActor isolation.

Matt Massicotte:

This is a very serious problem, and while it is covered in the release notes, I’ve been telling people to avoid 26.5. It’s not really a usable release.

Max Seelemann:

It took me reading the release notes like 10 times to even understand what they were trying to say there. And then 5 more times that it overlaps with my own finding. Also the attribution to Upcoming Features is incorrect imo. It’s a really bad bug diagnosis and description.

Update (2026-05-19): Max Seelemann:

It’s a really simple, really basic use of the language, and it produces a crash.

[…]

I have zero inside knowledge about this, so maybe the issue was actually found even earlier. But it seems safe to assume it was known before the release.

[…]

OS releases set the pace and Xcode follows along. I doubt a bug in an Xcode version would ever be able to delay an OS release.

[…]

Maybe not a perfect solution, but a significant step forward would be to decouple Swift and Xcode versions.

macOS 15.7.7 and macOS 14.8.7

macOS 15.7.7 (security, full installer):

This update provides important security fixes and is recommended for all users.

macOS 14.8.7 (security, full installer):

This update provides important security fixes and is recommended for all users.

Howard Oakley.

I don’t know what happened to 15.7.6 or 14.8.6, but they seem to have been skipped.

Jesse Squires:

I updated to Sequoia 15.7.7 and now there’s this virtual “Update” drive stuck in Finder.

It won’t go away, even after multiple reboots.

Previously:

Update (2026-05-13): Jeff Johnson:

You can see on the Apple security releases support page that Safari 26.4 was released for Sequoia and Sonoma on March 24, the same day as macOS Tahoe 26.4. Inexplicably, however, Apple has still failed to release Safari 26.5 for Sequoia and Sonoma. If you look at the list of WebKit vulnerabilities in the security content of macOS Tahoe 26.5, those are now 0-day vulnerabilities in Safari 26.4 on Sequoia and Sonoma. Any malware author in the world can read the description of those vulnerabilities, compare the WebKit binaries on macOS 26.5 to the WebKit binaries on macOS 26.4, and reverse engineer the fixes, which would allow them to develop exploits for the vulnerabilities. The reason that software vendors standardly update all vulnerable software on the same day is to avoid this exact situation, when there’s a significant window of time for malware authors to develop attacks on vulnerable, unpatchable systems.

I’m not sure why there was a delay, but Safari 26.5 is now available for Sequoia and Sonoma. It does not show up in Software update for me, but I can get it through softwareupdate.

Previously:

iOS 18.7.9 and iPadOS 18.7.9

Apple:

This document describes the security content of iOS 18.7.9 and iPadOS 18.7.9.

[…]

Available for: iPhone XS, iPhone XS Max, iPhone XR, iPad 7th generation

After a brief reprieve, Apple seems to have gone back to the policy of iOS 18.7.3, where you can only get iOS 18.7.9 if your phone is not capable of running iOS 26.

Previously: