Master iOS Human Interface Guidelines and SwiftUI patterns

iOS Mobile Design

by wshobson · MIT license · ★ 39,857 on GitHub · updated Sep 21

iOS Mobile Design cover

Master iOS Human Interface Guidelines and SwiftUI patterns for building native iOS apps. Use when designing iOS interfaces, implementing SwiftUI views, or ensuring apps follow Apple's design principles.

---
name: mobile-ios-design
description: Master iOS Human Interface Guidelines and SwiftUI patterns for building native iOS apps. Use when designing iOS interfaces, implementing SwiftUI views, or ensuring apps follow Apple's design principles.
---

# iOS Mobile Design

Master iOS Human Interface Guidelines (HIG) and SwiftUI patterns to build polished, native iOS applications that feel at home on Apple platforms.

## When to Use This Skill

- Designing iOS app interfaces following Apple HIG
- Building SwiftUI views and layouts
- Implementing iOS navigation patterns (NavigationStack, TabView, sheets)
- Creating adaptive layouts for iPhone and iPad
- Using SF Symbols and system typography
- Building accessible iOS interfaces
- Implementing iOS-specific gestures and interactions

Overview

Master iOS Human Interface Guidelines (HIG) and SwiftUI patterns to build polished, native iOS applications that feel at home on Apple platforms.

Manual install (npx, ZIP)
Claude Codenpx skills add wshobson/agents --skill mobile-ios-design -g -a claude-code
Claude Code (manual)mkdir -p ~/.claude/skills && curl -sL https://codeload.github.com/wshobson/agents/tar.gz/4236bb91f839 \ | tar -xz -C ~/.claude/skills --strip-components=4 agents-4236bb91f839/plugins/ui-design/skills/mobile-ios-design
Windows (PowerShell)New-Item -ItemType Directory -Force "$HOME\.claude\skills" | Out-Null; Invoke-WebRequest "https://m.agentalley.io/zip/3a2f09df6c2fd1579c6c/mobile-ios-design.zip" -OutFile "$env:TEMP\mobile-ios-design.zip"; Expand-Archive "$env:TEMP\mobile-ios-design.zip" -DestinationPath "$HOME\.claude\skills" -Force
Claude.ai / desktopDownload the ZIP and upload it under Settings → Capabilities → Skills.
Codex, Cursor, other agentsPoint them at SKILL.md. The other files are plain text.

Connects with Agent Alley MCP · agentalley.io/mcp

Files included

  • SKILL.md6.8 KB
  • references/3 files · 41.5 KB
Read the files here
wshobson/4236bb94 files
SKILL.md
Show the full text260 lines

iOS Mobile Design

Master iOS Human Interface Guidelines (HIG) and SwiftUI patterns to build polished, native iOS applications that feel at home on Apple platforms.

When to Use This Skill

  • Designing iOS app interfaces following Apple HIG
  • Building SwiftUI views and layouts
  • Implementing iOS navigation patterns (NavigationStack, TabView, sheets)
  • Creating adaptive layouts for iPhone and iPad
  • Using SF Symbols and system typography
  • Building accessible iOS interfaces
  • Implementing iOS-specific gestures and interactions
  • Designing for Dynamic Type and Dark Mode

Core Concepts

1. Human Interface Guidelines Principles

Clarity: Content is legible, icons are precise, adornments are subtle Deference: UI helps users understand content without competing with it Depth: Visual layers and motion convey hierarchy and enable navigation

Platform Considerations:

  • iOS: Touch-first, compact displays, portrait orientation
  • iPadOS: Larger canvas, multitasking, pointer support
  • visionOS: Spatial computing, eye/hand input
2. SwiftUI Layout System

Stack-Based Layouts:

// Vertical stack with alignment
VStack(alignment: .leading, spacing: 12) {
    Text("Title")
        .font(.headline)
    Text("Subtitle")
        .font(.subheadline)
        .foregroundStyle(.secondary)
}

// Horizontal stack with flexible spacing
HStack {
    Image(systemName: "star.fill")
    Text("Featured")
    Spacer()
    Text("View All")
        .foregroundStyle(.blue)
}

Grid Layouts:

// Adaptive grid that fills available width
LazyVGrid(columns: [
    GridItem(.adaptive(minimum: 150, maximum: 200))
], spacing: 16) {
    ForEach(items) { item in
        ItemCard(item: item)
    }
}

// Fixed column grid
LazyVGrid(columns: [
    GridItem(.flexible()),
    GridItem(.flexible()),
    GridItem(.flexible())
], spacing: 12) {
    ForEach(items) { item in
        ItemThumbnail(item: item)
    }
}
3. Navigation Patterns

NavigationStack (iOS 16+):

struct ContentView: View {
    @State private var path = NavigationPath()

    var body: some View {
        NavigationStack(path: $path) {
            List(items) { item in
                NavigationLink(value: item) {
                    ItemRow(item: item)
                }
            }
            .navigationTitle("Items")
            .navigationDestination(for: Item.self) { item in
                ItemDetailView(item: item)
            }
        }
    }
}

TabView (iOS 18+):

struct MainTabView: View {
    @State private var selectedTab = 0

    var body: some View {
        TabView(selection: $selectedTab) {
            Tab("Home", systemImage: "house", value: 0) {
                HomeView()
            }

            Tab("Search", systemImage: "magnifyingglass", value: 1) {
                SearchView()
            }

            Tab("Profile", systemImage: "person", value: 2) {
                ProfileView()
            }
        }
    }
}
4. System Integration

SF Symbols:

// Basic symbol
Image(systemName: "heart.fill")
    .foregroundStyle(.red)

// Symbol with rendering mode
Image(systemName: "cloud.sun.fill")
    .symbolRenderingMode(.multicolor)

// Variable symbol (iOS 16+)
Image(systemName: "speaker.wave.3.fill", variableValue: volume)

// Symbol effect (iOS 17+)
Image(systemName: "bell.fill")
    .symbolEffect(.bounce, value: notificationCount)

Dynamic Type:

// Use semantic fonts
Text("Headline")
    .font(.headline)

Text("Body text that scales with user preferences")
    .font(.body)

// Custom font that respects Dynamic Type
Text("Custom")
    .font(.custom("Avenir", size: 17, relativeTo: .body))
5. Visual Design

Colors and Materials:

// Semantic colors that adapt to light/dark mode
Text("Primary")
    .foregroundStyle(.primary)
Text("Secondary")
    .foregroundStyle(.secondary)

// System materials for blur effects
Rectangle()
    .fill(.ultraThinMaterial)
    .frame(height: 100)

// Vibrant materials for overlays
Text("Overlay")
    .padding()
    .background(.regularMaterial, in: RoundedRectangle(cornerRadius: 12))

Shadows and Depth:

// Standard card shadow
RoundedRectangle(cornerRadius: 16)
    .fill(.background)
    .shadow(color: .black.opacity(0.1), radius: 8, y: 4)

// Elevated appearance
.shadow(radius: 2, y: 1)
.shadow(radius: 8, y: 4)

Quick Start Component

import SwiftUI

struct FeatureCard: View {
    let title: String
    let description: String
    let systemImage: String

    var body: some View {
        HStack(spacing: 16) {
            Image(systemName: systemImage)
                .font(.title)
                .foregroundStyle(.blue)
                .frame(width: 44, height: 44)
                .background(.blue.opacity(0.1), in: Circle())

            VStack(alignment: .leading, spacing: 4) {
                Text(title)
                    .font(.headline)
                Text(description)
                    .font(.subheadline)
                    .foregroundStyle(.secondary)
                    .lineLimit(2)
            }

            Spacer()

            Image(systemName: "chevron.right")
                .foregroundStyle(.tertiary)
        }
        .padding()
        .background(.background, in: RoundedRectangle(cornerRadius: 12))
        .shadow(color: .black.opacity(0.05), radius: 4, y: 2)
    }
}

Best Practices

  1. Use Semantic Colors: Always use .primary, .secondary, .background for automatic light/dark mode support
  2. Embrace SF Symbols: Use system symbols for consistency and automatic accessibility
  3. Support Dynamic Type: Use semantic fonts (.body, .headline) instead of fixed sizes
  4. Add Accessibility: Include .accessibilityLabel() and .accessibilityHint() modifiers
  5. Use Safe Areas: Respect safeAreaInset and avoid hardcoded padding at screen edges
  6. Implement State Restoration: Use @SceneStorage for preserving user state
  7. Support iPad Multitasking: Design for split view and slide over
  8. Test on Device: Simulator doesn't capture full haptic and performance experience

Common Issues

  • Layout Breaking: Use .fixedSize() sparingly; prefer flexible layouts
  • Performance Issues: Use LazyVStack/LazyHStack for long scrolling lists
  • Navigation Bugs: Ensure NavigationLink values are Hashable
  • Dark Mode Problems: Avoid hardcoded colors; use semantic or asset catalog colors
  • Accessibility Failures: Test with VoiceOver enabled
  • Memory Leaks: Watch for strong reference cycles in closures
1---
2name: mobile-ios-design
3description: Master iOS Human Interface Guidelines and SwiftUI patterns for building native iOS apps. Use when designing iOS interfaces, implementing SwiftUI views, or ensuring apps follow Apple's design principles.
4---
5 
6# iOS Mobile Design
7 
8Master iOS Human Interface Guidelines (HIG) and SwiftUI patterns to build polished, native iOS applications that feel at home on Apple platforms.
9 
10## When to Use This Skill
11 
12- Designing iOS app interfaces following Apple HIG
13- Building SwiftUI views and layouts
14- Implementing iOS navigation patterns (NavigationStack, TabView, sheets)
15- Creating adaptive layouts for iPhone and iPad
16- Using SF Symbols and system typography
17- Building accessible iOS interfaces
18- Implementing iOS-specific gestures and interactions
19- Designing for Dynamic Type and Dark Mode
20 
21## Core Concepts
22 
23### 1. Human Interface Guidelines Principles
24 
25**Clarity**: Content is legible, icons are precise, adornments are subtle
26**Deference**: UI helps users understand content without competing with it
27**Depth**: Visual layers and motion convey hierarchy and enable navigation
28 
29**Platform Considerations:**
30 
31- **iOS**: Touch-first, compact displays, portrait orientation
32- **iPadOS**: Larger canvas, multitasking, pointer support
33- **visionOS**: Spatial computing, eye/hand input
34 
35### 2. SwiftUI Layout System
36 
37**Stack-Based Layouts:**
38 
39```swift
40// Vertical stack with alignment
41VStack(alignment: .leading, spacing: 12) {
42 Text("Title")
43 .font(.headline)
44 Text("Subtitle")
45 .font(.subheadline)
46 .foregroundStyle(.secondary)
47}
48 
49// Horizontal stack with flexible spacing
50HStack {
51 Image(systemName: "star.fill")
52 Text("Featured")
53 Spacer()
54 Text("View All")
55 .foregroundStyle(.blue)
56}
57```
58 
59**Grid Layouts:**
60 
61```swift
62// Adaptive grid that fills available width
63LazyVGrid(columns: [
64 GridItem(.adaptive(minimum: 150, maximum: 200))
65], spacing: 16) {
66 ForEach(items) { item in
67 ItemCard(item: item)
68 }
69}
70 
71// Fixed column grid
72LazyVGrid(columns: [
73 GridItem(.flexible()),
74 GridItem(.flexible()),
75 GridItem(.flexible())
76], spacing: 12) {
77 ForEach(items) { item in
78 ItemThumbnail(item: item)
79 }
80}
81```
82 
83### 3. Navigation Patterns
84 
85**NavigationStack (iOS 16+):**
86 
87```swift
88struct ContentView: View {
89 @State private var path = NavigationPath()
90 
91 var body: some View {
92 NavigationStack(path: $path) {
93 List(items) { item in
94 NavigationLink(value: item) {
95 ItemRow(item: item)
96 }
97 }
98 .navigationTitle("Items")
99 .navigationDestination(for: Item.self) { item in
100 ItemDetailView(item: item)
101 }
102 }
103 }
104}
105```
106 
107**TabView (iOS 18+):**
108 
109```swift
110struct MainTabView: View {
111 @State private var selectedTab = 0
112 
113 var body: some View {
114 TabView(selection: $selectedTab) {
115 Tab("Home", systemImage: "house", value: 0) {
116 HomeView()
117 }
118 
119 Tab("Search", systemImage: "magnifyingglass", value: 1) {
120 SearchView()
121 }
122 
123 Tab("Profile", systemImage: "person", value: 2) {
124 ProfileView()
125 }
126 }
127 }
128}
129```
130 
131### 4. System Integration
132 
133**SF Symbols:**
134 
135```swift
136// Basic symbol
137Image(systemName: "heart.fill")
138 .foregroundStyle(.red)
139 
140// Symbol with rendering mode
141Image(systemName: "cloud.sun.fill")
142 .symbolRenderingMode(.multicolor)
143 
144// Variable symbol (iOS 16+)
145Image(systemName: "speaker.wave.3.fill", variableValue: volume)
146 
147// Symbol effect (iOS 17+)
148Image(systemName: "bell.fill")
149 .symbolEffect(.bounce, value: notificationCount)
150```
151 
152**Dynamic Type:**
153 
154```swift
155// Use semantic fonts
156Text("Headline")
157 .font(.headline)
158 
159Text("Body text that scales with user preferences")
160 .font(.body)
161 
162// Custom font that respects Dynamic Type
163Text("Custom")
164 .font(.custom("Avenir", size: 17, relativeTo: .body))
165```
166 
167### 5. Visual Design
168 
169**Colors and Materials:**
170 
171```swift
172// Semantic colors that adapt to light/dark mode
173Text("Primary")
174 .foregroundStyle(.primary)
175Text("Secondary")
176 .foregroundStyle(.secondary)
177 
178// System materials for blur effects
179Rectangle()
180 .fill(.ultraThinMaterial)
181 .frame(height: 100)
182 
183// Vibrant materials for overlays
184Text("Overlay")
185 .padding()
186 .background(.regularMaterial, in: RoundedRectangle(cornerRadius: 12))
187```
188 
189**Shadows and Depth:**
190 
191```swift
192// Standard card shadow
193RoundedRectangle(cornerRadius: 16)
194 .fill(.background)
195 .shadow(color: .black.opacity(0.1), radius: 8, y: 4)
196 
197// Elevated appearance
198.shadow(radius: 2, y: 1)
199.shadow(radius: 8, y: 4)
200```
201 
202## Quick Start Component
203 
204```swift
205import SwiftUI
206 
207struct FeatureCard: View {
208 let title: String
209 let description: String
210 let systemImage: String
211 
212 var body: some View {
213 HStack(spacing: 16) {
214 Image(systemName: systemImage)
215 .font(.title)
216 .foregroundStyle(.blue)
217 .frame(width: 44, height: 44)
218 .background(.blue.opacity(0.1), in: Circle())
219 
220 VStack(alignment: .leading, spacing: 4) {
221 Text(title)
222 .font(.headline)
223 Text(description)
224 .font(.subheadline)
225 .foregroundStyle(.secondary)
226 .lineLimit(2)
227 }
228 
229 Spacer()
230 
231 Image(systemName: "chevron.right")
232 .foregroundStyle(.tertiary)
233 }
234 .padding()
235 .background(.background, in: RoundedRectangle(cornerRadius: 12))
236 .shadow(color: .black.opacity(0.05), radius: 4, y: 2)
237 }
238}
239```
240 
241## Best Practices
242 
2431. **Use Semantic Colors**: Always use `.primary`, `.secondary`, `.background` for automatic light/dark mode support
2442. **Embrace SF Symbols**: Use system symbols for consistency and automatic accessibility
2453. **Support Dynamic Type**: Use semantic fonts (`.body`, `.headline`) instead of fixed sizes
2464. **Add Accessibility**: Include `.accessibilityLabel()` and `.accessibilityHint()` modifiers
2475. **Use Safe Areas**: Respect `safeAreaInset` and avoid hardcoded padding at screen edges
2486. **Implement State Restoration**: Use `@SceneStorage` for preserving user state
2497. **Support iPad Multitasking**: Design for split view and slide over
2508. **Test on Device**: Simulator doesn't capture full haptic and performance experience
251 
252## Common Issues
253 
254- **Layout Breaking**: Use `.fixedSize()` sparingly; prefer flexible layouts
255- **Performance Issues**: Use `LazyVStack`/`LazyHStack` for long scrolling lists
256- **Navigation Bugs**: Ensure `NavigationLink` values are `Hashable`
257- **Dark Mode Problems**: Avoid hardcoded colors; use semantic or asset catalog colors
258- **Accessibility Failures**: Test with VoiceOver enabled
259- **Memory Leaks**: Watch for strong reference cycles in closures
260 
View all files on GitHub →

Details

Updated
Sep 21, 2026
License
MIT
Stars on the repo
★ 39,857
Checked
Source
wshobson/agents ↗
Creator
wshobson · 179 listings
View creator

Similar skills

See all →
SkillDesign, redesign, shape, critique, audit, polish, clarifyImpeccablepbakaus/impeccable · by pbakausUse when the user wants to design, redesign, shape, critique, audit, polish, clarify, distill, harden, optimize, adapt, animate, colorize, extract, or otherwise improve a frontend interface. Covers websites, landing pages, dashboards, product UI, app shells, components, forms, settings, onboarding, and empty states. Handles UX review, visual hierarchy, information architecture, cognitive load, accessibility, performance, responsive behavior, theming, anti-patterns, typography, fonts, spacing, layout, alignment, color, motion, micro-interactions, UX copy, error states, edge cases, i18n, and reusable design systems or tokens. Also use for bland designs that need to become bolder or more delightful, loud designs that should become quieter, live browser iteration on UI elements, or ambitious visual effects that should feel technically extraordinary. Not for backend-only or non-UI tasks.★ 70.4k GitHub starsSkillApple's approach to interface design and fluidApple designemilkowalski/skills · by emilkowalskiApple's approach to interface design and fluid, physical motion, translated for the web. Use when building or reviewing gesture-driven UI, spring animations, drag/swipe/sheet interactions, momentum and interruptible transitions, translucent materials and depth, typography (optical sizing, tracking, leading), reduced-motion, or the design foundations (feedback, spatial consistency, restraint) behind Apple-style interfaces.★ 40.8k GitHub starsSkillBuild an animation from scratchBuilding Animationsemilkowalski/skills · by emilkowalskiBuild an animation from scratch, making the decisions in the order that determines whether it feels right — should it animate at all, what purpose, which tool, which properties, which curve and duration, how it interrupts, how it exits. Writes the implementation. Use when asked to animate something, add motion, make a component feel alive, or build a transition. For critiquing existing motion use review-animations; for auditing a whole codebase use improve-animations.★ 40.8k GitHub starsSkillRenders a component you choose in every stateBreakjakubkrehel/skills · by jakubkrehelRenders a component you choose in every state and scenario on a temporary page and stress tests it.★ 7.1k GitHub starsSkillReviews your work across multiple categories like UIChange reviewjakubkrehel/skills · by jakubkrehelReviews your work across multiple categories like UI, typography, layout, color, writing and accessibility and gives you a detailed analysis of the findings.★ 7.1k GitHub starsSkillCraft-first interface design for dashboards, admin panelsThe ProblemDammyjay93/interface-design · by Dammyjay93Craft-first interface design for dashboards, admin panels, SaaS apps, tools, settings pages, data interfaces, and interactive products. Use when designing, building, reviewing, auditing, or refining product UI where visual craft, layout hierarchy, tokens, states, visual direction, or design-system consistency matter. Not for marketing pages, landing pages, campaigns, or brand-only work.★ 5.8k GitHub stars

More from wshobson

SkillMaster C/.NET backend development patterns for buildingwshobson/agents · by wshobsonMaster C#/.NET backend development patterns for building robust APIs, MCP servers, and enterprise applications. Covers async/await, dependency injection, Entity Framework Core, Dapper, configuration, caching, and testing with xUnit. Use when developing .NET backends, reviewing C# code, or designing API architectures.★ 39.9k GitHub starsSkillImplement WCAG 2.2 compliant interfaces with mobileAccessibility compliancewshobson/agents · by wshobsonImplement WCAG 2.2 compliant interfaces with mobile accessibility, inclusive design patterns, and assistive technology support. Use when auditing accessibility, implementing ARIA patterns, building for screen readers, or ensuring inclusive user experiences.★ 39.9k GitHub starsSkillMaster Material Design 3 and Jetpack Compose patternsAndroid Mobile Designwshobson/agents · by wshobsonMaster Material Design 3 and Jetpack Compose patterns for building native Android apps. Use when designing Android interfaces, implementing Compose UI, or following Google's Material Design guidelines.★ 39.9k GitHub starsSkillMigrate from AngularJS to Angular using hybrid modeAngular migrationwshobson/agents · by wshobsonMigrate from AngularJS to Angular using hybrid mode, incremental component rewriting, and dependency injection updates. Use when upgrading AngularJS applications, planning framework migrations, or modernizing legacy Angular code.★ 39.9k GitHub starsSkillUnderstand anti-reversing, obfuscationAnti reversing techniqueswshobson/agents · by wshobsonUnderstand anti-reversing, obfuscation, and protection techniques encountered during software analysis. Use this skill when analyzing malware evasion techniques, when implementing anti-debugging protections for CTF challenges, when reverse engineering packed binaries, or when building security research tools that need to detect virtualized environments.★ 39.9k GitHub starsSkillBuild production Apache Airflow DAGs with best practicesApache Airflow DAG Patternswshobson/agents · by wshobsonBuild production Apache Airflow DAGs with best practices for operators, sensors, testing, and deployment. Use when creating data pipelines, orchestrating workflows, or scheduling batch jobs.★ 39.9k GitHub stars