Best for
- Use when reviewing or refining SwiftUI layout, typography, Liquid Glass, navigation, or dashboards on a freshly verified build.
vasilyu1983/AI-Agents-public/frameworks/shared-skills/skills/software-ios-design/SKILL.md
Designs and audits native iOS interfaces. Use when reviewing or refining SwiftUI layout, typography, Liquid Glass, navigation, or dashboards on a freshly verified build.
Decision brief
Use this skill for visual design decisions and design-focused audits in any native iOS app. Prefer it when the user needs HIG-aligned screen structure, current Apple-native visual defaults, or a screenshot-to-fix loop after a fresh verified build/install/launch. If the request i…
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Declared | Source record | Install path and trigger |
| Claude Code | Declared | Source record | Install path and trigger |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/vasilyu1983/AI-Agents-public --skill "frameworks/shared-skills/skills/software-ios-design"Inspect the Agent Skill "software-ios-design" from https://github.com/vasilyu1983/AI-Agents-public/blob/53f6cb73ea53a2646e3e7d4665062ad66f3683ac/frameworks/shared-skills/skills/software-ios-design/SKILL.md at commit 53f6cb73ea53a2646e3e7d4665062ad66f3683ac. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
1. Define the screen's primary job and the one or two pieces of content that must win first attention. 2. Choose the native structure: tab view, navigation stack, list, sheet, inspector, or split view. 3. Apply typography, spacing, and semantic color using system defaults before…
Prefer the XcodeBuildMCP loop when an iOS project is runnable and the tool is callable: build and run, navigate to the target screen, capture a screenshot, inspect hierarchy and logs, apply SwiftUI fixes, re-run.
references/app-review-guidelines-map.md — App Store Review Guidelines mapped to pass/fail checks across all five sections (Safety, Performance, Business, Design, Legal), incl. the 4.3(b) saturated-category gate (astrolo…
Review the “Verification Gate” section in the pinned source before continuing.
Start from the current Apple design system; do not invent custom chrome when a standard control solves it.
Permission review
No configured static risk pattern was detected
This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.
Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 93/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 80 | Source | Repository attention, not individual Skill quality |
| Compatibility | 2 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Use this skill for visual design decisions and design-focused audits in any native iOS app. Prefer it when the user needs HIG-aligned screen structure, current Apple-native visual defaults, or a screenshot-to-fix loop after a fresh verified build/install/launch. If the request is really about greenfield scaffolding, CLI build loops, scheme selection, or broader iOS implementation workflow, route to software-ios-native and return here once the question becomes visual structure or design quality.
.contentShape() when the visible glyph is smaller..sheet + .presentationDetents) for detail over inline expansion.ScrollView > LazyVStack with .scrollTransition for narrative screens; reserve List(.insetGrouped) for settings-style hubs..frame(maxWidth: .infinity, alignment: .leading)) so short rows do not shrink beside longer rows.SharedListRow using .buttonStyle(.plain) internally ships dead taps from every screen that uses it. Fix the shared component once; every caller benefits.@State private var tapCount: Int = 0, { tapCount &+= 1; action() } in the button action, .sensoryFeedback(.selection, trigger: tapCount) on the view. Use &+= for overflow-safe wrap-around.motionSensitive() view modifier for Reduce Motion (kills descendant transactions when accessibilityReduceMotion is true); attach at the app root. Per-screen checks are the anti-pattern.iOS 17+ polish: .scrollTransition, .sensoryFeedback, .symbolEffect, .contentTransition(.numericText). Standardize scroll reveals into a shared ViewModifier (e.g., .appScrollReveal()).ButtonStyle (scaleEffect(0.94) on .isPressed + 100 ms easeOut). .buttonStyle(.plain) alone fails the "toy quality" bar..presentationDetents([.medium, .large]) on sheets. Use .presentationBackgroundInteraction(.enabled(upThrough:)) when the surface behind the sheet should stay interactive at peek height.ZStack { background; visualization; controls; .sheet(persistent) } — no card wrappers, no scroll.Picker(.segmented) + Menu overflow over custom material-backed button strips.TabView for 3-5 peer top-level sections on iPhone. Reach for NavigationSplitView (sidebar-adaptive) when (a) the app is iPad/Mac-first and needs a persistent list-detail relationship, (b) there are 6+ top-level destinations that would force a tab-bar "More" overflow, or (c) the same information architecture must scale from iPhone compact width to iPad/Mac without a redesign. NavigationSplitView collapses to a stack on iPhone automatically — it is the correct default for adaptive multi-platform apps, not just a Mac/iPad nicety. Do not default to a custom hamburger-drawer sidebar on iPhone; it is not a system pattern and fails discoverability audits..accessibilityLabel. Combine multi-element rows with .accessibilityElement(children: .combine).xcodebuild output through xcbeautify when XcodeBuildMCP is unavailable — raw output buries errors in thousands of lines.iOS design task
-> Prove current build, launch, and screenshot state
-> Define screen job, hierarchy, and iOS platform fit
-> Choose native navigation, sheets, lists, controls, and safe areas
-> Check Dynamic Type, themes, permissions, and edge states
-> Patch design details and recapture evidence
-> Report before/after proof and residual interaction risk
Native iOS work is judged on feel as much as layout. Every substantive screen should be reviewed against these rows. If three or more fail, the screen is debt regardless of HIG conformance. See references/ios-craft-and-feel.md for the full playbook.
| Dimension | Pass | Fail |
|---|---|---|
| Spring physics | curve token chosen per intent (snappy/smooth/bouncy) | default .easeInOut everywhere |
| Haptic vocabulary | .success/.impact/.selection mapped to commit weight | silent commits or one haptic for everything |
| SF Symbol craft | hierarchical/palette/variable + Symbol Effects on state changes | flat monochrome, no transitions |
| Press feedback | shared ButtonStyle with scale + haptic on every tappable | .buttonStyle(.plain) ships dead taps |
| Numbers | tabular figures + locale-aware formatter + .contentTransition(.numericText) | proportional digits jitter on update |
| Hero transitions | matchedGeometryEffect from list to detail | full sheet replace breaks spatial continuity |
| Pull-to-refresh | resistance + commit haptic + skeleton | spinner without tactile confirmation |
| Live Activities / widgets | designed for Lock Screen + Dynamic Island, not afterthought | desktop-style cards crammed into widget frame |
| Reduce Motion | one global motionSensitive() modifier, descendant transactions killed | per-screen ad-hoc checks, motion still leaks |
| First-run delight | one moment that earns a smile (symbol bounce, haptic chord) | none |
| Sound | rare, intentional, system sounds where possible | decorative tones on every action |
| Editorial polish | optical alignment, capital-letter kerning, glyph balance | pixel-equal but reads off |
Before writing or reviewing screen code, check these patterns from references/design-craft-patterns.md:
.contentTransition(.numericText); use gradient score bars. See references/ios-component-patterns.md.ButtonStyle), haptics (.sensoryFeedback), SF Symbol animation (.symbolEffect(.bounce)), expandable sections, entrance animations on sheets..accessibilityHint. Multi-element rows use .accessibilityElement(children: .combine). Navigation chevrons need explicit labels. See references/ios-accessibility-patterns.md.accessibilityLabel presence) belong in the fast test target.xcodebuild through xcbeautify (xcodebuild ... 2>&1 | xcbeautify) and use simctl — don't feed raw xcodebuild output to agents.See:
Widgets, Live Activities, Control Center custom controls, and Lock-screen surfaces are first-class iOS design surfaces. This skill's patterns apply (typography, Dynamic Type, materials, touch targets, accessibility) but the platform constraints differ — widget timelines, size families, interactive affordance rules. When designing these surfaces specifically, also consult Apple HIG → Widgets and HIG → Live Activities; the core rules in this skill still apply to their content surfaces.
glassEffect, GlassEffectContainer, morphing, fallback for pre-iOS 26, accessibility interactionsOptional helpers for a proven-build design loop. If the project uses a Makefile, make can replace the individual scripts. If the app cannot build/install/launch cleanly, route to ../software-ios-runtime-debugging/SKILL.md.
.xcodebuildmcp/config.yamlFor the full anti-pattern catalog — SwiftUI state/identity, navigation, layout, color/Dark Mode, animations, controls, sheets, data display, Canvas, and runtime footguns — see references/swiftui-design-antipatterns.md.
| Check | Pass condition | Fail condition |
|---|---|---|
| Standard structure | Recommendation maps to a standard iOS pattern | Custom pattern used without justification |
| Screenshot origin | Freshly installed and launched build | Screenshot from a prior install or simulator session not tied to current build |
| Typography | Dynamic Type text styles throughout | Fixed-size design tokens |
| Color and materials | Contrast and hierarchy preserved in light and dark mode | Material or color breaks in one appearance |
| Touch targets | ≥ 44 × 44 pt; .contentShape() used where glyph is smaller | Target below minimum; dead taps on tappable rows |
| Notification surface | Verified on real iPhone in correct APNs environment | Simulator-only screenshots for notification UX |
| Dashboard heuristics | Labeled as team default, not platform rule | Presented as HIG requirement without citation |
| XcodeBuildMCP guidance | Verified against upstream docs | Repeated from memory or prior session |
| Release metadata | Info.plist iPad orientation keys present on device-universal apps | Simulator UI passes but Info.plist missing keys for App Store validation |
Freshness-check before final answers whenever the request depends on:
Start from data/sources.json, then prefer Apple Developer documentation, WWDC sessions, and upstream XcodeBuildMCP docs. For fast local lookups, use DocSetQuery against Apple DocSet bundles. For web-based lookups, use sosumi.ai.
Current stable baseline (verify at each session): iOS/iPadOS 26.x is shipping; Liquid Glass, SF Symbols 7, and the Accessibility Nutrition Labels described in this skill are current, shipped behavior. Announced, not shipped: WWDC26 (June 2026) previewed iOS/iPadOS/macOS 27, SF Symbols 8, and Icon Composer 2 — including reduced default Liquid Glass transparency, a system-level Clear/Tinted appearance control, darkened glass edges, and reversed tab-bar search placement. As of this validation pass, iOS 27 and SF Symbols 8 are beta-only. Do not present iOS 27 design changes as the current default; label them explicitly as "iOS 27, announced at WWDC26, not yet GA" and re-verify the current beta/GA split before quoting a specific point release.
Before applying this skill on a non-trivial task, read learnings.consolidated.md in this directory (and learnings.md if present).
After applying it, if you encountered a pattern worth remembering, a mistake worth preventing, or a domain fact that surprised you, append one dated bullet to learnings.md via agents-skills-feedback-loop/scripts/append_learning.py. Do not modify SKILL.md itself.
Frequently asked questions
Use this skill for visual design decisions and design-focused audits in any native iOS app. Prefer it when the user needs HIG-aligned screen structure, current Apple-native visual defaults, or a screenshot-to-fix loop after a fresh verified build/install/launch. If the request i…
The source record exposes this install command: npx skills add https://github.com/vasilyu1983/AI-Agents-public --skill "frameworks/shared-skills/skills/software-ios-design". Inspect the command and pinned source before running it.
The pinned source record declares support for: codex, claude code.
Alternatives
vasilyu1983/AI-Agents-public
Guides iOS testing with XCTest, XCUITest, Swift Testing, simctl, and xcresult. Use when choosing destinations, controlling flakes, or parsing test artifacts for native apps.
vasilyu1983/AI-Agents-public
Designs and audits UI/UX systems with usability and accessibility requirements. Use when shaping flows, design systems, interaction patterns, or WCAG-aware product behavior.
vasilyu1983/AI-Agents-public
Designs session lifecycle for coding-agent runtimes. Use when implementing resume, transcript restoration, checkpoint rewind, cross-worktree recovery, or session-state persistence.
vasilyu1983/AI-Agents-public
Designs and audits native Android interfaces. Use when reviewing Compose layout, typography, color, motion, or adaptive patterns on a verified emulator build.