This skill should be used when the user asks to "build multi-step forms", "create form validation", "implement dynamic forms", "add conditional fields", "generate form components", "create application forms", or needs guidance on iOS form architecture and validation patterns.
From ios-dev-toolkitnpx claudepluginhub nbkm8y5/claude-plugins --plugin ios-dev-toolkitThis skill uses the workspace's default tool permissions.
references/form_patterns.mdreferences/integration_guide.mdscripts/generate_form_components.pyscripts/generate_form_coordinator.pySearches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Guides implementation of event-driven hooks in Claude Code plugins using prompt-based validation and bash commands for PreToolUse, Stop, and session events.
Generate comprehensive form infrastructure for iOS applications including field components, validation, multi-step coordinators, and form state management.
Use this skill when building:
python3 scripts/generate_form_components.py ./output
Generates:
FormField.swift - Form field protocols and implementations (550+ lines)FormFieldViews.swift - SwiftUI views for rendering fields (400+ lines)python3 scripts/generate_form_coordinator.py ./output
Generates:
FormCoordinator.swift - Multi-step form management (350+ lines)FormState.swift - Auto-save and state persistence (150+ lines)See references/form_patterns.md for complete implementation examples.
TextFormField - Text input with validation
NumberFormField - Numeric input with constraints
DateFormField - Date selection
PickerFormField - Single selection
ToggleFormField - Boolean switch
MultiSelectFormField - Multiple selection
Built-in validators:
EmailValidationRule - Email formatPhoneValidationRule - Phone number formatMinLengthValidationRule - Minimum charactersMaxLengthValidationRule - Maximum charactersRegexValidationRule - Custom patternsCustomValidationRule - Custom logicCross-field validation:
func validate() -> Bool {
// Validate individual fields
guard field1.validate(), field2.validate() else {
return false
}
// Cross-field validation
if field1.value > field2.value {
field2.errorMessage = "Must be greater than field 1"
return false
}
return true
}
FormCoordinator - Manages multi-step flows
AutoSaveFormCoordinator - Auto-saves form state
FormCoordinatorView - Pre-built SwiftUI view
Show/hide fields based on other field values:
let conditionalManager = ConditionalFieldManager()
conditionalManager.addCondition(fieldId: "condoFee") {
propertyTypeField.value == "condo"
}
Use enhanced currency/percentage inputs:
CurrencyInputField(
value: $field.value,
label: field.label
)
Auto-save to Core Data or UserDefaults:
class PersistentFormCoordinator: FormCoordinator {
func saveFormData() {
try context.save()
}
}
Document upload with camera:
await permissionManager.requestPermission(.camera)
await permissionManager.requestPermission(.photoLibrary)
Real-time mortgage calculations:
let payment = calculator.calculateMonthlyPayment(
principal: loanAmount,
annualRate: rate,
years: term
)
Export completed forms to PDF:
let exporter = FormPDFExporter()
let pdfURL = try await exporter.exportFormToPDF(data: formData)
See references/form_patterns.md section "Multi-Step Forms" for complete mortgage application example with:
See references/form_patterns.md section "Basic Form Patterns" for contact form with:
See references/form_patterns.md section "Conditional Fields" for property form with:
See references/form_patterns.md section "Multi-Step Forms" for auto-save example with:
Read references/form_patterns.md for:
Read references/integration_guide.md for:
.emailAddress, .phonePad, .decimalPadOutput Directory/
├── FormField.swift (550+ lines)
│ ├── FormField protocol
│ ├── TextFormField
│ ├── NumberFormField
│ ├── DateFormField
│ ├── PickerFormField
│ ├── ToggleFormField
│ ├── MultiSelectFormField
│ └── Validation rules
├── FormFieldViews.swift (400+ lines)
│ ├── TextFormFieldView
│ ├── NumberFormFieldView
│ ├── DateFormFieldView
│ ├── PickerFormFieldView
│ ├── ToggleFormFieldView
│ └── MultiSelectFormFieldView
├── FormCoordinator.swift (350+ lines)
│ ├── FormStep protocol
│ ├── FormCoordinator class
│ ├── FormCoordinatorView
│ ├── StepNavigationView
│ └── ConditionalFieldManager
└── FormState.swift (150+ lines)
├── FormStateManager
├── FormData protocol
└── AutoSaveFormCoordinator
Total: ~1,450 lines of production-ready Swift code
// Create form with financial fields
let incomeField = NumberFormField(id: "income", label: "Monthly Income", isRequired: true)
let debtsField = NumberFormField(id: "debts", label: "Monthly Debts", isRequired: true)
let downPaymentField = NumberFormField(id: "down", label: "Down Payment", isRequired: true)
// Real-time affordability calculation
let maxHomePrice = calculator.calculateAffordability(
monthlyIncome: incomeField.value,
monthlyDebts: debtsField.value,
downPayment: downPaymentField.value
)
let nameField = TextFormField(id: "name", label: "Full Name", isRequired: true)
let emailField = TextFormField(
id: "email",
label: "Email",
isRequired: true,
validationRules: [EmailValidationRule()],
keyboardType: .emailAddress
)
let passwordField = TextFormField(
id: "password",
label: "Password",
isRequired: true,
validationRules: [MinLengthValidationRule(minLength: 8)]
)
// Conditional fields based on property type
let propertyTypeField = PickerFormField<String>(
id: "type",
label: "Property Type",
options: [
.init("singleFamily", label: "Single Family"),
.init("condo", label: "Condominium")
]
)
// Only show condo fee if condo selected
conditionalManager.addCondition(fieldId: "condoFee") {
propertyTypeField.value == "condo"
}
// Request camera permission
await permissionManager.requestPermission(.camera)
// Upload document photos
class DocumentUploadStep: FormStep {
@Published var documents: [UIImage] = []
func addDocument(_ image: UIImage) {
documents.append(image)
}
}
form_patterns.mdFields not validating?
field.validate() before checking field.isValidMulti-step form not advancing?
isOptional flag for optional stepsAuto-save not working?
FormData conforms to CodableConditional fields not hiding?
Form state not restoring?
FormData decoding succeeds