返回 Skill 列表
extension
分类: 开发与工程无需 API Key

ios-application-dev

iOS应用开发指南,涵盖UIKit、SnapKit和SwiftUI。包括触摸目标、安全区域、导航模式、动态字体、深色模式、可访问性、集合视图、常见UI组件以及SwiftUI设计指南。有关特定主题的详细参考资料,请参阅参考文件。使用场景:开发iOS应用程序、实现用户界面、审查iOS代码、处理UIKit/SnapKit/SwiftUI布局、构建iPhone界面、Swift移动开发、遵守Apple HIG规范、实现iOS可访问性。

person作者: jakexiaohubgithub

iOS Application Development Guide

A practical guide for building iOS applications using UIKit, SnapKit, and SwiftUI. Focuses on proven patterns and Apple platform conventions.

Quick Reference

UIKit

| 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 |

SwiftUI

| 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) |

Core Principles

Layout

  • Touch targets >= 44pt
  • Content within safe areas (SwiftUI respects by default, use .ignoresSafeArea() only for backgrounds)
  • Use 8pt spacing increments (8, 16, 24, 32, 40, 48)
  • Primary actions in thumb zone
  • Support all screen sizes (iPhone SE 375pt to Pro Max 430pt)

Typography

  • UIKit: preferredFont(forTextStyle:) + adjustsFontForContentSizeCategory = true
  • SwiftUI: semantic text styles .headline, .body, .caption
  • Custom fonts: UIFontMetrics / Font.custom(_:size:relativeTo:)
  • Adapt layout at accessibility sizes (minimum 11pt)

Colors

  • Use semantic system colors (.systemBackground, .label, .primary, .secondary)
  • Asset catalog variants for custom colors (Any/Dark Appearance)
  • No color-only information (pair with icons or text)
  • Contrast ratio >= 4.5:1 for normal text, 3:1 for large text

Accessibility

  • Labels on icon buttons (.accessibilityLabel())
  • Reduce motion respected (@Environment(\.accessibilityReduceMotion))
  • Logical reading order (.accessibilitySortPriority())
  • Support Bold Text, Increase Contrast preferences

Navigation

  • Tab bar (3-5 sections) stays visible during navigation
  • Back swipe works (never override system gestures)
  • State preserved across tabs (@SceneStorage, @State)
  • Never use hamburger menus

Privacy & Permissions

  • Request permissions in context (not at launch)
  • Custom explanation before system dialog
  • Support Sign in with Apple
  • Respect ATT denial

Checklist

Layout

  • [ ] Touch targets >= 44pt
  • [ ] Content within safe areas
  • [ ] Primary actions in thumb zone (bottom half)
  • [ ] Flexible widths for all screen sizes (SE to Pro Max)
  • [ ] Spacing aligns to 8pt grid

Typography

  • [ ] Semantic text styles or UIFontMetrics-scaled custom fonts
  • [ ] Dynamic Type supported up to accessibility sizes
  • [ ] Layouts reflow at large sizes (no truncation)
  • [ ] Minimum text size 11pt

Colors

  • [ ] Semantic system colors or light/dark asset variants
  • [ ] Dark Mode is intentional (not just inverted)
  • [ ] No color-only information
  • [ ] Text contrast >= 4.5:1 (normal) / 3:1 (large)
  • [ ] Single accent color for interactive elements

Accessibility

  • [ ] VoiceOver labels on all interactive elements
  • [ ] Logical reading order
  • [ ] Bold Text preference respected
  • [ ] Reduce Motion disables decorative animations
  • [ ] All gestures have alternative access paths

Navigation

  • [ ] Tab bar for 3-5 top-level sections
  • [ ] No hamburger/drawer menus
  • [ ] Tab bar stays visible during navigation
  • [ ] Back swipe works throughout
  • [ ] State preserved across tabs

Components

  • [ ] Alerts for critical decisions only
  • [ ] Sheets have dismiss path (button and/or swipe)
  • [ ] List rows >= 44pt tall
  • [ ] Destructive buttons use .destructive role

Privacy

  • [ ] Permissions requested in context (not at launch)
  • [ ] Custom explanation before system permission dialog
  • [ ] Sign in with Apple offered with other providers
  • [ ] Basic features usable without account
  • [ ] ATT prompt shown if tracking, denial respected

System Integration

  • [ ] App handles interruptions gracefully (calls, background, Siri)
  • [ ] App content indexed for Spotlight
  • [ ] Share Sheet available for shareable content

References

| 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.