Those Who Swift - Issue 278
Weekly note ✏️iOS 27 shipped, and now the real work starts — not adopting the shiny new features, but finding where they rub against the app you’ve already built. Liquid Glass is the most visible example: stunning in the keynote, strange in a UIKit view that predates it by a decade. But it’s the same story across the cycle — the gap between what demos cleanly and what survives contact with a real, aging codebase. This week is about that gap, and the field notes people are writing as they hit it. Hit an iOS 27 surprise in your own app? Reply and tell me — I’m collecting the good war stories. When the Glass Meets the Girderwith Divya Ravi — Technical Editor, iOS engineer There’s a particular moment in every major design transition that nobody puts in the keynote. It’s the moment you build your project against the new SDK, launch the app you’ve shipped for years, and watch something you didn’t touch look subtly, unmistakably wrong. A button with the wrong corner. A bar that doesn’t blur where it used to. A control that was crisp yesterday and is now floating in a way you never asked for. Welcome to Liquid Glass in production. I want to talk about that moment honestly, because the discourse around a new design language tends to split into two unhelpful camps. One says it’s gorgeous and you should adopt it everywhere immediately. The other says it’s a regression and you should fight it. Both miss the actual engineering reality, which is more interesting and more useful: a system-wide design language is not a coat of paint you apply. It’s a set of assumptions the framework now makes about your views — and the friction you feel is the distance between those new assumptions and the ones your codebase was built on. Here’s the thing about Liquid Glass specifically. It’s a material, and materials are contextual by nature. A glass button assumes it sits on top of something worth seeing through. A minimizing bar assumes there’s content behind it that benefits from the effect. These are reasonable assumptions — until they meet a ten-year-old UIKit view hierarchy that was architected when every surface was opaque and every layer was flat. The framework does its best to adapt your old views to the new material, and most of the time it succeeds. The pitfalls live in the cases where it can’t, and those cases are exactly the ones a keynote demo will never show you, because keynote demos are built fresh, in the new world, with none of the accumulated assumptions of a real app. This is why “just adopt it” is bad advice and “just fight it” is worse. The right posture is the one experienced engineers take toward any system-level change: understand what the framework now assumes, audit where your app violates those assumptions, and decide — deliberately, view by view — where to adapt and where to opt out. Liquid Glass gives you compatibility escape hatches for a reason. They’re not admissions of failure. They’re the framework acknowledging that your app has history, and history has weight. The deeper lesson here isn’t about glass at all. It’s about what a design language actually is, underneath the marketing. It’s a contract about how surfaces relate to each other — depth, translucency, hierarchy, motion. When Apple changes that contract, every view you own is silently re-signed under the new terms, whether you read them or not. The apps that transition well aren’t the ones that adopt fastest or resist hardest. They’re the ones that treat the new contract as something to actually read — to understand where their existing UI agrees with it, where it conflicts, and where a five-minute opt-out saves a week of chasing a visual bug that was never a bug, just a disagreement about assumptions. And Liquid Glass is only the most visible instance of a pattern that runs through this whole release. The same gap shows up everywhere real apps meet iOS 27: in the rendering model, in the architecture decisions that determine how easily you adapt, in the long-standing rough edges the framework quietly smoothed while you weren’t looking. The friction isn’t a bug in the release. It’s the tax every mature codebase pays when the platform moves — and the apps that pay it cheaply are the ones built to bend. So if you’re staring at a control that looks wrong this week and you didn’t change it, you’re not losing your mind. The framework changed the terms. Go read them — the field guides are already being written, and the good ones map the pitfalls before you fall in. That’s the whole job this cycle: not adopting blindly, not resisting reflexively, but understanding precisely where the new platform meets the girder of everything you already built. What’s the strangest Liquid Glass behavior you’ve encountered in a real app? Hit reply—the best examples may appear in next week’s issue. Related reading on this week's theme ๐iOS 27 meets real apps — the friction, the fixes, and the field notes. Liquid Glass leads, but the theme runs deeper: rendering, architecture, and the rough edges the framework quietly smoothed. Liquid Glass: A Field Guide to UIKit Compatibility PitfallsFatbobman documents the issues appearing when Liquid Glass meets existing UIKit code, including A strong field guide for teams updating mature UIKit apps. ๐Level: Advanced Changing the Shape of Glass Buttons in SwiftUILivsy Code explores how Liquid Glass interacts with custom SwiftUI button shapes—and how to keep control of the corners when the defaults don’t fit your design. ๐Level: Intermediate AsyncImage Finally Gets Caching in SwiftUISagar Unagar examines the new caching behavior in ๐Level: Intermediate This Week in Those Who Swift ๐️The latest across Swift, Apple, AI, and the community. Swift Around the Web ๐Swift Protocols and the Main ActorJohn Sundell on how actor isolation actually works with protocols — one of those foundational topics that quietly trips up even experienced developers as concurrency tightens. ๐Level: Advanced Stop Using @unchecked SendableSoumya Mahunt makes the case against reaching for @unchecked Sendable as an escape hatch — what it really costs you, and the safer patterns that get you the same result. ๐Level: Advanced Introducing ListKit: An Open-Source Library for SwiftUI ListsDaniel Saidi open-sources ListKit — reusable view components and extensions for the list problems everyone re-solves from scratch, from sectioning to selection to reordering. ๐Level: Intermediate Coding ๐จ๐ปDemystifying Thread Hopping with Swift 6.2 Approachable ConcurrencyNikita Vasilev breaks down what actually happens when your code hops threads under Swift 6.2's approachable concurrency — and how to reason about it instead of guessing. ๐Level: Intermediate New in SQLiteData: Sectioned QueriesPoint-Free adds sectioned queries to SQLiteData — a clean way to drive sectioned SwiftUI lists straight from your database without hand-rolling the grouping. ๐Level: Intermediate Apple ๐Hello Developer: July 2026Apple's monthly developer digest rounds up the latest across the 27 platform releases — new documentation, sample code, and release notes, plus design resources and WWDC26 follow-ups worth a scan. Design ๐จKeeping Canvas Interactions Responsive with Frame ReprojectionMatthaus Woolard on maintaining responsive canvas interactions under the new rendering model using frame reprojection — a look under the hood of how modern SwiftUI stays smooth under load. ๐Level: Advanced AI & Tooling ๐คThe iOS Testing Strategy Agent SkillArtem Mirzabekian shares an agent skill built around a practical iOS testing strategy. ๐Level: Intermediate A Sol's Work: Shipping with GPT-5.6 SolRudrank Riyam gives a coding agent a real engineering task, step away fro several hours, and the checks whether the final report matches what actually happened. ๐Level: Intermediate Tutorials ๐Building a Custom In-App Keyboard in SwiftUILee young-jun needed an in-app numeric keyboard and discovered SwiftUI's ๐Level: Advanced Shipping a SwiftData App with iCloud SyncThorsten Stark walks through taking a SwiftData app from local persistence to multi-device CloudKit sync, including model constraints, container setup, and duplicate- record problems caused by concurrent device updates. ๐Level: Intermediate Video ๐ฅSwiftUI Image Caching Explained: Faster Lists and Better PerformanceStewart Lynch explains image caching in SwiftUI end to end — why uncached liimage loading hurts scrolling performance, how a caching layer helps, and how to build one clearly. ๐Level: Intermediate Thanks for reading Those Who Swift! Subscribe for free to receive new posts. ๐
|

