Francisco José García Navarro
June 7, 2022WWDC 2022: todo lo que un desarrollador iOS necesita saber
" El resumen técnico del día después — lo que importa de verdad para tu app en producción "
Acabo de terminar de ver el keynote y el State of the Union de la WWDC 2022, y tengo que decirlo: este año Apple ha ido a por todas con los developers. No es un año de retoques cosméticos. Es un año de cambios estructurales que van a afectar a cómo escribimos código iOS durante los próximos tres o cuatro años.
Swift 5.7 trae la mayor actualización del lenguaje desde Swift 3. SwiftUI reescribe la navegación desde cero. Aparece un framework de gráficas nativo. Los widgets llegan a la pantalla de bloqueo. Y Xcode 14 por fin adelgaza.
Voy a desglosar todo lo relevante para quienes trabajamos en apps iOS en producción. Sin hype, con análisis técnico y opinión de alguien que lleva más de una década peleándose con UIKit.
SwiftUI reescribe la navegación desde cero
Esta es, para mí, la noticia más importante de toda la WWDC. Si has trabajado con NavigationView en un proyecto real, sabes que era un dolor constante: estado de navegación difícil de gestionar, imposible hacer pop-to-root programáticamente, y un comportamiento errático en iPad con split views.
Apple lo ha tirado todo y ha empezado de cero con dos nuevos contenedores:
NavigationStack reemplaza la navegación push clásica con un modelo basado en datos. Le vinculas un NavigationPath (una colección type-erased y Codable), haces push de valores con NavigationLink(value:), y defines destinos de forma separada con .navigationDestination(for:destination:). ¿Pop-to-root? Una línea: path.removeAll(). ¿Deep linking? Reconstruyes el path desde una URL y listo.
NavigationSplitView maneja layouts multi-columna (dos o tres columnas) y colapsa automáticamente a una sola columna en iPhone.
NavigationStack(path: $path) {
List(items) { item in
NavigationLink(value: item) {
ItemRow(item: item)
}
}
.navigationDestination(for: Item.self) { item in
ItemDetailView(item: item)
}
}
Esto cambia las reglas del juego. Por primera vez, puedes gestionar el estado de navegación completo de tu app desde fuera de la vista, lo cual es exactamente lo que necesitamos en arquitecturas tipo MVVM o Clean Architecture. En apps enterprise con flujos complejos (onboarding, pagos, formularios multi-paso), esto elimina una categoría entera de bugs.
Nuevo protocolo Layout y layouts adaptativos
Más allá de la navegación, SwiftUI 4 introduce el protocolo Layout para crear layouts de contenedor completamente personalizados. Solo necesitas implementar sizeThatFits y placeSubviews. El tipo complementario AnyLayout permite transiciones animadas entre tipos de layout sin destruir el estado de las vistas.
ViewThatFits selecciona automáticamente la primera vista hija que cabe en el espacio disponible — ideal para UI adaptativa sin GeometryReader. Y el nuevo par Grid/GridRow proporciona un layout bidimensional estático (no lazy) con soporte para colspan vía gridCellColumns(_:).
Para los que llevamos años haciendo malabares con GeometryReader y calculando offsets a mano, esto es un antes y un después.
Swift Charts: visualización de datos nativa
Apple lanza Swift Charts, un framework declarativo de gráficas completamente integrado con SwiftUI. Un Chart contiene seis tipos de marcas: BarMark, LineMark, PointMark, AreaMark, RuleMark y RectangleMark. Cada marca mapea datos a ejes mediante PlottableValue.
import Charts
Chart(salesData) { item in
BarMark(
x: .value("Mes", item.month),
y: .value("Ventas", item.revenue)
)
.foregroundStyle(by: .value("Categoría", item.category))
}
Las gráficas vienen con soporte automático de Dark Mode, Dynamic Type, VoiceOver y Audio Graph. Para apps enterprise que muestran dashboards, métricas o reportes, esto elimina la dependencia de librerías de terceros que llevan años sin mantenimiento consistente.
Mi opinión: si tu app muestra datos, esto debería ser tu primera adopción de la WWDC 2022.
Swift 5.7: la mayor actualización del lenguaje en años
Swift 5.7 empaqueta más de 20 propuestas de Swift Evolution. Voy a cubrir las que más impacto tienen en código de producción.
if-let shorthand
Por fin. if let startDate { } desenvuelve un optional sin repetir el nombre de la variable. Funciona en guard let y while let también. Parece menor, pero en un codebase con miles de unwraps, reduce ruido visual de forma significativa.
// Antes
if let startDate = startDate {
configure(with: startDate)
}
// Ahora
if let startDate {
configure(with: startDate)
}
Revolución en genéricos y existenciales
Aquí es donde Swift 5.7 se pone serio:
- Opaque parameter types (SE-0341): puedes usar
some Protocolen parámetros de función como atajo para constraints genéricos. - La keyword
any(SE-0335): hace explícitos los tipos existenciales. Ahora escribesany Equatable,any Collection<String>. Será obligatorio en Swift 6. - Primary associated types (SE-0346): permiten genéricos restringidos como
some Collection<String>. - Existenciales implícitamente abiertos (SE-0352): pasar
any Protocola un parámetrosome Protocolfunciona automáticamente.
Estos cambios eliminan el infame error "protocol can only be used as a generic constraint" que ha atormentado a developers de Swift durante años.
Regex literals
Las expresiones regulares llegan a Swift como ciudadanos de primera clase con el tipo Regex<Output>. Soporte para sintaxis /pattern/, un DSL con RegexBuilder para patrones complejos, y nuevos métodos en String como .firstMatch(of:), .wholeMatch(in:), .replacing() y .split(). Las capturas con nombre tienen tipado fuerte.
Para apps que procesan texto (parseo de documentos, validación de formularios, extracción de datos), esto es un salto cualitativo respecto a NSRegularExpression.
Concurrencia: distributed actors y Sendable más estricto
Distributed actors (SE-0336, SE-0344) extienden el aislamiento de actores a través de fronteras de red. Un distributed actor usa métodos distributed func que siempre requieren try await, y todos los parámetros deben ser Codable.
Más relevante para la mayoría de equipos: Sendable checking se endurece. Xcode 14 introduce un nuevo build setting — "Strict Concurrency Checking" — con tres niveles: Minimal, Targeted y Complete. En Complete, el compilador avisa sobre tipos no-Sendable que cruzan fronteras de actores. Esto es una preview del comportamiento de Swift 6.
Mi recomendación: activa Targeted hoy en tus proyectos. No esperes a Swift 6 para descubrir que tienes cientos de warnings de concurrencia. Cuanto antes empieces, menos dolorosa será la migración.
Los nuevos tipos Clock, Instant y Duration (SE-0329) estandarizan la medición de tiempo. ContinuousClock y SuspendingClock reemplazan Task.sleep basado en nanosegundos:
try await Task.sleep(until: .now + .seconds(1), clock: .continuous)
Y dato importante: Apple confirma que Swift Concurrency se back-deploya a iOS 13 incluyendo el runtime de concurrencia en el binario de la app. Además, el cacheo de conformancias de protocolo en runtime reduce tiempos de lanzamiento hasta un 50% en iOS 16.
Widgets en la pantalla de bloqueo y Live Activities
iOS 16 lleva los widgets a la pantalla de bloqueo mediante WidgetKit. Tres nuevos casos de WidgetFamily: accessoryCircular, accessoryRectangular y accessoryInline, que replican los estilos de complicaciones de watchOS. Los modos de renderizado (fullColor, accented, vibrant) se acceden vía @Environment(\.widgetRenderingMode).
Lo más interesante: el mismo código WidgetKit funciona tanto en la Lock Screen de iPhone como en complicaciones de Apple Watch, reemplazando ClockKit por completo. Código compartido entre plataformas de verdad, no marketing.
Live Activities muestran contenido que se actualiza en tiempo real en la pantalla de bloqueo: resultados deportivos, seguimiento de entregas, estado de viajes. El framework ActivityKit define un protocolo ActivityAttributes con un ContentState anidado para datos dinámicos. Las actividades se inician con Activity.request(attributes:content:pushType:), se actualizan localmente o vía push notifications, y tienen un límite de 8 horas activas con 4 KB de datos.
Para apps de retail, logística, banca o cualquier servicio con estados en tiempo real, esto es una oportunidad enorme de engagement sin depender de notificaciones push intrusivas.
Xcode 14: más pequeño, más rápido
Xcode 14 es un 30% más pequeño (~7 GB) al hacer opcionales los simuladores de watchOS y tvOS. Los builds son hasta un 25% más rápidos gracias a mejor paralelismo y producción eager de módulos Swift. El linker estático es 2× más rápido, los tests en paralelo un 30% más rápidos, y la notarización 4× más rápida.
- App icon de tamaño único: una imagen de 1024×1024 genera automáticamente todos los tamaños. Adiós al catálogo de iconos.
- Build Timeline: visualización para identificar cuellos de botella en el build.
- Previews interactivas por defecto en SwiftUI.
- Feedback Organizer: feedback de TestFlight y reportes de hangs directamente en Xcode.
- Bitcode oficialmente deprecado.
- Nuevo instrumento de Swift Concurrency en Instruments 14 para visualizar la ejecución de tareas async.
Para equipos grandes, la reducción de tiempos de build y la Build Timeline son mejoras con impacto directo en productividad. Si tienes un proyecto con 50+ módulos SPM, esa mejora del 25% se traduce en minutos reales al día.
iPadOS 16: Stage Manager y APIs desktop-class
Stage Manager lleva ventanas superpuestas y redimensionables al iPad por primera vez, inicialmente restringido a iPads con M1. Soporte para pantalla externa hasta 6K de resolución con hasta 4 apps en la pantalla externa y 4 en el iPad simultáneamente.
Para developers, lo relevante son las APIs desktop-class en UIKit:
- Dos nuevos estilos de
UINavigationItem:.browsery.editor. - Toolbars personalizables por el usuario con menús de overflow.
- Menú de documento centrado en el título (duplicar, mover, renombrar, exportar, imprimir).
UIEditMenuInteractionrediseñado (reemplaza el deprecadoUIMenuController).UICalendarView: calendario standalone con selección multi-fecha y decoraciones por día.UIHostingConfiguration: usar vistas SwiftUI dentro de celdas de UIKit collection y table views.- Find and Replace con un solo flag:
isFindInteractionEnabledenUITextViewoWKWebView.
UIHostingConfiguration es especialmente importante para equipos en migración progresiva de UIKit a SwiftUI:
cell.contentConfiguration = UIHostingConfiguration {
HStack {
Image(systemName: item.icon)
Text(item.title)
}
}
Nuevos frameworks: WeatherKit, MapKit, App Intents, RoomPlan
WeatherKit reemplaza la API de Dark Sky con condiciones actuales, precipitación minuto a minuto, previsiones horarias/diarias, alertas meteorológicas e históricos. API nativa async en Swift y endpoint REST. Tier gratuito: 500.000 llamadas/mes.
MapKit gana la experiencia City Experience 3D con landmarks detallados, API de Look Around para apps de terceros, features de mapa seleccionables, y nuevas Apple Maps Server APIs con endpoints de Geocode, Reverse Geocode, Search y ETA (25.000 llamadas diarias, auth JWT).
App Intents es un reemplazo todo-Swift de los ficheros de definición de SiriKit. Expone funcionalidad de la app a Siri, Shortcuts y Spotlight con cero configuración por parte del usuario — hasta 10 App Shortcuts por app. Adiós a los .intentdefinition files.
RoomPlan usa LiDAR y ARKit para generar escaneos 3D paramétricos de habitaciones con reconocimiento de paredes, ventanas y puertas. ARKit 6 añade modo de vídeo 4K y captura de movimiento mejorada. Metal 3 debuta con MetalFX upscaling, compilación offline de shaders, mesh shaders y API de carga rápida de recursos.
Seguridad: Passkeys llegan para quedarse
Passkeys traen autenticación passwordless FIDO2/WebAuthn a las plataformas Apple. Basadas en criptografía de clave pública, autenticadas vía Face ID o Touch ID, sincronizadas end-to-end encrypted a través de iCloud Keychain, y con soporte cross-platform vía código QR.
Los developers integran mediante ASAuthorizationPlatformPublicKeyCredentialProvider en el framework AuthenticationServices. Para apps de banca, salud o cualquier sector con requisitos de seguridad, esto es el futuro de la autenticación.
Hardware: chip M2 y nuevos MacBook
El chip M2 potencia el MacBook Air rediseñado ($1.199) y el MacBook Pro 13" actualizado ($1.299). Fabricado en proceso mejorado de 5nm de TSMC con 20.000 millones de transistores: CPU de 8 cores (18% más rápida que M1), GPU de hasta 10 cores (35% más rápida), Neural Engine de 16 cores (40% más rápido), hasta 24 GB LPDDR5 de memoria unificada a 100 GB/s, y motor hardware ProRes.
Para developers, más potencia en el Neural Engine significa mejor rendimiento para CoreML y on-device machine learning. Y 24 GB de RAM unificada es bienvenida para quienes corremos Xcode, simuladores, y Docker simultáneamente.
Más novedades relevantes
- watchOS 9: APIs mejoradas de
HKWorkoutpara entrenamientos multi-actividad (triatlones, intervalos). CallKit llega al Apple Watch para integración VoIP. Conectividad Bluetooth en background para alertas críticas. - HealthKit: datos de fases del sueño (REM, Core, Deep, Awake) y almacenamiento de prescripciones de visión.
- CarPlay de nueva generación: integración con cluster de instrumentos, controles de climatización y soporte multi-pantalla. Vehículos esperados de más de 14 fabricantes.
- macOS Ventura: Continuity Camera (iPhone como webcam inalámbrica del Mac), System Settings reconstruido en SwiftUI, Stage Manager en Mac, y TextKit 2 como base de todos los controles de texto.
- SKAdNetwork 4.0: tres ventanas de postback de conversión, valores de conversión jerárquicos y atribución web-to-app.
Conclusión: qué hacer ahora
Esta WWDC marca un punto de inflexión. No es solo una acumulación de features — es un cambio de dirección en cómo Apple espera que construyamos apps.
Si tuviera que elegir tres acciones concretas para un equipo iOS enterprise:
- Adopta
NavigationStacken tu próximo feature. La navegación basada en datos es objetivamente superior aNavigationView. Si estás en UIKit, planifica la migración de tus flujos más complejos. - Activa Strict Concurrency Checking en nivel Targeted en Xcode 14. Swift 6 va a hacer obligatoria la seguridad de concurrencia. Cada warning que resuelvas ahora es un error menos cuando llegue la hora.
- Construye un Lock Screen widget. Es la forma más visible de presencia de tu app fuera de la Home Screen. Con WidgetKit compartido entre iPhone y Apple Watch, el ROI de código es excelente.
La convergencia de plataformas (WidgetKit compartido, UIHostingConfiguration, desktop-class iPad) significa que los equipos pueden escribir menos código para más superficies. Y los cambios en Swift 5.7 — existenciales, genéricos, regex — simplifican el código que escribimos a diario.
Ha sido una buena WWDC. Ahora toca ponerse a trabajar.
¿Necesitas ayuda con la adopción?
💡 ¿Tienes un proyecto que necesita migración? Podemos ayudarte a hacer la transición de forma eficiente y sin interrupciones en tu flujo de desarrollo.
📩 Contáctanos aquí para más información.
Sobre el autor
Francisco José García Navarro
Francisco José García Navarro es el cofundador y CEO de AtalayaSoft e ingeniero de software iOS experimentado con más de 25 años en desarrollo de software. Especializado en aplicaciones iOS nativas, Francisco tiene una amplia trayectoria trabajando con clientes de alto perfil como Banco Santander, Fox International Channel, Repsol y National Geographic.