Apple iOS HIG Best Practices
Comprehensive guide for Apple Human Interface Guidelines compliance in iOS apps built with SwiftUI. Contains 34 rules across 6 categories covering navigation, interaction design, accessibility, user feedback, UX patterns, and visual design.
Clinic Architecture Contract (iOS 26 / Swift 6.2)
All guidance in this skill assumes the clinic modular MVVM-C architecture:
- Feature modules import
Domain + DesignSystem only (never Data, never sibling features)
- App target is the convergence point and owns
DependencyContainer, concrete coordinators, and Route Shell wiring
Domain stays pure Swift and defines models plus repository, *Coordinating, ErrorRouting, and AppError contracts
Data owns SwiftData/network/sync/retry/background I/O and implements Domain protocols
- Read/write flow defaults to stale-while-revalidate reads and optimistic queued writes
- ViewModels call repository protocols directly (no default use-case/interactor layer)
When to Apply
Reference these guidelines when:
- Building navigation hierarchies with tab bars, NavigationStack, or split views
- Designing touch interactions, gestures, and haptic feedback
- Ensuring accessibility with VoiceOver, Dynamic Type, and color contrast
- Implementing loading states, error handling, and empty states
- Building onboarding flows, permission requests, and confirmation dialogs
- Supporting dark mode, SF Symbols, and standard layout margins
- Reviewing apps for HIG compliance
Rule Categories by Priority
| Priority |
Category |
Impact |
Prefix |
| 1 |
Navigation |
CRITICAL |
nav- |
| 2 |
Interaction Design |
CRITICAL |
inter- |
| 3 |
Accessibility |
CRITICAL |
acc- |
| 4 |
User Feedback |
HIGH |
feed- |
| 5 |
UX Patterns |
HIGH |
ux- |
| 6 |
Visual Design |
HIGH |
vis- |
Quick Reference
1. Navigation (CRITICAL)
nav-tab-bar - Design tab bars for top-level navigation
nav-navigation-stack - Use NavigationStack for hierarchical navigation
nav-toolbar-placement - Place actions in toolbars using standard placements
2. Interaction Design (CRITICAL)
inter-touch-targets - Maintain 44pt minimum touch targets
inter-gesture-patterns - Use standard gesture patterns
inter-haptic-feedback - Add haptic feedback for meaningful events
inter-keyboard-handling - Handle keyboard appearance gracefully
inter-drag-drop - Support drag and drop for content transfer
inter-pull-to-refresh - Support pull to refresh for lists
inter-swipe-actions - Add swipe actions for contextual operations
inter-list-search - Use searchable for built-in search
3. Accessibility (CRITICAL)
acc-labels - Provide meaningful accessibility labels
acc-dynamic-type - Support Dynamic Type for all text
acc-color-contrast - Maintain sufficient color contrast
acc-reduce-motion - Respect reduce motion preference
acc-color-independent - Never rely on color alone
acc-focus-management - Manage focus for assistive technologies
acc-scaled-metric - Use ScaledMetric for adaptive sizing
acc-view-that-fits - Use ViewThatFits for adaptive layouts
4. User Feedback (HIGH)
feed-loading-states - Show appropriate loading indicators
feed-error-states - Handle errors with clear recovery actions
feed-notifications - Use notifications judiciously
feed-success-confirmation - Confirm successful actions appropriately
feed-empty-states - Design helpful empty states
5. UX Patterns (HIGH)
ux-onboarding - Design minimal onboarding
ux-permissions - Request permissions in context
ux-modality - Use modality appropriately
ux-confirmation-dialog - Use confirmation dialogs for destructive actions
ux-data-entry - Minimize data entry friction
ux-undo - Support undo for destructive actions
ux-settings - Organize settings logically
6. Visual Design (HIGH)
vis-dark-mode - Support dark mode with semantic colors
vis-sf-symbols - Use SF Symbols with correct rendering mode and weight
vis-layout-margins - Use standard layout margins and safe areas
How to Use
Read individual reference files for detailed explanations and code examples:
- Section definitions - Category structure and impact levels
- Rule template - Template for adding new rules
Reference Files
| File |
Description |
| references/_sections.md |
Category definitions and ordering |
| assets/templates/_template.md |
Template for new rules |
1---2name: ios-hig3description: Apple iOS HIG Best Practices4---5# Apple iOS HIG Best Practices67Comprehensive guide for Apple Human Interface Guidelines compliance in iOS apps built with SwiftUI. Contains 34 rules across 6 categories covering navigation, interaction design, accessibility, user feedback, UX patterns, and visual design.8910## Clinic Architecture Contract (iOS 26 / Swift 6.2)1112All guidance in this skill assumes the clinic modular MVVM-C architecture:1314- Feature modules import `Domain` + `DesignSystem` only (never `Data`, never sibling features)15- App target is the convergence point and owns `DependencyContainer`, concrete coordinators, and Route Shell wiring16- `Domain` stays pure Swift and defines models plus repository, `*Coordinating`, `ErrorRouting`, and `AppError` contracts17- `Data` owns SwiftData/network/sync/retry/background I/O and implements Domain protocols18- Read/write flow defaults to stale-while-revalidate reads and optimistic queued writes19- ViewModels call repository protocols directly (no default use-case/interactor layer)2021## When to Apply2223Reference these guidelines when:24- Building navigation hierarchies with tab bars, NavigationStack, or split views25- Designing touch interactions, gestures, and haptic feedback26- Ensuring accessibility with VoiceOver, Dynamic Type, and color contrast27- Implementing loading states, error handling, and empty states28- Building onboarding flows, permission requests, and confirmation dialogs29- Supporting dark mode, SF Symbols, and standard layout margins30- Reviewing apps for HIG compliance3132## Rule Categories by Priority3334| Priority | Category | Impact | Prefix |35|----------|----------|--------|--------|36| 1 | Navigation | CRITICAL | `nav-` |37| 2 | Interaction Design | CRITICAL | `inter-` |38| 3 | Accessibility | CRITICAL | `acc-` |39| 4 | User Feedback | HIGH | `feed-` |40| 5 | UX Patterns | HIGH | `ux-` |41| 6 | Visual Design | HIGH | `vis-` |4243## Quick Reference4445### 1. Navigation (CRITICAL)4647- [`nav-tab-bar`](references/nav-tab-bar.md) - Design tab bars for top-level navigation48- [`nav-navigation-stack`](references/nav-navigation-stack.md) - Use NavigationStack for hierarchical navigation49- [`nav-toolbar-placement`](references/nav-toolbar-placement.md) - Place actions in toolbars using standard placements5051### 2. Interaction Design (CRITICAL)5253- [`inter-touch-targets`](references/inter-touch-targets.md) - Maintain 44pt minimum touch targets54- [`inter-gesture-patterns`](references/inter-gesture-patterns.md) - Use standard gesture patterns55- [`inter-haptic-feedback`](references/inter-haptic-feedback.md) - Add haptic feedback for meaningful events56- [`inter-keyboard-handling`](references/inter-keyboard-handling.md) - Handle keyboard appearance gracefully57- [`inter-drag-drop`](references/inter-drag-drop.md) - Support drag and drop for content transfer58- [`inter-pull-to-refresh`](references/inter-pull-to-refresh.md) - Support pull to refresh for lists59- [`inter-swipe-actions`](references/inter-swipe-actions.md) - Add swipe actions for contextual operations60- [`inter-list-search`](references/inter-list-search.md) - Use searchable for built-in search6162### 3. Accessibility (CRITICAL)6364- [`acc-labels`](references/acc-labels.md) - Provide meaningful accessibility labels65- [`acc-dynamic-type`](references/acc-dynamic-type.md) - Support Dynamic Type for all text66- [`acc-color-contrast`](references/acc-color-contrast.md) - Maintain sufficient color contrast67- [`acc-reduce-motion`](references/acc-reduce-motion.md) - Respect reduce motion preference68- [`acc-color-independent`](references/acc-color-independent.md) - Never rely on color alone69- [`acc-focus-management`](references/acc-focus-management.md) - Manage focus for assistive technologies70- [`acc-scaled-metric`](references/acc-scaled-metric.md) - Use ScaledMetric for adaptive sizing71- [`acc-view-that-fits`](references/acc-view-that-fits.md) - Use ViewThatFits for adaptive layouts7273### 4. User Feedback (HIGH)7475- [`feed-loading-states`](references/feed-loading-states.md) - Show appropriate loading indicators76- [`feed-error-states`](references/feed-error-states.md) - Handle errors with clear recovery actions77- [`feed-notifications`](references/feed-notifications.md) - Use notifications judiciously78- [`feed-success-confirmation`](references/feed-success-confirmation.md) - Confirm successful actions appropriately79- [`feed-empty-states`](references/feed-empty-states.md) - Design helpful empty states8081### 5. UX Patterns (HIGH)8283- [`ux-onboarding`](references/ux-onboarding.md) - Design minimal onboarding84- [`ux-permissions`](references/ux-permissions.md) - Request permissions in context85- [`ux-modality`](references/ux-modality.md) - Use modality appropriately86- [`ux-confirmation-dialog`](references/ux-confirmation-dialog.md) - Use confirmation dialogs for destructive actions87- [`ux-data-entry`](references/ux-data-entry.md) - Minimize data entry friction88- [`ux-undo`](references/ux-undo.md) - Support undo for destructive actions89- [`ux-settings`](references/ux-settings.md) - Organize settings logically9091### 6. Visual Design (HIGH)9293- [`vis-dark-mode`](references/vis-dark-mode.md) - Support dark mode with semantic colors94- [`vis-sf-symbols`](references/vis-sf-symbols.md) - Use SF Symbols with correct rendering mode and weight95- [`vis-layout-margins`](references/vis-layout-margins.md) - Use standard layout margins and safe areas9697## How to Use9899Read individual reference files for detailed explanations and code examples:100101- [Section definitions](references/_sections.md) - Category structure and impact levels102- [Rule template](assets/templates/_template.md) - Template for adding new rules103104## Reference Files105106| File | Description |107|------|-------------|108| [references/_sections.md](references/_sections.md) | Category definitions and ordering |109| [assets/templates/_template.md](assets/templates/_template.md) | Template for new rules |