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/SwiftGenare auto-generated - •ALWAYS run
make generateafter 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 # Run all generators (SwiftGen, Sourcery, assets, localization) make generate-middle # Regenerate middleware and protobuf (when dependencies change) make setup-middle # Initial middleware setup
🚩 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, // Off in production
debugValue: true // On in debug builds for testing
)
}
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: falsefor unreleased features - •
debugValue: truefor 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.xcframeworkmissing binaries - •Build errors related to middleware symbols
Commands
make setup-middle # Initial setup make generate-middle # Regenerate middleware + protobuf
⚠️ Common Mistakes
Editing Generated Files
// In FeatureFlags.swift (GENERATED) static let myFlag: Bool = true // ❌ DON'T DO THIS // Your changes will be overwritten
✅ Correct: Edit FeatureDescription+Flags.swift, then make generate
Forgetting to Generate
// Added FeatureDescription but didn't generate
if FeatureFlags.myNewFlag { // ❌ Error: unresolved identifier
...
}
✅ 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
- • Ran
make generateif you added/updated:- • Feature flags
- • Icons/assets
- • Localization strings
- • Sourcery annotations
- • Did NOT manually edit files with "// Generated using" header
- • Committed both source AND generated files
- • Verified build succeeds
🔗 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.