catalog/repos/ahmadbrkt--swiftui-style-driven-components-skill.md

182 lines
6.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# SwiftUI 样式驱动组件
`SwiftUI` `iOS` `组件库` `样式协议` `Apple`
# SwiftUI 样式驱动组件技能
为所有支持 [Agent Skills 开放格式](https://agentskills.io/home) 的 AI 编程工具提供专业指导,帮助开发者使用 Apple 样式驱动架构模式构建可扩展的 SwiftUI 组件。
从 Apple 官方模式(`ButtonStyle``LabelStyle``ToggleStyle`)中提炼而来,为 AI 代理提供可直接使用的精简参考。
## 适用人群
- 希望构建符合 Apple 标准可扩展性的可复用 SwiftUI 组件库的团队。
- 需要为自定义组件实现多种视觉风格、同时避免代码重复的开发者。
- 希望实现基于环境的样式级联传递(可穿透视图层级)的任何人。
## 使用方法
### 方式 A使用 skills.sh推荐
通过一条命令安装此技能:
```bash
npx skills add https://github.com/ahmadbrkt/swiftui-style-driven-components-skill --skill swiftui-style-driven-components
```
更多信息请访问 [skills.sh 平台页面](https://skills.sh/ahmadbrkt/SwiftUI-Style-Driven-Components-Skill/swiftui-style-driven-components)。
然后在 AI 代理中使用该技能,例如:
> 使用 swiftui 样式驱动组件技能,创建一个支持样式协议的 Card 组件
### 方式 BClaude Code 插件
#### 个人使用
在 Claude Code 中为个人使用安装此技能:
1. 添加插件市场:
```bash
/plugin marketplace add ahmadbrkt/SwiftUI-Style-Driven-Components-Skill
```
2. 安装技能:
```bash
/plugin install swiftui-style-driven-components@swiftui-style-driven-components-skill
```
#### 项目配置
若希望为仓库中所有协作者自动提供此技能,请在仓库的 `.claude/settings.json` 中进行配置:
```json
{
"enabledPlugins": {
"swiftui-style-driven-components@swiftui-style-driven-components-skill": true
},
"extraKnownMarketplaces": {
"swiftui-style-driven-components-skill": {
"source": {
"source": "github",
"repo": "ahmadbrkt/SwiftUI-Style-Driven-Components-Skill"
}
}
}
}
```
团队成员打开项目时Claude Code 会提示其安装该技能。
### 方式 C手动安装
1. **克隆**本仓库。
2. 按照工具的官方技能安装文档,**安装或符号链接** `swiftui-style-driven-components/` 文件夹(参见下方链接)。
3. **正常使用 AI 工具**,并让其在处理组件架构任务时使用 "swiftui-style-driven-components" 技能。
#### 技能保存位置
请参阅各工具的官方文档,以下是几个常用工具的参考:
- **Codex** [技能保存位置](https://developers.openai.com/codex/skills/#where-to-save-skills)
- **Claude** [使用技能](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview#using-skills)
- **Cursor** [启用技能](https://cursor.com/docs/context/skills#enabling-skills)
**验证方法**
AI 代理应能引用 `swiftui-style-driven-components/SKILL.md` 中的分类/操作手册,并跳转到与组件任务相关的参考文件。
## 技能功能
本技能为 AI 编程工具提供全面的 SwiftUI 样式驱动组件指导,具体包括:
### 指导组件架构
- 判断何时使用样式协议,何时使用简单组件
- 按照 Apple 的组织模式构建文件结构
- 实现协议 → 配置 → 组件 → 环境的完整链路
- 设计具有内部类型擦除的类型安全 API
### 创建样式协议
- 定义带有 `DynamicProperty` 的协议以访问环境
- 使用 `@ViewBuilder @MainActor` 确保 UI 线程安全
- 创建带嵌套类型擦除视图的配置类型
- 严格遵循 Apple 的 `ButtonStyle`、`LabelStyle` 惯例
### 构建可扩展组件
- 编写从环境中读取样式的组件
- 在内部创建配置(不暴露给初始化器)
- 使用 `AnyView` 对 `style.makeBody` 进行类型擦除包装
- 支持在不修改现有组件的情况下添加新样式
### 实现环境样式
- 使用 `@Entry` 宏定义环境键
- 以存在类型(`any ComponentStyle`)存储样式
- 创建用于样式应用的视图修饰符
- 支持可穿透视图层级的子树样式级联
### 设计系统集成
- 使用设计令牌替代魔法数字
- 实现间距、排版和颜色系统
- 在组件间构建一致的视觉语言
- 通过环境值支持主题化
### 编写测试与预览
- 为所有样式变体组织快照测试
- 为不同配置构建预览结构
- 使用动态字体Dynamic Type测试无障碍支持
- 验证样式隔离与环境传播
## 本技能的独特之处
**Apple 原生模式**:严格遵循 Apple 构建 `ButtonStyle`、`LabelStyle`、`ToggleStyle` 及其他样式协议的方式。你的组件将让 SwiftUI 开发者感到原生自然。
**无倾向性**:专注于结构模式,而非视觉设计。适用于任何设计系统、组件库或项目架构。
**实用决策树**:包含关于何时使用样式协议、何时可以跳过的清晰指导。并非所有组件都需要此模式——本技能帮你做出判断。
**完整示例**:每个模式都包含完整、可编译的 Swift 代码,无伪代码或不完整片段。
**反模式指导**:同时展示正确(✅)和错误(❌)的做法,并解释模式重要性的原因。
## 技能结构
```
swiftui-style-driven-components/
├── SKILL.md # 主技能文件,包含决策树
└── references/
├── component-structure.md # 文件组织与命名规范
├── style-protocol.md # 协议定义与配置模式
├── environment-keys.md # 环境注入与使用模式
├── common-patterns.md # 便捷初始化器、参数化样式
├── design-system.md # 设计令牌、排版、颜色
├── testing.md # 快照测试与测试组织
├── previews.md # 预览结构与检查清单
└── accessibility.md # 标签、标识符、动态字体
```
## 贡献
欢迎贡献!本仓库遵循 [Agent Skills 开放格式](https://agentskills.io/home),该格式有特定的结构要求。
**强烈建议借助 AI 辅助进行贡献:**
- 使用 [skill-creator 技能](https://github.com/anthropics/skills/tree/main/skills/skill-creator) 配合 Claude以确保格式正确
- 这有助于维护 Agent Skills 格式,并确保你的贡献能与 AI 代理正常协作
**请阅读 [CONTRIBUTING.md](CONTRIBUTING.md),了解:**
- 如何使用 skill-creator 技能进行贡献
- Agent Skills 格式要求
- 质量标准与最佳实践
- Pull Request 流程
本技能持续维护,以反映最新的 SwiftUI 样式驱动组件最佳实践,并将随框架演进不断更新。
## 许可证
本技能为开源项目,采用 MIT 许可证。详情请参阅 [LICENSE](LICENSE)。