Sign in with Apple authentication

Sign in with Apple provides secure, privacy-focused authentication required for apps with third-party login. Users create accounts with Face ID or Touch ID, and Apple generates unique identifiers per app. I use ASAuthorizationController to initiate th

Dark mode support and adaptive colors

Dark mode provides low-light interface that reduces eye strain and saves battery on OLED displays. iOS automatically switches based on system settings or user preference. I use semantic colors like .label, .secondaryLabel, and .systemBackground that a

Haptic feedback with UIFeedbackGenerator

Haptic feedback provides tactile responses that enhance user experience. iOS offers three feedback generators: UIImpactFeedbackGenerator for physical impacts with light, medium, or heavy intensities; UINotificationFeedbackGenerator for success, warnin

Local notifications scheduling

Local notifications alert users without server infrastructure. I use UNUserNotificationCenter to schedule notifications at specific times or locations. Creating a notification requires UNMutableNotificationContent with title, body, and sound, plus a t

WKWebView for web content display

WKWebView displays web content with modern WebKit rendering engine. It replaces deprecated UIWebView with better performance and security. I configure WKWebViewConfiguration to customize behavior like JavaScript, cookies, and media playback. Navigatio

StoreKit for in-app purchases

StoreKit enables selling digital goods and subscriptions within iOS apps. I request product info from App Store Connect with product identifiers, then display prices in the user's currency. Purchase flows use SKPaymentQueue to add transactions, which

Instruments and performance profiling

Instruments profiles iOS apps to identify performance bottlenecks, memory leaks, and energy issues. The Time Profiler instrument samples the call stack to show which functions consume CPU time. Allocations tracks memory usage and finds leaks by identi

CloudKit for iCloud sync

CloudKit syncs app data across a user's devices via iCloud. Public databases share data with all users, private databases store user-specific data, and shared databases enable collaboration. I define record types with fields in the CloudKit Dashboard,

iOS app extensions - widgets and share

App extensions expand app functionality into other parts of iOS. Today widgets display glanceable information using WidgetKit with SwiftUI views and timeline providers. Share extensions let users share content to your app from other apps—I process sha

UIKit delegates and protocols

Delegates enable objects to communicate events and customize behavior. The delegate pattern uses protocols to define a contract—I create a protocol with optional and required methods, and the delegating object holds a weak reference to avoid retain cy

SwiftUI task modifiers and async lifecycle

SwiftUI's .task modifier handles async operations tied to view lifecycle. The task starts when the view appears and cancels automatically when it disappears, preventing memory leaks. I use .task for data fetching, subscriptions, and long-running opera

UIKit Auto Layout programmatically

Auto Layout creates flexible UIs that adapt to different screen sizes and orientations. I define constraints programmatically using NSLayoutConstraint or anchors. The anchor API is more readable—view.topAnchor.constraint(equalTo: parent.topAnchor). Se