From apple-dev
Use after completing a page/module UI, before visual optimization, or when the user says 'review design' or 'check visual quality'. Reviews visual hierarchy, color strategy, spacing rhythm, and overall polish. Complements /ui-review (code compliance) and /feature-review (user journey).
npx claudepluginhub n0rvyn/indie-toolkit --plugin apple-devThis skill uses the workspace's default tool permissions.
App 设计质量审查。关注视觉层级、色彩策略、间距节奏、整体打磨感。与 `/ui-review`(代码合规)互补。
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Designs and optimizes AI agent action spaces, tool definitions, observation formats, error recovery, and context for higher task completion rates.
App 设计质量审查。关注视觉层级、色彩策略、间距节奏、整体打磨感。与 /ui-review(代码合规)互补。
询问用户或自动识别:
*View.swift、*Screen.swift、*Card.swiftreferences/ui-design-principles.md 获取设计原则和精确数值标准references/apple-ui-checklist.md 的「设计质量」章节获取代码级检查项WindowGroup/MenuBarExtra/NSViewRepresentable/#if os(macOS)),额外读取 ui-design-principles.md section 11b(macOS 平台特定:Window 尺寸、Sidebar、Toolbar)以下项目通过读代码即可判断。
原则参考:
ui-design-principles.md§4 视觉层级
检查页面是否有明确的 3 级字重/字号梯度:
| 层级 | 典型用法 | 代码特征 |
|---|---|---|
| 一级(标题) | 页面标题、卡片标题 | .font(.title2) / .font(.headline) + .fontWeight(.semibold) |
| 二级(正文) | 主要内容 | .font(.body) |
| 三级(辅助) | 时间、状态、说明 | .font(.caption) / .font(.subheadline) + .foregroundStyle(.secondary) |
检查项:
.secondary / .tertiary 降级?原则参考:
ui-design-principles.md§3 颜色系统 注:颜色合规性(语义色、深色模式变体、对比度)归/ui-review;色彩策略(比例、和谐、种类数)归本命令。
检查项:
代码检查:搜索文件中所有 Color( / .foregroundStyle( / .tint( / .accentColor 调用,统计颜色种类数。搜索 .opacity( 值 < 0.15 的有色背景,标记为深色模式风险。
原则参考:
ui-design-principles.md§2 间距系统
检查项:
Spacing.xs 会让界面局促)代码检查:提取文件中所有 .padding() / .spacing() / Spacing.* 值,检查是否存在不一致的同级间距。
原则参考:
ui-design-principles.md§5 布局原则
检查项:
原则参考:
ui-design-principles.md§2.3 嵌套圆角、§10.2 卡片规范
检查项:
.frame(maxWidth: .infinity) 或全部内容自适应,不混用).frame(maxWidth: .infinity)?ScrollView > VStack/LazyVStack 内的卡片/区块如果有 .background() 或 .clipShape() 但无 .frame(maxWidth:),且不在 List/Form 内 → 🔴 容器会抱住内容宽度而非撑满。.frame(width:) 而非 .frame(maxWidth:) 的容器?固定宽度在不同设备上会显示异常。.background() 颜色/材质是否一致?CardStyle.cornerRadius 等)?opacity ≤ 0.08, radius ≤ 4)代码检查(跨文件):从当前检查文件的 struct 名提取类型后缀,搜索同后缀组件 Grep("struct \\w+{suffix}", glob: "*.swift")(将 {suffix} 替换为实际后缀),提取每个组件的 .frame( / .padding( / .background( / .clipShape( / .shadow( 修饰符,逐项对比。不一致项标记 🔴。
原则参考:
ui-design-principles.md§10.3 图标规范
检查项:
.symbolRenderingMode())?原则参考:
ui-design-principles.md§16
检查项:
代码检查:提取文件中所有 .padding() / .spacing() 值。如果一个可滚动页面中所有 spacing 值相同 → 标记"无密度变化"。
检查项:
AppSpacing.* / AppLayout.* 而非硬编码)?Color.appPrimary 而非 Color(hex:))?.font(.body) 而非 .font(.system(size:)))?AppCornerRadius.medium 而非硬编码 12)?opacity ≤ 0.08)?代码检查:搜索硬编码 .padding(N) 或 .spacing(N),N 不是 4pt 倍数即标记。搜索 Color(hex: / .font(.system(size: 等非 Token 用法。
💡 完成设计审查后,如需完整 Token 合规扫描,单独运行
/validate-design-tokens。
检查项:
代码检查:Search for NavigationStack/NavigationLink/sheet/fullScreenCover nesting. Count max depth.
检查项:
代码检查:Search for .sensoryFeedback, withAnimation, .alert, .confirmationDialog near save/delete/submit. Flag write operations without feedback.
原则参考:
ui-design-principles.md§4.1 — 弱化不重要的信息,比放大重要信息更有效。
检查项:
.font(.title) 或 .font(.title2)?(= 标题竞争)代码检查:统计同一 View body 中 .font(.title / .font(.title2 出现次数。>1 且无一个明确更大 → 🔴 标题竞争。
原则参考:
ui-design-principles.md§2.1 — 所有间距值基于 4pt 倍数。
检查项:
.padding() / spacing: 数值是否在项目 Spacing Token 列表内?代码检查:提取所有数字型 padding/spacing 参数,检查是否为 4 的倍数且在 Token 范围内。非 4pt 倍数 → 🔴;hardcoded 与 Token 混用 → 🟡。
仅当 Step 2 判定为 macOS 项目时执行。参考
ui-design-principles.md§11.7-11.9。
.defaultSize() 和 .frame(minWidth:minHeight:)?.listStyle(.sidebar) 获得系统外观?以下项目 Claude 无法通过代码完全验证,生成针对性检查清单供用户在设备上执行。
代码预检:统计目标文件使用的 .font() 种类和 .foregroundStyle() 种类数。
≤ 1 种字号 + ≤ 1 种前景色 → "无层级,眯眼测试大概率不通过"
请在设备上执行:
半闭眼睛看页面,回答:
- [ ] 能否分辨出 3 个层级(标题 / 内容 / 辅助信息)?
- [ ] 主操作按钮是否是页面最突出的元素?
- [ ] 是否有某个区域过于密集或过于空旷?
请在设备上执行:
截图后用标尺/参考线工具检查:
- [ ] 所有内容块的左边缘是否对齐到同一条线?
- [ ] 卡片/列表项之间的间距是否均匀?
- [ ] 是否存在"差 1~2pt"的微妙不对齐?
请在设备上执行:
- [ ] 把手机调为灰度模式(辅助功能 → 色彩滤镜 → 灰度),页面层级是否仍然清晰?
- [ ] 切换深色模式,卡片/背景层级是否可辨?
- [ ] 页面整体色调是否和谐(没有某个颜色突兀跳出)?
请在设备上执行:
- [ ] 页面是否有"喘息空间"?(内容区域不贴屏幕边缘,组之间有留白)
- [ ] 信息是否分组清晰?(相关内容靠近,不相关内容有明确间隔)
- [ ] 首屏内容是否过多导致拥挤?
请在设备上执行:
- [ ] 页面切换是否流畅?有无掉帧?
- [ ] 元素出现/消失是否有过渡动画(而非闪现)?
- [ ] 动画时长是否适中?(太快 < 200ms 看不到,太慢 > 400ms 感觉卡)
- [ ] 是否尊重「减少动态效果」设置?
请在设备上执行(冷启动或首次进入该页面):
- [ ] 第一眼看到的是内容还是空白/loading?
- [ ] 骨架屏或占位是否合理?
- [ ] 页面整体是否给人"精致"还是"粗糙"的感觉?
## Design Review Report
### 检查范围
- [文件列表]
### Part A: 设计规则(代码验证)
#### 🔴 必须修复
- [file:line] 问题描述
现状:{当前代码}
建议:{修复方案}
#### 🟡 建议优化
- [file:line] 问题描述
建议:{优化方案}
#### ⚪ 通过
- {通过的检查项摘要}
### Part B: 设备验证清单
基于代码分析,建议在设备上验证以下项目:
#### 眯眼测试
- [ ] {针对该页面的具体检查点}
#### 对齐审查
- [ ] {针对该页面的具体检查点}
#### 色彩感知
- [ ] {针对该页面的具体检查点}
#### 留白与呼吸感
- [ ] {针对该页面的具体检查点}
#### 动效与过渡
- [ ] {针对该页面的具体检查点}
### 总结
- 检查文件数:N
- 设计规则问题:N(🔴 X / 🟡 Y)
- 设备验证项:N
- 💡 完成设备验证后,标记各项通过/不通过,再决定是否需要调整
| 级别 | 定义 | 示例 |
|---|---|---|
| 🔴 必须修复 | 明显破坏视觉层级或一致性 | 无层级区分(所有文字同大小同颜色)、卡片圆角不统一、颜色竞争(两个强调色) |
| 🟡 建议优化 | 不破坏但可提升 | 间距不完全一致、阴影偏重、图标风格略有混用 |
| ⚪ 通过 | 符合设计质量标准 | - |
/ui-review 不重复:本命令不检查状态完整性、无障碍标签、交互防护等 /ui-review 已覆盖的项目报告输出后,禁止自行修改被审查文件。必须使用 AskUserQuestion 让用户选择: