Swift Crafted is where our team works through the rough edges of shipping iOS apps, not the marketing demos. We write for engineers who already know SwiftUI compiles and now need to figure out why their scroll view stutters on an iPhone 12 mini, or why their Liquid Glass tab bar looks fine in the simulator and broken on TestFlight. Every article starts from a real Xcode project, a real Instruments trace, or a real App Store rejection, and ends with code you can paste into your own target.
The iOS 26 Liquid Glass Migration
Apple's new Liquid Glass material system is the biggest visual overhaul since iOS 7, and it breaks more than it advertises. Toolbars, sheets, and tab bars all opt into the new translucency by default the moment you link against the iOS 26 SDK, which means custom backgrounds, hard-coded tint colors, and any view that relied on UIBlurEffect need a second look before you ship. We walk through the actual glassEffect() and backgroundExtensionEffect() modifiers, when to fall back to the legacy material on iOS 18, and how to keep your design system coherent across both.
We also cover the parts Apple's WWDC sessions skipped: how Liquid Glass interacts with Dynamic Type at AX5, why your custom navigation bar suddenly has a 1px hairline again, and the accessibility settings (Reduce Transparency, Increase Contrast) that silently disable the effect for roughly 8% of your users. If you're auditing an app for the iOS 26 submission window, start here.
SwiftUI 6 Performance That Actually Holds Up
The SwiftUI 6 renderer rewrote how Observation tracks dependencies, and most of the "best practice" advice from the StateObject era is now actively harmful. Our performance pieces lean hard on Instruments: the SwiftUI template, the new Hangs instrument, and Time Profiler with the main-actor lane filtered in. We show how to read a body re-evaluation chart, when @Observable beats ObservableObject, and why splitting a giant view into smaller ones is sometimes slower, not faster.
Expect concrete numbers. A 60fps List with 10,000 rows is achievable on an A15, but only if you understand identity, equality, and lazy stack diffing. We benchmark common patterns against each other rather than guessing from Twitter threads.
The Xcode 26 Workflow We Actually Use
Xcode 26 ships with predictive code completion, on-device model inference for the new intelligence APIs, and a redesigned scheme editor that quietly changed how test plans inherit arguments. Our workflow articles cover the daily-driver stuff: keeping derived data sane on a 512GB MacBook, wiring fastlane match into Xcode Cloud without duplicating signing config, and using swift-format as a build phase without making your CI logs unreadable.
We also dig into Swift Testing (the macro-based replacement for XCTest), how to migrate a mature test suite without rewriting it in a weekend, and the parallelization settings that cut our own CI runs from 14 minutes to under 4.
New articles land most weeks, and the full archive is below. Browse the latest posts, filter by tag for the topics you care about, or jump straight into the Liquid Glass and SwiftUI 6 series if you're mid-migration.