SwiftUI provides built-in support for animations. In many cases, adding animations only requires attaching an animation to a state change.
There are two common ways to do this:
In this article, we'll look at how both approaches work and when to use each of them.


Text recognition using Apple's Vision framework. The article compares the old API (VNRecognizeTextRequest with VNImageRequestHandler, synchronous perform, completion handlers) and the modern API introduced in iOS 18 and macOS 15 (RecognizeTextRequest, Swift native, Sendable, async/await). The modern version is cleaner: configure the request as a value type, call try await request.perform(on: image), get observations, extract top candidates. The article also covers recognition levels (.accurate vs .fast), language detection (automatic or manual), multi line documents, and the newer RecognizeDocumentsRequest for paragraphs instead of lines.
A deep dive into Apple's standardized component for empty, unavailable, or failed content states. Before iOS 17, every app built the same VStack with an icon, title, description, and button. ContentUnavailableView provides a canonical system component with platform consistent styling, accessibility defaults, and Dynamic Type support. The article covers basic usage with title and systemImage, the built in search variant (ContentUnavailableView.search), custom initializers with view builders for actions (like a retry button for network failures), real world production examples (failed requests, first time UX, empty invoices), accessibility considerations, state driven patterns with enum based loading states, common mistakes (overbuilding, generic messages, missing recovery actions, showing empty state during loading), and when not to use it (onboarding, paywalls, interactive tutorials).


Building an event bus for communication between loosely coupled parts of an app. The implementation focuses on type safety (events conform to a marker protocol), thread safety with NSLock, automatic cleanup when the subscriber is deallocated, explicit cancellation via SubscriptionToken, MainActor delivery for UI code, and AsyncStream support. The key design choice is that subscriptions follow the owner's lifetime (weak reference), not the token's. The bus cleans up dead subscriptions lazily during publish or subscribe operations. Publishing creates a snapshot of subscribers and delivers events synchronously outside the lock.
A detailed breakdown of five core SwiftUI gestures. TapGesture with count and coordinateSpace parameters. LongPressGesture with minimumDuration, onPressingChanged, and maximumDistance. DragGesture with .onChanged, .onEnded, and an advanced version using .updating with @GestureState, explaining value, state, and transaction parameters. MagnifyGesture with magnification and velocity. RotationGesture using two @State properties (currentAngle and finalAngle) to preserve rotation after the gesture ends. A separate section on gesture composition: .map for transforming data, .simultaneously for parallel execution (unwrapping optional .first and .second), and .sequenced for sequential gestures (switch statement on the enum).
Join the Mobile Signal Talent Directory and make your profile visible to hiring teams searching for iOS talent.