JSON encoding and decoding with Codable

Codable protocol combines Encodable and Decodable for seamless JSON conversion. Swift structs and classes conforming to Codable automatically synthesize encoding/decoding logic when all properties are Codable. JSONEncoder converts Swift types to JSON

MapKit integration for location features

MapKit displays interactive maps with annotations, overlays, and user location. SwiftUI's Map view simplifies basic map integration with declarative syntax. I add annotations for points of interest, polylines for routes, and polygons for regions. MKCo

SwiftUI PreferenceKey for child-to-parent communication

PreferenceKey enables child views to pass data up to ancestors, complementing the typical parent-to-child flow. I define a custom preference key by conforming to PreferenceKey protocol with a defaultValue and reduce method that combines multiple value

AVFoundation for media playback

AVFoundation provides comprehensive audio and video capabilities. AVPlayer plays media from URLs or local files with playback controls. AVPlayerLayer renders video content in views. I observe player state with KVO or Combine to track playback progress

UserDefaults and app preferences

UserDefaults provides simple key-value storage for app preferences and settings. It persists basic types like strings, numbers, bools, dates, and data automatically. I use UserDefaults for user preferences, app state, and feature flags—never for sensi

Grand Central Dispatch for concurrency

Grand Central Dispatch (GCD) manages concurrent code execution with dispatch queues. The main queue handles UI updates—I use DispatchQueue.main.async to return to main thread after background work. Global queues provide concurrent background execution

SwiftUI custom shapes and paths

Custom shapes enable unique UI designs beyond standard views. Conforming to Shape protocol requires implementing path(in:) that returns a Path describing the geometry. I use path methods like move(to:), addLine(to:), addArc(), and addCurve() to draw c

Property wrappers for SwiftUI state

SwiftUI property wrappers manage state and data flow declaratively. @State creates mutable state owned by a view for simple values. @Binding creates two-way connections to pass state down the hierarchy without ownership. @ObservedObject watches extern

App Store submission and TestFlight beta testing

Submitting to the App Store requires careful preparation and compliance with Apple's guidelines. I configure app metadata in App Store Connect—screenshots, descriptions, keywords, categories. The build must be archived with a distribution certificate

SwiftUI GeometryReader for dynamic layouts

GeometryReader provides parent view size and coordinates, enabling dynamic layouts that adapt to available space. The reader passes a GeometryProxy with size and coordinate space info. I use it for responsive designs—calculate grid columns based on wi

Combine operators for data transformation

Combine operators transform, filter, and combine publisher streams. I chain operators to build complex async pipelines declaratively. map transforms values, filter removes unwanted elements, removeDuplicates prevents redundant updates. debounce delays

UIKit UITableView with diffable data source

Diffable data sources modernize UITableView and UICollectionView, automatically calculating and animating changes. Instead of manually calling insert/delete methods, I create snapshots with current state and apply them. The framework diffs snapshots a