Back to Mobile Development

mobile-ios-design

iOSSwiftUIHIGApple DesignMobile DevelopmentUI/UXNative AppsXcode
36.8k📄 MIT🕒 2026-06-16Source ↗

Install this skill

npx skills add wshobson/agents

Works across Claude Code, Cursor, Codex, Copilot & Antigravity

The mobile-ios-design skill focuses on the technical application of Apple's Human Interface Guidelines within the SwiftUI framework. It centers on crafting native interfaces that honor platform-specific patterns like navigation stacks, system-wide typography, and adaptive layouts. By prioritizing clarity and spatial hierarchy, this skill ensures interfaces remain functional across varying screen sizes and light conditions. You will work with semantic styling, SF Symbols, and material-based blur effects to achieve the signature aesthetic associated with modern iOS software. This skill serves as a bridge between high-level interface requirements and the code required to render them accurately on hardware, focusing on the mechanical aspects of gesture handling, layout containers, and accessibility standards that define a professional, platform-compliant user experience.

When to Use This Skill

  • Converting a Figma mockup into a responsive SwiftUI view hierarchy
  • Standardizing design tokens like semantic colors and system fonts
  • Building accessible interfaces that respond to system-level font changes
  • Creating a cross-device layout that adapts between iPhone and iPad screens

How to Invoke This Skill

Example prompts that trigger this skill in Claude Code, Cursor, or Antigravity:

  • How do I implement Apple HIG standards in SwiftUI?
  • Create a responsive grid layout following iOS design principles.
  • Refactor this view to use semantic colors and materials.
  • Help me build a NavigationStack with deep linking support.
  • Apply SF Symbols and Dynamic Type to my current UI code.

Pro Tips

  • 💡Always prioritize clarity and user context; the HIG isn't just a style guide, it's about user experience and user delight.
  • 💡Leverage Xcode's Previews extensively with different device sizes, accessibility settings, and dark/light modes to ensure your SwiftUI views are truly adaptive.
  • 💡Don't just copy-paste; understand *why* Apple recommends certain patterns. This allows you to adapt them effectively to unique app requirements while maintaining a native feel.

What this skill does

  • Mapping UI designs to SwiftUI layouts using stacks and grids
  • Implementing system-standard navigation flows via NavigationStack and TabView
  • Applying adaptive typography and Dynamic Type scaling
  • Integrating semantic colors, materials, and depth-based shadows
  • Animating SF Symbols with state-driven rendering effects

When not to use it

  • Developing cross-platform apps using non-native frameworks like Flutter or React Native
  • Designing web-based interfaces that lack native iOS integration requirements

Example workflow

  1. Analyze the visual requirements against Apple HIG documentation.
  2. Define the layout structure using HStack, VStack, or LazyVGrid.
  3. Apply semantic style modifiers for text, foreground colors, and materials.
  4. Implement navigation state management using the NavigationPath approach.
  5. Verify layout accessibility by testing against Dynamic Type and Dark Mode.

Prerequisites

  • Basic proficiency in Swift programming
  • Access to Xcode or a Swift development environment
  • Foundational understanding of SwiftUI view modifiers

Pitfalls & limitations

  • !Over-customizing UI components at the expense of native platform feel
  • !Ignoring Dark Mode compatibility by hardcoding color hex values
  • !Failing to account for reachability or touch target sizing

FAQ

Should I use fixed sizes for UI components?
No, you should prioritize fluid layouts and adaptive sizing to ensure compatibility with different device sizes and Dynamic Type settings.
How do I ensure my app supports Dark Mode automatically?
Use semantic colors like .primary or .secondary instead of static colors; these automatically adjust their values based on the user's system appearance settings.
Is SF Symbols necessary for iOS design?
SF Symbols are highly recommended as they integrate natively with system typography and support weight, scale, and animation rendering modes directly within SwiftUI.

How it compares

Unlike generic UI design prompts, this skill forces the output to strictly adhere to Apple's native design language and specific SwiftUI implementation patterns.

Source & trust

37k stars📄 MIT🕒 Updated 2026-06-16
📄 Full skill instructions — original source: wshobson/agents
# 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:**

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

var body: some View {
TabView(selection: $selectedTab) {
HomeView()
.tabItem {
Label("Home", systemImage: "house")
}
.tag(0)

SearchView()
.tabItem {
Label("Search", systemImage: "magnifyingglass")
}
.tag(1)

ProfileView()
.tabItem {
Label("Profile", systemImage: "person")
}
.tag(2)
}
}
}


### 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

## Resources

- [Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/)
- [SwiftUI Documentation](https://developer.apple.com/documentation/swiftui)
- [SF Symbols App](https://developer.apple.com/sf-symbols/)
- [WWDC SwiftUI Sessions](https://developer.apple.com/videos/swiftui/)

How to Use This Skill Unit

Option A: Project-Specific (Recommended)

  1. Click "Download" above
  2. In your project, create the directory: .agent/skills/mobile-ios-design/
  3. Save the file as SKILL.md
  4. The agent will automatically discover the skill based on its description.

Option B: Global Installation (All Agents)

Save the file to these locations to make it available across all projects:

  • Claude Code: ~/.claude/skills/wshobson/agents/mobile-ios-design/SKILL.md
  • Cursor: ~/.cursor/skills/wshobson/agents/mobile-ios-design/SKILL.md
  • Antigravity: ~/.gemini/antigravity/skills/wshobson/agents/mobile-ios-design/SKILL.md

🚀 Install with CLI:
npx skills add wshobson/agents

Read the Master Guide: Mastering Agent Skills

Recommended Rules

View more rules

Recommended Workflows

View more workflows

Recommended MCP Servers

View more MCP servers

Take It Further

Maximize your productivity with these powerful resources

📋

Define Your Standards

Set up coding standards to ensure this workflow produces consistent, high-quality results.

Browse Rules Library
📖

Master Workflows

Learn how to create custom workflows, use Turbo Mode, and build your automation library.

Complete Guide

How to use this Skill in Claude Code & Cursor

For Claude Code (CLI)

To use this skill in Claude Code, copy the rule content into your project's custom instructions or follow our Add-Skill CLI guide. This ensures Claude follows your standards during every code generation.

For Cursor & Windsurf

For Cursor or Windsurf, individual skills are best used in the "Rules for AI" section. This specific unit helps the agent avoid mobile development issues, leading to cleaner, more efficient code.

Why the skill format matters: the standardized Agent Skills format lets your AI agent load detailed instructions only when they are relevant, keeping your prompt clean while improving results.

Source & attribution

This skill is categorized under Mobile Development and is published by W. Shobson, maintained in wshobson/agents.

← Browse All Agent Skills
Sponsored AI assistant. Recommendations may be paid.