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