Subscribe for weekly commentary and coverage of Swift and Apple platform development. Written by Dave Verwer and published every Friday. Free.

Picture of Dave Verwer

Issue 717

11th July 2025

Written by Dave Verwer

Comment

You’ve almost certainly already seen that Apple announced “Updates for apps in the European Union” as it’s now over a week old. I didn’t write about it last week due to a short holiday meaning I didn’t publish an issue, but I do have one thought about it.

My position on this ongoing fight remains unchanged. I don’t think Apple should drop their cut to zero; in my opinion, there’s undeniable value in what they provide to developers. I’m against the increasing complexity for the developer and customer, especially with different rules in different regions.

If you’d like a concise summary of the changes, read John Gruber’s: “Apple Announces Sweeping but Complicated Policy Changes for Apps in the EU, Attempting to Comply With the Latest Dictums Regarding the DMA”¹.

Most criticism I’ve seen of the new rules focuses on the set of Tier 1/Tier 2 features, but I think that’s missing the point. When I read Michael Tsai’s comment, it felt obvious to me that Tier 1 isn’t viable: ²

They are being petty and saying that if you don’t pay for Tier 2, customers have to manually update your app, yet developers are forbidden from making their own auto-update system.

I’m sure Apple would argue that both tiers are viable, but I believe the purpose of the two-tier system is primarily to frame their thinking around value when proposing that this plan is adequate to satisfy the terms of the DMA.

In my opinion, the best way to think about this is to go either with Tier 2 (and it’s associated 20%) for purchases outside the App Store, use one of the alternative stores, or stay with the existing standard App Store deal.

You’re still free to form an opinion based on those options, and I suspect these changes are unlikely to sway you from what you already thought. However, I’d pretend Tier 1 doesn’t exist while you think about it.

I’ll still be waiting and hoping for something simpler that can be applied globally, but as I have said before, I think I’ll be waiting a long time for that.

– Dave Verwer

¹ Even the headlines about this news are long and complex. 😂

² … and that doesn’t include the restriction on search features!

Scale revenue with Superwall

Join some of the App Store’s biggest apps—from brands like Mojo and Citizen to thriving indies. Test pricing, run paywall experiments, update locked features, and now, launch web checkout links straight from your app—all without updates. Superwall is your complete growth toolkit.

News

WWDC25 updates to Transwwdcripts & Resourwwdces

Cristian Díaz with updates to his WWDC-related apps. Transwwdcripts lets you view and download session transcripts, and Resourwwdces is a collection of links to documentation, sample code, and other resources from the conference. I know I risk losing credibility by saying this, but I can’t help thinking both these apps would be better suited to being a website. 😬

Tools

How to use Google Gemini in Xcode 26 beta

It makes sense that other companies offering LLM APIs copied the OpenAI API format to piggyback on tools that started to implement support for that API. But is this the first time an API endpoint has become a “standard” of sorts? Thanks to Carlo Zottmann for the tip!


olleh

This new package from Mattt looks great. If you think its name suggests it’s an Ollama-compatible tool for accessing Apple’s new Foundation models instead of an Ollama model, you’re correct! 👍

Code

What’s new in Testing, 2025 Edition

Rachel Brindle provides a rundown of what turns out to be a huge number of changes in this year’s swift-testing release. It’s a great write-up with examples and her opinion on how useful the changes are.


Reaper: An open-source SDK for finding dead code

At a quick glance, you might wonder how this new tool differs from Periphery. The answer is that Reaper works at runtime while Periphery checks for unused code at compile time via static analysis. Which should you use? Well, there’s nothing stopping you from using both, as they do different things. Static analysis will find completely unreferenced code, but runtime analysis might find stale feature flags or other code that might be technically referenced, but is never called.


How to Detect Text Truncation in SwiftUI?

I can’t help but be impressed by what Xu Yang does to solve this tricky (but very real-world) layout issue. That said, I wish this were easier, and it just goes to show that while a state-driven approach has many advantages, it also brings challenges.

Videos

How To Put Swift in a Box

Euan Harris spoke at the recent Open Source Summit in Denver about Apple’s new Containerization Framework. He uses a simple Hummingbird project to demonstrate building and running containers and the talk is well worth your time if you’re at all interested in this topic.

Jobs

Senior Software Engineer, iOS @ Doximity – Doximity, the medical network used by over 80% of US clinicians is seeking a talented Sr iOS Software Engineer to join our remote-first team! If you’re an expert in Swift with a strong understanding of TCA, and eager to make a real impact on healthcare, we want to hear from you. – Remote (within US timezones)

Sr iOS Developer @ Hero Assistant – We seek to build the most ambitious iOS app ever created. This is a once-in-a-lifetime opportunity to join a rocket ship early, backed by world-class investors, and already proven by tens of thousands of users who rely on Hero every day. – On-site (United States in CA)

iOS/macOS Developer @ LIT Software – LIT Software is a small, highly specialized team that develops powerful litigation tools for Apple platforms. Our industry-leading apps help lawyers organize, analyze, and present evidence with ease. Join us in building the best tools for legal professionals. – Remote (within US timezones)

And finally...

To my knowledge, this is the first case of a company developing a feature because ChatGPT is incorrectly telling people it exists.

🤖