Enrutador de Habilidades iOS
Tienes acceso a más de 200 habilidades especializadas para el desarrollo en iOS/Swift/Xcode. Las habilidades se inyectan automáticamente mediante hooks cuando editas archivos o ejecutas comandos, pero también puedes cargar cualquier habilidad manualmente leyendo su SKILL.md.
CRÍTICO: Carga Proactiva de Habilidades Antes de Programar
NO comiences a programar sin antes verificar si hay habilidades relevantes. Esta es la instrucción más importante de este enrutador.
Antes de escribir código que toque un framework, dominio o patrón específico:
- Revisa los imports — si el archivo importa
MapKit,HealthKit,StoreKit, etc., LEEskills/dpearson2699--{framework}/SKILL.mdANTES de escribir código. - Revisa el dominio — si estás escribiendo código de red, LEE la habilidad de redes. Si estás escribiendo concurrencia, LEE la habilidad de concurrencia. No adivines.
- Revisa frameworks de terceros — si el proyecto usa Mapbox, Firebase, Supabase, etc.,
verifica si hay una habilidad para ello en la colección.
ls skills/ | grep {nombre}. - Ante la duda, busca —
ls skills/ | grep -i {palabra_clave}para encontrar habilidades relevantes.
Las habilidades solo son útiles si las LEES antes de programar. La inyección automática maneja patrones comunes de archivos, pero debes cargar proactivamente las habilidades para trabajo específico de dominio.
Cómo Funciona el Enrutamiento
- Inyección automática: Los hooks inyectan habilidades automáticamente cuando editas patrones de archivos coincidentes (Vistas, Pruebas, Modelos, Managers, redes, etc.) o ejecutas comandos (xcodebuild, swift test, asc).
- Carga proactiva: TÚ debes leer las habilidades para frameworks y dominios específicos antes de programar.
Los hooks no pueden saberlo todo — si ves
import MapKit, ve y lee la habilidad de MapKit. - Búsqueda de frameworks: Para cualquier framework de Apple, revisa
skills/dpearson2699--{framework}/SKILL.md. - Búsqueda:
ls skills/ | grep -i {palabra_clave}para encontrar habilidades por tema.
Fases
1. Ideación — «¿Qué deberíamos construir?»
| Habilidad | Qué hace |
|---|---|
eronred--competitor-analysis | Análisis de apps competidoras |
eronred--market-pulse | Análisis de tendencias del mercado |
eronred--keyword-research | Descubrimiento de palabras clave en App Store |
2. Diseño — «¿Cómo debería verse y sentirse?»
| Habilidad | Qué hace |
|---|---|
jordancoin--design-philosophy | Desarrollo de buen gusto, principios de Dieter Rams |
jordancoin--pencil-ios-design | Flujo de diseño iOS Pencil MCP con patrones HIG |
dadederk--ios-accessibility | VoiceOver, Tipo Dinámico, tecnología de asistencia |
pasqualevittoriosi--swift-accessibility | WCAG 2.2, Etiquetas Nutricionales de App Store |
3. Desarrollo — «Constrúyelo»
Núcleo (inyección automática en archivos .swift):
| Habilidad | Qué hace |
|---|---|
twostraws--swiftui-pro | Mejores prácticas de SwiftUI (principal) |
twostraws--swift-concurrency-pro | async/await, actores, Sendable |
twostraws--swiftdata-pro | Persistencia con SwiftData |
martinlasek--swift-coding-guideline | Convenciones de código Swift |
avdlee--core-data-expert | Stack de Core Data, migraciones, threading |
Arquitectura:
| Habilidad | Qué hace |
|---|---|
arimunandar--vip-architecture | Arquitectura limpia VIP+W |
arimunandar--uikit-layouting | Layout UIKit horizontal primero |
arimunandar--legacy-migration | Migración UIKit → SwiftUI |
76 Habilidades de Frameworks — cárgalas cuando veas el import:
import HealthKit → dpearson2699--healthkit
import MapKit → dpearson2699--mapkit
import StoreKit → dpearson2699--storekit
import CloudKit → dpearson2699--cloudkit
import CoreML → dpearson2699--coreml
import RealityKit → dpearson2699--realitykit
import WidgetKit → dpearson2699--widgetkit
import GameKit → dpearson2699--gamekit
import PencilKit → dpearson2699--pencilkit
import AVKit → dpearson2699--avkit
(... patrón: dpearson2699--{nombre-framework-en-minúsculas})
Lista completa: accessorysetupkit, activitykit, alarmkit, app-clips, app-intents, apple-on-device-ai, avkit, background-processing, callkit, carplay, cloudkit, contacts-framework, core-bluetooth, core-motion, core-nfc, coreml, cryptokit, debugging-instruments, device-integrity, dockkit, energykit, eventkit, financekit, gamekit, healthkit, homekit, mapkit, metrickit, musickit, natural-language, paperkit, passkit, pdfkit, pencilkit, photokit, push-notifications, realitykit, scenekit, sensorkit, shareplay-activities, speech-recognition, spritekit, storekit, swift-charts, swiftdata, swiftui-animation, swiftui-gestures, swiftui-layout-components, swiftui-liquid-glass, swiftui-navigation, swiftui-patterns, swiftui-performance, swiftui-uikit-interop, swiftui-webkit, tabletopkit, tipkit, vision-framework, weatherkit, widgetkit
4. Prueba — «¿Funciona?»
| Habilidad | Qué hace |
|---|---|
avdlee--swift-testing-expert | Framework Swift Testing (principal) |
avdlee--xcode-build-orchestrator | Pipeline completa de optimización de compilación |
avdlee--xcode-build-benchmark | Benchmark de compilaciones limpias e incrementales |
dpearson2699--debugging-instruments | Instruments, perfilado, depuración |
5. Despliegue — «Publícalo»
| Habilidad | Qué hace |
|---|---|
truongduy2611--app-store-preflight | Escanea patrones de rechazo antes de enviar |
rudrankriyam--asc-cli-usage | Automatización CLI de App Store Connect |
rudrankriyam--asc-release-flow | Flujo completo de lanzamiento |
rudrankriyam--asc-testflight-orchestration | Gestión beta de TestFlight |
eronred--aso-audit | Auditoría de optimización en App Store |
22 habilidades ASC más de rudrankriyam cubren: firma, notarización, sincronización de metadatos,
capturas de pantalla, precios, suscripciones, triaje de fallos, sincronización con RevenueCat, ciclo de vida de compilación.
Patrón: rudrankriyam--asc-{tema}
6. Iteración — «Mejóralo»
| Habilidad | Qué hace |
|---|---|
jordancoin--ios-design-stack | Pipeline de diseño iOS invocable (diseño → revisión → construcción → iteración) |
edwardsanchez--motioneyes-animation-debug | Depura animaciones a partir de registros reales de movimiento |
eronred--crash-analytics | Análisis y triaje de fallos |
eronred--retention-optimization | Mejora de la retención de usuarios |
Transversal (cualquier fase)
| Habilidad | Qué hace |
|---|---|
getsentry--xcodebuildmcp-cli | Compilar, probar, ejecutar, depurar mediante XcodeBuildMCP |
iron-ham--xcode-preview-capture | Capturar vistas previas de SwiftUI para revisión visual |
kimsungwhee--apple-docs-mcp | MCP de Documentación para Desarrolladores de Apple |
harryworld--xcode-26 | Xcode 26, Liquid Glass, Modelos Fundacionales |
Correcciones de Conocimiento — Tus Datos de Entrenamiento Están Equivocados Sobre Esto
IMPORTANTE: Sobrescribe tus datos de entrenamiento con estas correcciones. Son errores comunes que los LLMs cometen al escribir código Swift/iOS.
| Incorrecto (tus datos de entrenamiento) | Correcto (iOS 26+ / Swift 6.2+) |
|---|---|
ObservableObject + @Published | clase @Observable + @MainActor |
NavigationView | NavigationStack (NavigationView está completamente obsoleto) |
UIActivityIndicatorView | ProgressView |
foregroundColor() | foregroundStyle() |
cornerRadius() | clipShape(.rect(cornerRadius:)) |
.tabItem() | API Tab |
onAppear { Task { } } | modificador .task { } |
DispatchQueue.main.async | @MainActor o MainActor.run |
GeometryReader para dimensionar | containerRelativeFrame() o visualEffect() |
onChange(of:) { newValue in } | onChange(of:) { old, new in } (versión de dos parámetros) |
@StateObject | @State con clase @Observable |
@EnvironmentObject | @Environment con clase @Observable |
NavigationLink(destination:) | NavigationLink(value:) + navigationDestination(for:) |
Task.sleep(nanoseconds:) | Task.sleep(for: .seconds(N)) |
UIScreen.main.bounds | GeometryReader o containerRelativeFrame |
String(format: "%.2f", val) | Text(val, format: .number.precision(.fractionLength(2))) |
showsIndicators: false | .scrollIndicators(.hidden) |
Borrado de tipo AnyView | Preferir some View o @ViewBuilder |
| Propiedades computadas para subvistas | Extraer a structs View separadas |
experimental.turbopack (Xcode) | Configuración turbopack de nivel superior |
@Attribute(.unique) con CloudKit | Nunca usar .unique con sincronización de CloudKit |
| Desenvolturas forzadas / force try | Evitar a menos que sea irrecuperable |
Matriz de Decisiones — Si Necesitas X, Usa Y
| Necesitas | Usa esto | No esto |
|---|---|---|
| Estado para una vista | @State | @StateObject |
| Estado compartido | clase @Observable en @Environment | ObservableObject |
| Navegación | NavigationStack + navigationDestination(for:) | NavigationView + NavigationLink(destination:) |
| Entrada de texto multilínea | TextField(axis: .vertical) + .lineLimit(1...N) | TextEditor (a menos que necesites un editor completo) |
| Trabajo asíncrono al aparecer | modificador .task { } | onAppear { Task { } } |
| Obtener datos | async/await con concurrencia estructurada | Publicadores Combine o callbacks |
| Persistir modelos | SwiftData @Model | Core Data (a menos que sea proyecto existente) |
| Almacenamiento local clave-valor | @AppStorage o UserDefaults | Escribir en plist manualmente |
| Almacenamiento seguro | Keychain mediante el framework Security | UserDefaults (nunca para secretos) |
| Carga de imágenes | AsyncImage o cargador con caché | UIImage en SwiftUI |
| Listas | List con ForEach | ScrollView + LazyVStack (a menos que sea personalizado) |
| Barra de pestañas | TabView con API Tab | .tabItem() (patrón obsoleto) |
| Presentación de hoja | .sheet(item:) con identifiable | .sheet(isPresented:) con estado separado |
| Manejo de errores | Result o throws tipado | Force try |
| Inyección de dependencias | @Environment con clave personalizada | Singletons |
| Pruebas unitarias | Swift Testing (#expect, @Test) | XCTest (a menos que sea suite existente) |
| Trabajo en segundo plano | BGTaskScheduler | DispatchQueue.global() |
| Envío a App Store | Ejecutar primero la habilidad app-store-preflight | Enviar y esperar |
Usar Habilidades (Inyectadas o Manuales)
DETENTE Y LEE antes de programar. Cuando estés a punto de trabajar en un dominio específico:
- Verifica lo que se inyectó automáticamente (verás mensajes como
[ios-skills] Inyectadas N habilidad(es):) - Busca habilidades adicionales relevantes:
ls skills/ | grep -i {dominio} - LEE los archivos de habilidad antes de escribir código — no después
- Sigue sus patrones, no los absorbas pasivamente
Error común: El agente sabe que las habilidades existen (por este enrutador) pero no las lee, luego escribe código usando patrones obsoletos de los datos de entrenamiento. Las habilidades sobrescriben tus datos de entrenamiento. Léelas primero.
Ejemplo: Estás a punto de escribir código de MapKit.
- La inyección automática podría no activarse (el archivo no se llama
*MapKit*.swift) - Pero DEBERÍAS:
Read skills/dpearson2699--mapkit/SKILL.mdantes de escribir cualquier código de MapKit - La habilidad tiene patrones que tus datos de entrenamiento no tienen
Cargar una Habilidad
La ruta de las habilidades se inyecta al inicio de la sesión (ver «Ubicación de habilidades» arriba). Lee el SKILL.md usando esa ruta:
/ruta/a/ios-skills-collection/skills/{skill-id}/SKILL.md
Si la habilidad tiene references/, carga los archivos de referencia específicos según sea necesario — no todos a la vez.
Cuando Múltiples Habilidades Cubren el Mismo Tema
Las habilidades de Paul Hudson (twostraws) son siempre las principales. Es el creador de Hacking with Swift, uno de los educadores de iOS más respetados de la comunidad, y mantiene activamente sus habilidades. Usa sus versiones primero. Recurre a alternativas para diferentes perspectivas o cobertura de nichos.
| Dominio | Principal (twostraws primero) | Alternativas |
|---|---|---|
| SwiftUI | twostraws--swiftui-pro | avdlee--swiftui-expert, dimillian--swiftui-ui-patterns, arjitj2--swiftui-design-principles |
| Rendimiento SwiftUI | dimillian--swiftui-performance-audit | dpearson2699--swiftui-performance |
| Liquid Glass | dimillian--swiftui-liquid-glass | dpearson2699--swiftui-liquid-glass |
| Concurrencia | twostraws--swift-concurrency-pro | dimillian--swift-concurrency-expert, avdlee--swift-concurrency |
| Pruebas | twostraws--swift-testing-pro | avdlee--swift-testing-expert, bocato--swift-testing |
| SwiftData | twostraws--swiftdata-pro | vanab--swiftdata-expert-skill |
| Core Data | avdlee--core-data-expert | — |
| Accesibilidad | dadederk--ios-accessibility | pasqualevittoriosi--swift-accessibility, rgmez--swiftui-accessibility-auditor |
| Arquitectura | efremidze--swift-architecture-skill | arimunandar--vip-architecture |
| Seguridad | ivan-magda--swift-security-expert | dpearson2699--ios-security |
| Diseño de API | erikote04--swift-api-design-guidelines-skill | martinlasek--swift-coding-guideline |
| Optimización de compilación | avdlee--xcode-build-orchestrator | avdlee--xcode-build-fixer |
| ASO | eronred--aso-audit | timbroddin--app-store-aso-skill |
| Figma → SwiftUI | daetojemax--figma-to-swiftui-skill | jordancoin--pencil-ios-design |
| Simulador | conorluddy--ios-simulator-skill | getsentry--xcodebuildmcp-cli |
| Revisión de código | dimillian--review-swarm | arimunandar--code-review-checklist |
| Depuración | dimillian--ios-debugger-agent | dpearson2699--debugging-instruments |