iOS application development guide covering UIKit, SnapKit, and SwiftUI. Includes touch targets, safe areas, navigation patterns, Dynamic Type, Dark Mode, accessibility, collection views, common UI components, and SwiftUI design guidelines. For detailed references on specific topics, see the reference files. Use when: developing iOS apps, implementing UI, reviewing iOS code, working with UIKit/SnapKit/SwiftUI layouts, building iPhone interfaces, Swift mobile development, Apple HIG compliance, iOS accessibility implementation.
A practical guide for building iOS applications using UIKit, SnapKit, and SwiftUI. Focuses on proven patterns and Apple platform conventions.
| Purpose | Component |
|---|---|
| Main sections | UITabBarController |
| Drill-down | UINavigationController |
| Focused task | Sheet presentation |
| Critical choice | UIAlertController |
| Secondary actions | UIContextMenuInteraction |
| List content | UICollectionView + DiffableDataSource |
| Sectioned list | DiffableDataSource + headerMode |
| Grid layout | UICollectionViewCompositionalLayout |
| Search |
UISearchController| Share | UIActivityViewController |
| Location (once) | CLLocationButton |
| Feedback | UIImpactFeedbackGenerator |
| Linear layout | UIStackView |
| Custom shapes | CAShapeLayer + UIBezierPath |
| Gradients | CAGradientLayer |
| Modern buttons | UIButton.Configuration |
| Dynamic text | UIFontMetrics + preferredFont |
| Dark mode | Semantic colors (.systemBackground, .label) |
| Permissions | Contextual request + AVCaptureDevice |
| Lifecycle | UIApplication notifications |
| Purpose | Component |
|---|---|
| Main sections | TabView + tabItem |
| Drill-down | NavigationStack + NavigationPath |
| Focused task | .sheet + presentationDetents |
| Critical choice | .alert |
| Secondary actions | .contextMenu |
| List content | List + .insetGrouped |
| Search | .searchable |
| Share | ShareLink |
| Location (once) | LocationButton |
| Feedback | UIImpactFeedbackGenerator |
| Progress (known) | ProgressView(value:total:) |
| Progress (unknown) | ProgressView() |
| Dynamic text | .font(.body) semantic styles |
| Dark mode | .primary, .secondary, Color(.systemBackground) |
| Scene lifecycle | @Environment(\.scenePhase) |
| Reduce motion | @Environment(\.accessibilityReduceMotion) |
| Dynamic type | @Environment(\.dynamicTypeSize) |
.ignoresSafeArea() only for backgrounds)preferredFont(forTextStyle:) + adjustsFontForContentSizeCategory = true.headline, .body, .captionUIFontMetrics / Font.custom(_:size:relativeTo:).systemBackground, .label, .primary, .secondary).accessibilityLabel())@Environment(\.accessibilityReduceMotion)).accessibilitySortPriority())@SceneStorage, @State).destructive role| Topic | Reference |
|---|---|
| Touch Targets, Safe Area, CollectionView | Layout System |
| TabBar, NavigationController, Modal | Navigation Patterns |
| StackView, Button, Alert, Search, ContextMenu | UIKit Components |
| CAShapeLayer, CAGradientLayer, Core Animation | Graphics & Animation |
| Dynamic Type, Semantic Colors, VoiceOver | Accessibility |
| Permissions, Location, Share, Lifecycle, Haptics | System Integration |
| Metal Shaders & GPU | Metal Shader Reference |
| SwiftUI HIG, Components, Patterns, Anti-Patterns | SwiftUI Design Guidelines |
| Optionals, Protocols, async/await, ARC, Error Handling | Swift Coding Standards |
Swift, SwiftUI, UIKit, SF Symbols, Metal, and Apple are trademarks of Apple Inc. SnapKit is a trademark of its respective owners.