名称: ios-design-system 描述: 与诊所架构对齐的iOS设计系统工程,适用于SwiftUI(iOS 26 / Swift 6.2),涵盖令牌架构、颜色/排版/间距系统、组件样式库、资产治理和主题化。强制在视图上使用@Equatable,并保持设计系统使用与功能到领域+设计系统边界兼容。在构建或重构诊所模块化MVVM-C堆栈的设计系统基础设施时使用。
Airbnb iOS设计系统最佳实践
针对SwiftUI iOS 26 / Swift 6.2应用的自以为是、严格的设计系统工程。包含8个类别的50条规则,按影响优先级排序。源自Airbnb的设计语言系统(DLS)、Airbnb Swift风格指南、苹果人机界面指南和WWDC会议。强制在每个视图上使用@Equatable、@Observable用于状态,以及样式协议作为主要组件API。
强制架构对齐
这个技能设计为与swift-ui-architect一起工作。所有代码示例遵循相同的不可协商约束:
- 功能模块依赖于
Domain+DesignSystem;没有直接的Data依赖 @Observable用于可变UI状态,绝不使用ObservableObject/@Published- 在每个视图上使用
@Equatable宏 - 样式协议作为主要组件样式API(Airbnb DLS模式)
- 资产目录作为颜色值的单一来源
- 本地SPM包用于设计系统模块边界
范围与兄弟技能关系
这个技能是基础设施层 — 它教授如何构建设计系统本身。当与兄弟技能一起加载时:
| 兄弟技能 | 其焦点 | 这个技能的焦点 |
|---|---|---|
swift-ui-architect |
架构(模块化MVVM-C、路由壳、协议边界) | 设计系统基础设施(令牌、样式、治理) |
ios-design |
使用设计基元(语义颜色、排版) | 工程化提供这些基元的令牌系统 |
ios-ui-refactor |
审计/修复视觉质量问题 | 预防这些问题通过治理和自动化 |
ios-hig |
HIG合规模式 | 资产和组件基础设施使合规变得容易 |
诊所架构契约(iOS 26 / Swift 6.2)
这个技能中的所有指导假设诊所模块化MVVM-C架构:
- 功能模块仅导入
Domain+DesignSystem(绝不导入Data,绝不导入兄弟功能) - 应用目标是汇聚点,并拥有
DependencyContainer、具体协调器和路由壳布线 Domain保持纯Swift,并定义模型加存储库、*Coordinating、ErrorRouting和AppError契约Data拥有SwiftData/网络/同步/重试/后台I/O并实现Domain协议- 读写流默认使用陈旧-重新验证读取和乐观排队写入
- ViewModels直接调用存储库协议(无默认用例/交互层)
何时应用
在以下情况参考这些指南:
- 为新iOS应用设置设计系统
- 构建令牌架构(颜色、排版、间距、尺寸)
- 创建可重用组件样式(ButtonStyle、LabelStyle、自定义DLS协议)
- 组织资产目录(颜色、图像、图标)
- 从临时样式迁移到治理的令牌系统
- 通过自动化预防样式漂移和强制一致性
- 为白标或多品牌应用构建主题化基础设施
- 审查PR以查找未治理的颜色、硬编码值或阴影令牌
规则类别按优先级
| 优先级 | 类别 | 影响 | 前缀 | 规则 |
|---|---|---|---|---|
| 1 | 令牌架构 | 关键 | token- |
6 |
| 2 | 颜色系统工程 | 关键 | color- |
7 |
| 3 | 组件样式库 | 关键 | style- |
10 |
| 4 | 排版比例 | 高 | type- |
5 |
| 5 | 间距与尺寸系统 | 高 | space- |
5 |
| 6 | 一致性与治理 | 高 | govern- |
7 |
| 7 | 资产管理 | 中高 | asset- |
5 |
| 8 | 主题与品牌基础设施 | 中 | theme- |
5 |
快速参考
1. 令牌架构(关键)
token-three-layer-hierarchy- 使用原始 → 语义 → 组件令牌层token-enum-over-struct- 使用无案例枚举用于令牌命名空间token-single-file-per-domain- 每个设计域一个令牌文件token-shapestyle-extensions- 扩展ShapeStyle以点语法颜色token-asset-catalog-source- 从资产目录获取颜色令牌token-avoid-over-abstraction- 避免过度抽象超过三层
2. 颜色系统工程(关键)
color-organized-xcassets- 按角色组织颜色资产文件夹组color-complete-pairs- 为每个自定义颜色定义两种外观color-limit-palette- 限制自定义颜色少于20个语义令牌color-no-hex-in-views- 绝不在视图代码中使用Color字面量或十六进制color-system-first- 在自定义令牌之前优先使用系统颜色color-tint-not-brand-everywhere- 将品牌颜色设置为应用色调,不要到处散播color-audit-script- 使用构建脚本审计未治理的颜色
3. 组件样式库(关键)
style-dls-protocol-pattern- 为复杂DLS组件定义自定义样式协议style-equatable-views- 对每个设计系统视图应用@Equatablestyle-accessibility-first- 将可访问性构建到样式协议中,而不是单个视图style-protocol-over-wrapper- 使用样式协议而不是包装视图style-static-member-syntax- 为自定义样式提供静态成员语法style-environment-awareness- 使样式对环境值响应style-view-for-containers-modifier-for-styling- 容器使用视图,样式使用修饰符style-catalog-file- 每个组件类型一个样式目录文件style-configuration-over-parameters- 优先使用配置结构而不是多个参数style-preview-catalog- 为所有样式创建预览目录
4. 排版比例(高)
type-scale-enum- 定义包装系统样式的排版比例枚举type-system-styles-first- 在自定义样式之前优先使用系统文本样式type-custom-font-registration- 使用集中扩展注册自定义字体type-max-styles-per-screen- 限制每个屏幕的排版变体为3-4种type-avoid-font-design-mixing- 每个应用使用一种字体设计
5. 间距与尺寸系统(高)
space-token-enum- 定义间距令牌为无案例枚举space-radius-tokens- 按组件类型定义圆角半径令牌space-no-magic-numbers- 视图布局代码中零硬编码数字space-insets-pattern- 使用EdgeInsets常量用于复合填充space-size-tokens- 为常见尺寸定义尺寸令牌
6. 一致性与治理(高)
govern-naming-conventions- 强制所有令牌使用一致的命名约定govern-spm-package-boundary- 将设计系统隔离为本地SPM包govern-single-source-of-truth- 每个视觉值有一个定义点govern-lint-for-tokens- 使用SwiftLint规则强制令牌使用govern-design-system-directory- 将令牌隔离在专用目录govern-migration-incremental- 增量迁移到令牌govern-prevent-local-tokens- 防止功能模块定义本地令牌
7. 资产管理(中高)
asset-separate-catalogs- 为颜色、图像、图标分离资产目录asset-sf-symbols-first- 在自定义图标之前优先使用SF Symbolsasset-icon-export-format- 使用PDF/SVG向量,绝不用多个PNGasset-image-optimization- 使用压缩和按需资源asset-naming-convention- 所有资产使用一致的命名约定
8. 主题与品牌基础设施(中)
theme-environment-key- 使用EnvironmentKey用于主题传播theme-dont-over-theme- 除非需要,避免构建主题系统theme-tint-for-brand- 使用.tint()作为主要品牌表达theme-light-dark-only- 使用ColorScheme用于明暗,而不是自定义主题theme-brand-layer-separation- 将品牌身份与系统机制分离
如何使用
阅读个别参考文件以获取详细解释和代码示例:
参考文件
| 文件 | 描述 |
|---|---|
| references/_sections.md | 类别定义和排序 |
| assets/templates/_template.md | 新规则模板 |
| metadata.json | 版本和参考信息 |