| name | code-generation-developer |
| description | Context-aware routing to code generation workflows including SwiftGen, Sourcery, Feature Flags, and Protobuf. Use when running make generate, adding feature flags, or working with generated files. |
Code Generation Developer (Smart Router)
Purpose
Context-aware routing to code generation workflows: SwiftGen, Sourcery, Feature Flags, and Protobuf. Helps you navigate when and how to run generators.
When Auto-Activated
- Running or discussing
make generate
- Adding feature flags
- Working with generated files
- Keywords: swiftgen, sourcery, feature flags, FeatureFlags, make generate
🚨 CRITICAL RULES (NEVER VIOLATE)
- NEVER edit generated files - Files marked with
// Generated using Sourcery/SwiftGen are auto-generated
- ALWAYS run
make generate after changes - When updating templates, flags, assets, or localization
- Feature flags for all new features - Wrap experimental code for safe rollouts
- Update source, not generated code - Edit templates/configurations, then regenerate
📋 Essential Commands
make generate
make generate-middle
make setup-middle
🚩 Feature Flags Quick Workflow
1. Define Flag
File: /Modules/AnytypeCore/AnytypeCore/Utils/FeatureFlags/FeatureDescription+Flags.swift
extension FeatureDescription {
static let newChatInterface = FeatureDescription(
title: "New Chat Interface",
type: .feature(author: "Your Name", releaseVersion: "0.42.0"),
defaultValue: false,
debugValue: true
)
}
2. Generate
make generate
This creates: Modules/AnytypeCore/AnytypeCore/Generated/FeatureFlags.swift
3. Use in Code
import AnytypeCore
if FeatureFlags.newChatInterface {
NewChatView()
} else {
LegacyChatView()
}
Flag Types
.debug: Debug-only (not available in production)
.feature(author:releaseVersion:): Production feature with metadata
Best Practices
defaultValue: false for unreleased features
debugValue: true for easier developer testing
- Remove flags after full rollout
🎯 When to Run make generate
| You Did This | Run This | Why |
|---|
| Added/updated .xcstrings | make generate | Regenerate Loc constants |
| Added feature flag | make generate | Generate FeatureFlags enum |
| Added icon to Assets.xcassets | make generate | Generate Image asset constants |
| Modified Sourcery template | make generate | Regenerate code from templates |
| Updated middleware version | make generate-middle | Regenerate protobuf bindings |
🎨 SwiftGen - Assets & Localization
Adding Icons
- Export SVG from Figma (e.g., "32/qr code" →
QRCode.svg)
- Add to
/Modules/Assets/.../Assets.xcassets/DesignSystem/x32/QRCode.imageset/
- Run
make generate
- Use:
Image(asset: .X32.qrCode)
Icon Sizes: x18, x24, x32, x40 (pt)
Localization
SwiftGen generates Loc constants from .xcstrings files.
See localization-developer skill for complete workflow.
🔧 Sourcery - Template-Based Generation
Sourcery generates Swift code from templates based on source file annotations.
Common uses:
- Protocol conformance
- Mock implementations
- Dependency injection
- Enum helpers
Workflow:
- Add annotation to source file:
// sourcery: AutoEquatable
- Run
make generate
- Use generated code (don't edit generated files!)
🔌 Middleware & Protobuf
When to Regenerate
- Middleware version updated
Dependencies/Middleware/Lib.xcframework missing binaries
- Build errors related to middleware symbols
Commands
make setup-middle
make generate-middle
⚠️ Common Mistakes
Editing Generated Files
static let myFlag: Bool = true
✅ Correct: Edit FeatureDescription+Flags.swift, then make generate
Forgetting to Generate
if FeatureFlags.myNewFlag {
...
}
✅ Correct: Run make generate first
Missing Middleware Binaries
Symptoms: "Lib.xcframework missing binaries"
Solution: make setup-middle or make generate
📚 Complete Documentation
Full Guide: Modules/AnytypeCore/CODE_GENERATION_GUIDE.md
For comprehensive coverage of:
- Feature Flags lifecycle (Development → Beta → Rollout → Cleanup)
- SwiftGen configuration files and workflows
- Sourcery templates and annotations
- Protobuf splitting configuration
- Complete troubleshooting guide
- Generated file locations
✅ Checklist: Before Committing
🔗 Related Skills & Docs
- localization-developer →
LOCALIZATION_GUIDE.md - Localization keys generated by SwiftGen
- ios-dev-guidelines →
IOS_DEVELOPMENT_GUIDE.md - Never edit generated files
- design-system-developer → Icons generated by SwiftGen
Navigation: This is a smart router. For deep technical details, always refer to CODE_GENERATION_GUIDE.md.