name: 代码生成开发者 description: 上下文感知的路由到代码生成工作流,包括 SwiftGen、Sourcery、功能标志和 Protobuf。用于运行 make generate、添加功能标志或处理生成的文件时。
代码生成开发者(智能路由器)
目的
上下文感知的路由到代码生成工作流:SwiftGen、Sourcery、功能标志和 Protobuf。帮助您导航何时以及如何运行生成器。
自动激活时机
- 运行或讨论
make generate - 添加功能标志
- 处理生成的文件
- 关键词:swiftgen、sourcery、功能标志、FeatureFlags、make generate
🚨 关键规则(永不违反)
- 永不编辑生成的文件 - 标记为
// Generated using Sourcery/SwiftGen的文件是自动生成的 - 更改后始终运行
make generate- 更新模板、标志、资产或本地化时 - 所有新功能使用功能标志 - 包装实验性代码以安全推出
- 更新源代码,而非生成代码 - 编辑模板/配置,然后重新生成
📋 基本命令
make generate # 运行所有生成器(SwiftGen、Sourcery、资产、本地化)
make generate-middle # 重新生成中间件和 protobuf(当依赖项更改时)
make setup-middle # 初始中间件设置
🚩 功能标志快速工作流
1. 定义标志
文件: /Modules/AnytypeCore/AnytypeCore/Utils/FeatureFlags/FeatureDescription+Flags.swift
extension FeatureDescription {
static let newChatInterface = FeatureDescription(
title: "新聊天界面",
type: .feature(author: "您的名字", releaseVersion: "0.42.0"),
defaultValue: false, // 生产中关闭
debugValue: true // 调试版本中打开以便测试
)
}
2. 生成
make generate
这将创建: Modules/AnytypeCore/AnytypeCore/Generated/FeatureFlags.swift
3. 在代码中使用
import AnytypeCore
if FeatureFlags.newChatInterface {
NewChatView()
} else {
LegacyChatView()
}
标志类型
.debug: 仅限调试(生产中不可用).feature(author:releaseVersion:): 生产功能,带元数据
最佳实践
- 未发布功能设置
defaultValue: false - 设置
debugValue: true便于开发者测试 - 完全推出后移除标志
🎯 何时运行 make generate
| 您做了这个 | 运行这个 | 原因 |
|---|---|---|
| 添加/更新 .xcstrings | make generate |
重新生成 Loc 常量 |
| 添加功能标志 | make generate |
生成 FeatureFlags 枚举 |
| 添加图标到 Assets.xcassets | make generate |
生成图像资产常量 |
| 修改 Sourcery 模板 | make generate |
从模板重新生成代码 |
| 更新中间件版本 | make generate-middle |
重新生成 protobuf 绑定 |
🎨 SwiftGen - 资产与本地化
添加图标
- 从 Figma 导出 SVG(例如,“32/qr code” →
QRCode.svg) - 添加到
/Modules/Assets/.../Assets.xcassets/DesignSystem/x32/QRCode.imageset/ - 运行
make generate - 使用:
Image(asset: .X32.qrCode)
图标尺寸: x18、x24、x32、x40(点)
本地化
SwiftGen 从 .xcstrings 文件生成 Loc 常量。
完整工作流参见 localization-developer 技能。
🔧 Sourcery - 基于模板的生成
Sourcery 基于源代码文件注释从模板生成 Swift 代码。
常见用途:
- 协议一致性
- 模拟实现
- 依赖注入
- 枚举辅助
工作流:
- 添加注释到源文件:
// sourcery: AutoEquatable - 运行
make generate - 使用生成代码(不要编辑生成文件!)
🔌 中间件与 Protobuf
何时重新生成
- 中间件版本更新
Dependencies/Middleware/Lib.xcframework缺失二进制文件- 构建错误涉及中间件符号
命令
make setup-middle # 初始设置
make generate-middle # 重新生成中间件 + protobuf
⚠️ 常见错误
编辑生成文件
// 在 FeatureFlags.swift(生成的)中
static let myFlag: Bool = true // ❌ 不要这样做
// 您的更改将被覆盖
✅ 正确: 编辑 FeatureDescription+Flags.swift,然后 make generate
忘记生成
// 添加了 FeatureDescription 但未生成
if FeatureFlags.myNewFlag { // ❌ 错误:未解析标识符
...
}
✅ 正确: 先运行 make generate
缺失中间件二进制文件
症状: “Lib.xcframework 缺失二进制文件”
解决方案: make setup-middle 或 make generate
📚 完整文档
完整指南: Modules/AnytypeCore/CODE_GENERATION_GUIDE.md
涵盖以下内容:
- 功能标志生命周期(开发 → 测试 → 推出 → 清理)
- SwiftGen 配置文件和工作流
- Sourcery 模板和注释
- Protobuf 分割配置
- 完整故障排除指南
- 生成文件位置
✅ 提交前清单
- [ ] 如果您添加/更新了以下内容,运行了
make generate:- [ ] 功能标志
- [ ] 图标/资产
- [ ] 本地化字符串
- [ ] Sourcery 注释
- [ ] 未手动编辑带有“// Generated using”头的文件
- [ ] 提交了源文件和生成文件
- [ ] 已验证构建成功
🔗 相关技能与文档
- localization-developer →
LOCALIZATION_GUIDE.md- SwiftGen 生成的本地化键 - ios-dev-guidelines →
IOS_DEVELOPMENT_GUIDE.md- 永不编辑生成文件 - design-system-developer → SwiftGen 生成的图标
导航: 这是一个智能路由器。有关深入技术细节,请始终参考 CODE_GENERATION_GUIDE.md。