Apple Human Interface Guidelines (HIG) Expert
A skill focused on shipping apps that feel native on Apple platforms.
Covers the underlying HIG principles, platform-specific patterns, native
component selection, and accessibility expectations.
This skill is opinionated about native conventions. It's not the
right skill if your goal is to maximize cross-platform UX uniformity over
native fit (see web design guides for that).
When to use this skill
- Designing or reviewing an iOS / iPadOS / macOS / watchOS / tvOS / visionOS app
- Auditing an existing app for HIG compliance
- Picking the right native component (sheet vs popover vs full-screen)
- Adapting an app from one Apple platform to another
- Reviewing typography, color, spacing, and motion against HIG
- Auditing accessibility against Apple's accessibility expectations
- Onboarding a designer or PM new to Apple-platform design
Inputs the advisor expects
- Target platform(s) and version range (iOS 17+, macOS 14+, etc.)
- App type (utility, productivity, social, games, media)
- Current designs / screenshots (described or referenced)
- Stack: SwiftUI vs UIKit / AppKit, recent or legacy codebase
- Accessibility maturity (WCAG audit done; VoiceOver tested)
Workflows
Workflow 1 — Audit screens for HIG compliance
- Describe or reference each screen.
- Run
hig_compliance_checker.py with the screen inventory.
- Address findings by category (navigation, typography, controls, spacing, motion).
python3 apple-hig-expert/scripts/hig_compliance_checker.py \
--input screens.json --format markdown
Workflow 2 — Pick the right component for a flow
- Describe the interaction goal.
- Use
component_pattern_lookup.py to surface candidate patterns,
trade-offs, and platform-specific guidance.
python3 apple-hig-expert/scripts/component_pattern_lookup.py \
--platform ios --goal "show options without leaving context" --format markdown
Workflow 3 — Audit accessibility against Apple expectations
- Capture screen inventory + accessibility attributes (labels, hints, traits).
- Run
accessibility_auditor.py to surface gaps.
- Use Apple Accessibility Inspector to validate.
python3 apple-hig-expert/scripts/accessibility_auditor.py \
--input a11y_state.json --format markdown
Decision frameworks
Sheets vs popovers vs full-screen
| Pattern |
When to use |
Platform |
| Sheet (medium / large) |
Modal task with clear escape |
iOS, iPadOS, macOS, visionOS |
| Popover |
Context-anchored options, brief |
iPadOS (compact: replaced with sheet), macOS |
| Full-screen cover |
Immersive task, e.g., photo editing |
iOS |
| Push (navigation stack) |
Hierarchical drill-in |
iOS, iPadOS |
| Inspector |
Persistent secondary content |
macOS, iPadOS |
| Toolbar item |
Quick action on current context |
All |
Common mistake: popover on compact iPhone (it becomes a sheet automatically;
design for both).
When to use SwiftUI vs UIKit
- SwiftUI — new apps, simple-to-moderate complexity, multi-platform from one codebase
- UIKit — legacy code, complex interactions not yet ergonomic in SwiftUI, performance-sensitive
- Mixed — common; embed SwiftUI in UIKit hosts or vice versa
The trend (2026) is SwiftUI-first for new development; UIKit retains
strength in performance-sensitive lists and complex gesture handling.
Color and dark mode
- Use semantic colors (
systemBackground, secondaryLabel) — they
adapt to light/dark mode automatically
- Avoid hardcoded hex values for system-feeling content
- Test in both light + dark mode + increased contrast settings
- Brand colors: assess contrast in both modes; use Asset Catalog with
separate light/dark variants
Typography
- Use Dynamic Type styles (
largeTitle, body, caption) — they
scale with user accessibility settings
- Don't hardcode font sizes for body text
- Custom fonts: still respect Dynamic Type through
UIFontMetrics /
SwiftUI dynamicTypeSize
- Test at largest Dynamic Type setting; design must remain usable
Common engagements
"Help me adapt our iPhone app for iPad"
- Identify navigation: sidebar (NavigationSplitView) vs tabs at iPad sizes
- Use Inspector for secondary content
- Convert sheets to popovers where appropriate
- Adapt to multitasking (split view, slide over)
- Add hardware support: Pencil, keyboard shortcuts, pointer interactions
"Our app feels un-Apple-y. What's wrong?"
- Check typography — using Dynamic Type styles, not hardcoded sizes?
- Check colors — semantic colors, dark mode parity?
- Check spacing — multiples of 4 or 8; not custom every-screen
- Check controls — using native ones, not custom toggles/buttons?
- Check navigation — does back gesture work? Does state persist correctly?
"Make our app accessible"
- Every interactive element has a label
- Decorative images marked
accessibilityHidden
- Focus order makes sense for VoiceOver
- Custom controls have correct
accessibilityTraits
- Touch targets ≥44pt × 44pt
- Color isn't the only way information is conveyed
- Reduced motion respected
- Test with VoiceOver, Voice Control, Switch Control, Dynamic Type max
Anti-patterns to avoid
- Custom UI for things iOS already provides. Use native; users expect it.
- Hardcoded font sizes. Breaks Dynamic Type; breaks accessibility.
- Same UI across all Apple platforms. Each platform has different conventions.
- Hamburger menu on iOS. Tab bar is more discoverable.
- Modal-heavy navigation. Apple's nav stack is the primary pattern.
- Custom navigation bar. Use the system one; users know how it works.
- Ignoring safe area insets. Content gets clipped behind notches and home indicators.
- No haptic feedback on iOS. Apps that use it feel premium.
- No keyboard support on iPad. Power users will leave.
References
references/hig-fundamentals.md — principles, design language, foundational patterns
references/ios-component-patterns.md — sheets, navigation, controls, gestures, lists
references/cross-platform-considerations.md — iPad, Mac, Watch, TV, Vision differences
Related skills
product-team/product-designer — broader product design
product-team/ui-design-system — design system construction
product-team/ux-researcher-designer — research informing design
engineering/senior-frontend — implementation
1---
2name: apple-hig-expert
3description: >
4 Apple Human Interface Guidelines expert across iOS, iPadOS, macOS, watchOS,
5 tvOS, and visionOS. Use when designing or reviewing an Apple-platform app,
6 auditing for HIG compliance, picking native components, or validating
7 accessibility.
8license: MIT + Commons Clause
9metadata:
10 version: 1.0.0
11 author: borghei
12 category: product-team
13 domain: design
14 updated: 2026-05-27
15 tags: [apple, ios, ipados, macos, watchos, tvos, visionos, hig, design, accessibility]
16---
17
18# Apple Human Interface Guidelines (HIG) Expert
19
20A skill focused on shipping apps that feel native on Apple platforms.
21Covers the underlying HIG principles, platform-specific patterns, native
22component selection, and accessibility expectations.
23
24This skill is opinionated about **native conventions**. It's not the
25right skill if your goal is to maximize cross-platform UX uniformity over
26native fit (see web design guides for that).
27
28## When to use this skill
29
30- Designing or reviewing an iOS / iPadOS / macOS / watchOS / tvOS / visionOS app
31- Auditing an existing app for HIG compliance
32- Picking the right native component (sheet vs popover vs full-screen)
33- Adapting an app from one Apple platform to another
34- Reviewing typography, color, spacing, and motion against HIG
35- Auditing accessibility against Apple's accessibility expectations
36- Onboarding a designer or PM new to Apple-platform design
37
38## Inputs the advisor expects
39
40- Target platform(s) and version range (iOS 17+, macOS 14+, etc.)
41- App type (utility, productivity, social, games, media)
42- Current designs / screenshots (described or referenced)
43- Stack: SwiftUI vs UIKit / AppKit, recent or legacy codebase
44- Accessibility maturity (WCAG audit done; VoiceOver tested)
45
46## Workflows
47
48### Workflow 1 — Audit screens for HIG compliance
49
501. Describe or reference each screen.
512. Run `hig_compliance_checker.py` with the screen inventory.
523. Address findings by category (navigation, typography, controls, spacing, motion).
53
54```bash
55python3 apple-hig-expert/scripts/hig_compliance_checker.py \
56 --input screens.json --format markdown
57```
58
59### Workflow 2 — Pick the right component for a flow
60
611. Describe the interaction goal.
622. Use `component_pattern_lookup.py` to surface candidate patterns,
63 trade-offs, and platform-specific guidance.
64
65```bash
66python3 apple-hig-expert/scripts/component_pattern_lookup.py \
67 --platform ios --goal "show options without leaving context" --format markdown
68```
69
70### Workflow 3 — Audit accessibility against Apple expectations
71
721. Capture screen inventory + accessibility attributes (labels, hints, traits).
732. Run `accessibility_auditor.py` to surface gaps.
743. Use Apple Accessibility Inspector to validate.
75
76```bash
77python3 apple-hig-expert/scripts/accessibility_auditor.py \
78 --input a11y_state.json --format markdown
79```
80
81## Decision frameworks
82
83### Sheets vs popovers vs full-screen
84
85| Pattern | When to use | Platform |
86|---------|-------------|----------|
87| Sheet (medium / large) | Modal task with clear escape | iOS, iPadOS, macOS, visionOS |
88| Popover | Context-anchored options, brief | iPadOS (compact: replaced with sheet), macOS |
89| Full-screen cover | Immersive task, e.g., photo editing | iOS |
90| Push (navigation stack) | Hierarchical drill-in | iOS, iPadOS |
91| Inspector | Persistent secondary content | macOS, iPadOS |
92| Toolbar item | Quick action on current context | All |
93
94Common mistake: popover on compact iPhone (it becomes a sheet automatically;
95design for both).
96
97### When to use SwiftUI vs UIKit
98
99- **SwiftUI** — new apps, simple-to-moderate complexity, multi-platform from one codebase
100- **UIKit** — legacy code, complex interactions not yet ergonomic in SwiftUI, performance-sensitive
101- **Mixed** — common; embed SwiftUI in UIKit hosts or vice versa
102
103The trend (2026) is SwiftUI-first for new development; UIKit retains
104strength in performance-sensitive lists and complex gesture handling.
105
106### Color and dark mode
107
108- Use **semantic colors** (`systemBackground`, `secondaryLabel`) — they
109 adapt to light/dark mode automatically
110- Avoid hardcoded hex values for system-feeling content
111- Test in both light + dark mode + increased contrast settings
112- Brand colors: assess contrast in both modes; use Asset Catalog with
113 separate light/dark variants
114
115### Typography
116
117- Use **Dynamic Type** styles (`largeTitle`, `body`, `caption`) — they
118 scale with user accessibility settings
119- Don't hardcode font sizes for body text
120- Custom fonts: still respect Dynamic Type through `UIFontMetrics` /
121 SwiftUI `dynamicTypeSize`
122- Test at largest Dynamic Type setting; design must remain usable
123
124## Common engagements
125
126### "Help me adapt our iPhone app for iPad"
1271. Identify navigation: sidebar (NavigationSplitView) vs tabs at iPad sizes
1282. Use Inspector for secondary content
1293. Convert sheets to popovers where appropriate
1304. Adapt to multitasking (split view, slide over)
1315. Add hardware support: Pencil, keyboard shortcuts, pointer interactions
132
133### "Our app feels un-Apple-y. What's wrong?"
1341. Check typography — using Dynamic Type styles, not hardcoded sizes?
1352. Check colors — semantic colors, dark mode parity?
1363. Check spacing — multiples of 4 or 8; not custom every-screen
1374. Check controls — using native ones, not custom toggles/buttons?
1385. Check navigation — does back gesture work? Does state persist correctly?
139
140### "Make our app accessible"
1411. Every interactive element has a label
1422. Decorative images marked `accessibilityHidden`
1433. Focus order makes sense for VoiceOver
1444. Custom controls have correct `accessibilityTraits`
1455. Touch targets ≥44pt × 44pt
1466. Color isn't the only way information is conveyed
1477. Reduced motion respected
1488. Test with VoiceOver, Voice Control, Switch Control, Dynamic Type max
149
150## Anti-patterns to avoid
151
152- **Custom UI for things iOS already provides.** Use native; users expect it.
153- **Hardcoded font sizes.** Breaks Dynamic Type; breaks accessibility.
154- **Same UI across all Apple platforms.** Each platform has different conventions.
155- **Hamburger menu on iOS.** Tab bar is more discoverable.
156- **Modal-heavy navigation.** Apple's nav stack is the primary pattern.
157- **Custom navigation bar.** Use the system one; users know how it works.
158- **Ignoring safe area insets.** Content gets clipped behind notches and home indicators.
159- **No haptic feedback on iOS.** Apps that use it feel premium.
160- **No keyboard support on iPad.** Power users will leave.
161
162## References
163
164- `references/hig-fundamentals.md` — principles, design language, foundational patterns
165- `references/ios-component-patterns.md` — sheets, navigation, controls, gestures, lists
166- `references/cross-platform-considerations.md` — iPad, Mac, Watch, TV, Vision differences
167
168## Related skills
169
170- `product-team/product-designer` — broader product design
171- `product-team/ui-design-system` — design system construction
172- `product-team/ux-researcher-designer` — research informing design
173- `engineering/senior-frontend` — implementation