Apple HIG SwiftUI iOS 26 / Swift 6.2 Best Practices
A principal designer's lens for evaluating and refactoring SwiftUI interfaces to Apple-quality standards, grounded in Rams, Segall, and Edson. Contains 51 rules across 8 categories, each grounded in specific principles from three foundational design texts:
- Dieter Rams — Ten Principles for Good Design ("less, but better," "design should be honest")
- Ken Segall — Insanely Simple (simplicity as a core principle for intuitive, beautiful products)
- John Edson — Design Like Apple (design-focused culture, prototyping to perfection, the product is the marketing)
Categories are ordered by a visual review process: start with what to remove, then what to clarify, then what to make honest, invisible, systematic, thorough, enduring, and finally what to refine.
Scope & Relationship to Sibling Skills
This skill is the refactoring and review lens — it evaluates existing UI and identifies visual anti-patterns to fix. When loaded alongside ios-design (building new UI), ios-hig (HIG compliance), or swift-refactor (code-level refactoring), this skill supersedes overlapping rules with more detailed "incorrect -> correct" transformations and "When NOT to apply" guidance. Use this skill for auditing and improving existing screens; use the siblings for greenfield implementation.
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:
- Reviewing existing SwiftUI screens for visual quality issues
- Auditing whether every element on screen earns its place (Rams #10)
- Evaluating if the interface is self-explanatory without tooltips (Rams #4)
- Checking that colors, states, and hierarchy tell the truth (Rams #6)
- Ensuring animations and materials are invisible, not decorative (Rams #5)
- Verifying spacing, radii, and colors form a coherent system (Edson "Systems Thinking")
- Confirming edge cases — reduce motion, touch targets, safe areas — are handled (Rams #8)
- Adopting iOS 26 / Swift 6.2 APIs that refine previously impossible interactions (Edson "Design Out Loud")
Rule Categories by Priority
| Priority |
Category |
Principle |
Impact |
Prefix |
Rules |
| 1 |
Less, But Better |
Rams #10 + Segall "Think Minimal" |
CRITICAL |
less- |
7 |
| 2 |
Self-Evident Design |
Rams #4 + Segall "Think Human" |
CRITICAL |
evident- |
6 |
| 3 |
Honest Interfaces |
Rams #6 + Segall "Think Brutal" |
CRITICAL |
honest- |
6 |
| 4 |
Invisible Design |
Rams #5 + Edson "Product Is Marketing" |
HIGH |
invisible- |
6 |
| 5 |
Systems, Not Pieces |
Edson "Systems Thinking" + Rams #8 |
HIGH |
system- |
6 |
| 6 |
Thorough to the Last Detail |
Rams #8 + Rams #2 |
HIGH |
thorough- |
7 |
| 7 |
Enduring Over Trendy |
Rams #7 + Edson "Design With Conviction" |
MEDIUM-HIGH |
enduring- |
5 |
| 8 |
Refined Through Iteration |
Edson "Design Out Loud" + Rams #1/#3 |
MEDIUM |
refined- |
8 |
Quick Reference
1. Less, But Better (CRITICAL)
Rams #10: "Good design is as little design as possible." Segall: Apple succeeded by saying no to a thousand things.
less-single-focal - One primary focal point per screen
less-type-restraint - Limit to 3-4 distinct type treatments per screen
less-one-typeface - One typeface per app, differentiate with weight and size
less-color-restraint - Reserve saturated colors for small interactive elements
less-one-color-purpose - Each semantic color serves exactly one purpose
less-purposeful-motion - Every animation must communicate state change or provide feedback
less-fewer-controls - Remove controls that do not serve the core task
2. Self-Evident Design (CRITICAL)
Rams #4: "Good design makes a product understandable." Segall: interfaces must speak in terms people understand.
evident-visual-weight - Combine size, weight, and contrast for hierarchy
evident-whitespace-grouping - Use whitespace to separate conceptual groups
evident-progressive-disclosure - Use progressive disclosure for dense information
evident-reading-order - Align visual weight with logical reading order
evident-navigation-intent - Sheets for tasks and creation, push for drill-down hierarchy
evident-label-clarity - Use clear labels over ambiguous icons
3. Honest Interfaces (CRITICAL)
Rams #6: "Good design is honest." Segall: clarity without sugar-coating.
honest-semantic-colors - Use semantic colors, never hard-coded black or white
honest-contrast - Ensure WCAG AA contrast ratios
honest-dark-mode - Define light and dark variants for every custom color
honest-foreground-style - Use foregroundStyle over foregroundColor
honest-depth-cues - Use materials for layering, not drop shadows for depth
honest-loading-states - Show real progress, not indefinite spinners
4. Invisible Design (HIGH)
Rams #5: "Good design is unobtrusive." Edson: the product itself is the marketing.
invisible-spring-physics - Default to spring animations for all UI transitions
invisible-spring-presets - Use .smooth for routine, .snappy for interactive, .bouncy for delight
invisible-no-easing - Prefer springs over linear and easeInOut for UI elements
invisible-system-materials - Use system materials, not custom semi-transparent backgrounds
invisible-symbol-effects - Use built-in symbolEffect, not manual symbol animation
invisible-content-transitions - Use contentTransition for changing text and numbers
5. Systems, Not Pieces (HIGH)
Edson: "Design is systems thinking." Rams #8: nothing must be arbitrary or left to chance.
system-spacing-grid - Use a 4pt base unit for all spacing
system-consistent-padding - Use consistent padding across all screens
system-corner-radii - Standardize corner radii per component type
system-alignment - Consistent alignment per content type within a screen
system-color-naming - Name custom colors by role, not hue
system-brand-integration - Map brand palette onto iOS semantic color roles
6. Thorough to the Last Detail (HIGH)
Rams #8: "Care and accuracy in the design process show respect for the user." Rams #2: if the user cannot reliably use it, the product has failed.
thorough-reduce-motion - Always provide reduce motion fallback
thorough-touch-targets - All interactive elements at least 44x44 points
thorough-safe-areas - Always respect safe areas
thorough-readable-weights - Avoid light font weights for body text
thorough-vibrancy-levels - Match vibrancy level to content importance
thorough-material-thickness - Choose material thickness by contrast needs
thorough-background-interaction - Enable background interaction for peek-style sheets
7. Enduring Over Trendy (MEDIUM-HIGH)
Rams #7: "Good design is long-lasting." Edson: commit to a voice that persists across product generations.
enduring-system-text-styles - Use Apple text styles, never fixed font sizes
enduring-weight-not-caps - Use weight for emphasis, not ALL CAPS
enduring-swipe-back - Never break the system back-swipe gesture
enduring-zoom-navigation - Use zoom transitions for collection-to-detail navigation
enduring-card-modularity - Use self-contained cards for dashboard layouts
8. Refined Through Iteration (MEDIUM)
Edson: "Design out loud" — prototype relentlessly until every interaction feels inevitable. Rams #1: innovation serves genuine purpose.
refined-scroll-transitions - Use scrollTransition for scroll-position visual effects
refined-phase-animator - Use PhaseAnimator for multi-step animation sequences
refined-mesh-gradients - Use MeshGradient for premium dynamic backgrounds
refined-text-renderer - Use TextRenderer for hero text animations only
refined-inspector - Use inspector for trailing-edge detail panels
refined-multi-detent - Provide multiple sheet detents with drag indicator
refined-matched-geometry - Use matchedGeometryEffect for contextual origin transitions
refined-no-hard-cuts - Always animate between states, even minimally
How to Use
Read individual reference files for detailed explanations and code examples:
- Section definitions - Category structure, principle sources, and impact levels
- Rule template - Template for adding new rules
Reference Files
| File |
Description |
| references/_sections.md |
Category definitions and principle grounding |
| assets/templates/_template.md |
Template for new rules |
| metadata.json |
Version and reference information |
1---2name: ios-ui-refactor3description: Principal-level SwiftUI UI review and refactoring patterns for iOS 26 / Swift 6.2 clinic-architecture apps, grounded in Rams, Segall, and Edson principles. Use when auditing or improving existing SwiftUI screens, transitions, animations, and visual systems while preserving brand identity and respecting clinic Domain/Data/App boundaries.4---5
6# Apple HIG SwiftUI iOS 26 / Swift 6.2 Best Practices
7
8A principal designer's lens for evaluating and refactoring SwiftUI interfaces to Apple-quality standards, grounded in Rams, Segall, and Edson. Contains 51 rules across 8 categories, each grounded in specific principles from three foundational design texts:
9
10- **Dieter Rams** — *Ten Principles for Good Design* ("less, but better," "design should be honest")
11- **Ken Segall** — *Insanely Simple* (simplicity as a core principle for intuitive, beautiful products)
12- **John Edson** — *Design Like Apple* (design-focused culture, prototyping to perfection, the product is the marketing)
13
14Categories are ordered by a visual review process: start with what to remove, then what to clarify, then what to make honest, invisible, systematic, thorough, enduring, and finally what to refine.
15
16## Scope & Relationship to Sibling Skills
17
18This skill is the **refactoring and review lens** — it evaluates existing UI and identifies visual anti-patterns to fix. When loaded alongside `ios-design` (building new UI), `ios-hig` (HIG compliance), or `swift-refactor` (code-level refactoring), this skill supersedes overlapping rules with more detailed "incorrect -> correct" transformations and "When NOT to apply" guidance. Use this skill for auditing and improving existing screens; use the siblings for greenfield implementation.
19
20
21## Clinic Architecture Contract (iOS 26 / Swift 6.2)
22
23All guidance in this skill assumes the clinic modular MVVM-C architecture:
24
25- Feature modules import `Domain` + `DesignSystem` only (never `Data`, never sibling features)
26- App target is the convergence point and owns `DependencyContainer`, concrete coordinators, and Route Shell wiring
27- `Domain` stays pure Swift and defines models plus repository, `*Coordinating`, `ErrorRouting`, and `AppError` contracts
28- `Data` owns SwiftData/network/sync/retry/background I/O and implements Domain protocols
29- Read/write flow defaults to stale-while-revalidate reads and optimistic queued writes
30- ViewModels call repository protocols directly (no default use-case/interactor layer)
31
32## When to Apply
33
34Reference these guidelines when:
35- Reviewing existing SwiftUI screens for visual quality issues
36- Auditing whether every element on screen earns its place (Rams #10)
37- Evaluating if the interface is self-explanatory without tooltips (Rams #4)
38- Checking that colors, states, and hierarchy tell the truth (Rams #6)
39- Ensuring animations and materials are invisible, not decorative (Rams #5)
40- Verifying spacing, radii, and colors form a coherent system (Edson "Systems Thinking")
41- Confirming edge cases — reduce motion, touch targets, safe areas — are handled (Rams #8)
42- Adopting iOS 26 / Swift 6.2 APIs that refine previously impossible interactions (Edson "Design Out Loud")
43
44## Rule Categories by Priority
45
46| Priority | Category | Principle | Impact | Prefix | Rules |
47|----------|----------|-----------|--------|--------|-------|
48| 1 | Less, But Better | Rams #10 + Segall "Think Minimal" | CRITICAL | `less-` | 7 |
49| 2 | Self-Evident Design | Rams #4 + Segall "Think Human" | CRITICAL | `evident-` | 6 |
50| 3 | Honest Interfaces | Rams #6 + Segall "Think Brutal" | CRITICAL | `honest-` | 6 |
51| 4 | Invisible Design | Rams #5 + Edson "Product Is Marketing" | HIGH | `invisible-` | 6 |
52| 5 | Systems, Not Pieces | Edson "Systems Thinking" + Rams #8 | HIGH | `system-` | 6 |
53| 6 | Thorough to the Last Detail | Rams #8 + Rams #2 | HIGH | `thorough-` | 7 |
54| 7 | Enduring Over Trendy | Rams #7 + Edson "Design With Conviction" | MEDIUM-HIGH | `enduring-` | 5 |
55| 8 | Refined Through Iteration | Edson "Design Out Loud" + Rams #1/#3 | MEDIUM | `refined-` | 8 |
56
57## Quick Reference
58
59### 1. Less, But Better (CRITICAL)
60
61Rams #10: "Good design is as little design as possible." Segall: Apple succeeded by saying no to a thousand things.
62
63- [`less-single-focal`](references/less-single-focal.md) - One primary focal point per screen
64- [`less-type-restraint`](references/less-type-restraint.md) - Limit to 3-4 distinct type treatments per screen
65- [`less-one-typeface`](references/less-one-typeface.md) - One typeface per app, differentiate with weight and size
66- [`less-color-restraint`](references/less-color-restraint.md) - Reserve saturated colors for small interactive elements
67- [`less-one-color-purpose`](references/less-one-color-purpose.md) - Each semantic color serves exactly one purpose
68- [`less-purposeful-motion`](references/less-purposeful-motion.md) - Every animation must communicate state change or provide feedback
69- [`less-fewer-controls`](references/less-fewer-controls.md) - Remove controls that do not serve the core task
70
71### 2. Self-Evident Design (CRITICAL)
72
73Rams #4: "Good design makes a product understandable." Segall: interfaces must speak in terms people understand.
74
75- [`evident-visual-weight`](references/evident-visual-weight.md) - Combine size, weight, and contrast for hierarchy
76- [`evident-whitespace-grouping`](references/evident-whitespace-grouping.md) - Use whitespace to separate conceptual groups
77- [`evident-progressive-disclosure`](references/evident-progressive-disclosure.md) - Use progressive disclosure for dense information
78- [`evident-reading-order`](references/evident-reading-order.md) - Align visual weight with logical reading order
79- [`evident-navigation-intent`](references/evident-navigation-intent.md) - Sheets for tasks and creation, push for drill-down hierarchy
80- [`evident-label-clarity`](references/evident-label-clarity.md) - Use clear labels over ambiguous icons
81
82### 3. Honest Interfaces (CRITICAL)
83
84Rams #6: "Good design is honest." Segall: clarity without sugar-coating.
85
86- [`honest-semantic-colors`](references/honest-semantic-colors.md) - Use semantic colors, never hard-coded black or white
87- [`honest-contrast`](references/honest-contrast.md) - Ensure WCAG AA contrast ratios
88- [`honest-dark-mode`](references/honest-dark-mode.md) - Define light and dark variants for every custom color
89- [`honest-foreground-style`](references/honest-foreground-style.md) - Use foregroundStyle over foregroundColor
90- [`honest-depth-cues`](references/honest-depth-cues.md) - Use materials for layering, not drop shadows for depth
91- [`honest-loading-states`](references/honest-loading-states.md) - Show real progress, not indefinite spinners
92
93### 4. Invisible Design (HIGH)
94
95Rams #5: "Good design is unobtrusive." Edson: the product itself is the marketing.
96
97- [`invisible-spring-physics`](references/invisible-spring-physics.md) - Default to spring animations for all UI transitions
98- [`invisible-spring-presets`](references/invisible-spring-presets.md) - Use .smooth for routine, .snappy for interactive, .bouncy for delight
99- [`invisible-no-easing`](references/invisible-no-easing.md) - Prefer springs over linear and easeInOut for UI elements
100- [`invisible-system-materials`](references/invisible-system-materials.md) - Use system materials, not custom semi-transparent backgrounds
101- [`invisible-symbol-effects`](references/invisible-symbol-effects.md) - Use built-in symbolEffect, not manual symbol animation
102- [`invisible-content-transitions`](references/invisible-content-transitions.md) - Use contentTransition for changing text and numbers
103
104### 5. Systems, Not Pieces (HIGH)
105
106Edson: "Design is systems thinking." Rams #8: nothing must be arbitrary or left to chance.
107
108- [`system-spacing-grid`](references/system-spacing-grid.md) - Use a 4pt base unit for all spacing
109- [`system-consistent-padding`](references/system-consistent-padding.md) - Use consistent padding across all screens
110- [`system-corner-radii`](references/system-corner-radii.md) - Standardize corner radii per component type
111- [`system-alignment`](references/system-alignment.md) - Consistent alignment per content type within a screen
112- [`system-color-naming`](references/system-color-naming.md) - Name custom colors by role, not hue
113- [`system-brand-integration`](references/system-brand-integration.md) - Map brand palette onto iOS semantic color roles
114
115### 6. Thorough to the Last Detail (HIGH)
116
117Rams #8: "Care and accuracy in the design process show respect for the user." Rams #2: if the user cannot reliably use it, the product has failed.
118
119- [`thorough-reduce-motion`](references/thorough-reduce-motion.md) - Always provide reduce motion fallback
120- [`thorough-touch-targets`](references/thorough-touch-targets.md) - All interactive elements at least 44x44 points
121- [`thorough-safe-areas`](references/thorough-safe-areas.md) - Always respect safe areas
122- [`thorough-readable-weights`](references/thorough-readable-weights.md) - Avoid light font weights for body text
123- [`thorough-vibrancy-levels`](references/thorough-vibrancy-levels.md) - Match vibrancy level to content importance
124- [`thorough-material-thickness`](references/thorough-material-thickness.md) - Choose material thickness by contrast needs
125- [`thorough-background-interaction`](references/thorough-background-interaction.md) - Enable background interaction for peek-style sheets
126
127### 7. Enduring Over Trendy (MEDIUM-HIGH)
128
129Rams #7: "Good design is long-lasting." Edson: commit to a voice that persists across product generations.
130
131- [`enduring-system-text-styles`](references/enduring-system-text-styles.md) - Use Apple text styles, never fixed font sizes
132- [`enduring-weight-not-caps`](references/enduring-weight-not-caps.md) - Use weight for emphasis, not ALL CAPS
133- [`enduring-swipe-back`](references/enduring-swipe-back.md) - Never break the system back-swipe gesture
134- [`enduring-zoom-navigation`](references/enduring-zoom-navigation.md) - Use zoom transitions for collection-to-detail navigation
135- [`enduring-card-modularity`](references/enduring-card-modularity.md) - Use self-contained cards for dashboard layouts
136
137### 8. Refined Through Iteration (MEDIUM)
138
139Edson: "Design out loud" — prototype relentlessly until every interaction feels inevitable. Rams #1: innovation serves genuine purpose.
140
141- [`refined-scroll-transitions`](references/refined-scroll-transitions.md) - Use scrollTransition for scroll-position visual effects
142- [`refined-phase-animator`](references/refined-phase-animator.md) - Use PhaseAnimator for multi-step animation sequences
143- [`refined-mesh-gradients`](references/refined-mesh-gradients.md) - Use MeshGradient for premium dynamic backgrounds
144- [`refined-text-renderer`](references/refined-text-renderer.md) - Use TextRenderer for hero text animations only
145- [`refined-inspector`](references/refined-inspector.md) - Use inspector for trailing-edge detail panels
146- [`refined-multi-detent`](references/refined-multi-detent.md) - Provide multiple sheet detents with drag indicator
147- [`refined-matched-geometry`](references/refined-matched-geometry.md) - Use matchedGeometryEffect for contextual origin transitions
148- [`refined-no-hard-cuts`](references/refined-no-hard-cuts.md) - Always animate between states, even minimally
149
150## How to Use
151
152Read individual reference files for detailed explanations and code examples:
153
154- [Section definitions](references/_sections.md) - Category structure, principle sources, and impact levels
155- [Rule template](assets/templates/_template.md) - Template for adding new rules
156
157## Reference Files
158
159| File | Description |
160|------|-------------|
161| [references/_sections.md](references/_sections.md) | Category definitions and principle grounding |
162| [assets/templates/_template.md](assets/templates/_template.md) | Template for new rules |
163| [metadata.json](metadata.json) | Version and reference information |