Swift ~Copyable Types: Ownership, Borrowing, and Consuming in Swift 6
Learn Swift's ~Copyable types with borrowing, consuming, and the consume operator. Real-world resource wrappers, generics, common pitfalls, and Swift 6 examples.
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.
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.
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.
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.
Learn Swift's ~Copyable types with borrowing, consuming, and the consume operator. Real-world resource wrappers, generics, common pitfalls, and Swift 6 examples.
Master the Combine framework in Swift 6, then migrate the pieces that make sense to async/await and AsyncSequence for cleaner iOS 26 code.
SwiftUI TextRenderer in iOS 26 gives you glyph-, run-, and line-level control over Text drawing. Learn the protocol, three working effects, and the Dynamic Type edges that trip most people up.
A practical guide to Apple's unified logging in Swift for iOS 26: how Logger replaces print, when to use each log level, how privacy annotations protect PII, and how OSLogStore and OSSignposter power in-app diagnostics and performance tracing.
SwiftUI's PhaseAnimator walks a view through ordered animation phases from a single trigger, replacing @State flags and asyncAfter chains. Learn per-phase curves, trigger patterns, and how to combine it with CustomAnimation, plus real-world code for like buttons and toasts.
Profile SwiftUI apps with Xcode Instruments in Xcode 26. A real-device workflow for finding hangs, frame drops, and memory leaks, plus custom signposts with OSSignposter.
Ship real HealthKit features in SwiftUI on iOS 26: async authorization, hourly step buckets, live heart rate as an AsyncSequence, workout builders, and background delivery, with all the Info.plist gotchas laid out.
SwiftUI matchedGeometryEffect morphs a view's frame between two states via a shared @Namespace. Learn the API, spring tuning, and hero animation patterns for iOS 26.
SpeechAnalyzer replaces SFSpeechRecognizer in iOS 26 with an actor-based, fully on-device API. Compose SpeechTranscriber, DictationTranscriber, and SpeechDetector modules, consume results from an AsyncSequence, and ship long-form Swift transcription.
Embed a low-latency drawing canvas in SwiftUI using PencilKit in iOS 26. Wrap PKCanvasView, wire up PKToolPicker, persist PKDrawing to SwiftData, and handle Apple Pencil Pro squeeze and hover with production-ready Swift code.
@Binding forwards a value; @Bindable projects bindings from an @Observable class. Learn the exact rules, the compiler errors, and the migration path from @ObservedObject with runnable iOS 26 examples.
onGeometryChange replaces GeometryReader in iOS 26 for observing view size, frames, safe-area insets, and scroll offsets. Fewer layout passes, no preference-key sandwich, and no full-frame container swallowing your view.
Choose your preferred language to explore our content