Canvas en Xcode — qué es, editor SwiftUI y trabajo con previsualizaciones

Autor: IT Sectr Publicado: 2026-06-27 Tiempo de lectura: 10 min

Canvas es un editor interactivo de previsualización de Xcode que muestra SwiftUI View en tiempo real sin iniciar el simulador. Canvas se actualiza automáticamente con cada cambio de código y admite gestos, navegación y modo oscuro. Según Apple Developer Documentation (2026), Canvas utiliza un proceso de renderizado separado PreviewProviderExtension, lo que permite editar el código y ver los resultados al instante sin recompilar todo el proyecto. Lea más sobre SwiftUI en el artículo sobre SwiftUI.

Puntos clave

  • Canvas — editor interactivo de previsualización de Xcode para SwiftUI View en tiempo real.
  • PreviewProvider — protocolo obligatorio para Canvas: sin él, el editor está vacío.
  • Actualización automática — Canvas redibuja la interfaz con cada cambio de código sin compilar el proyecto.
  • Interactividad — Canvas admite gestos, navegación, modo oscuro y emulación de dispositivos.
  • Limitaciones de UIKit — algunos componentes UIKit (MapKit, WebView) no se renderizan en Canvas.

¿Qué es Canvas en Xcode?

Canvas es un editor de previsualización integrado en Xcode, presentado por primera vez en Xcode 11 junto con SwiftUI. Está ubicado en el panel derecho del editor junto al código y muestra una vista previa en vivo de la SwiftUI View actual. Canvas funciona en tiempo real: cada cambio en el código se refleja instantáneamente en la vista previa sin necesidad de recompilación manual.

Arquitectónicamente, Canvas es un proceso separado (Preview Provider Extension) que Xcode inicia al abrir Canvas. El proceso carga el PreviewProvider compilado, renderiza el resultado a través de Metal y lo muestra en el panel del editor. Si PreviewProvider no está implementado, Canvas muestra un marcador “Preview paused — No preview provider found”.

Interfaz de Canvas

La interfaz de Canvas incluye una barra de herramientas con selección de dispositivo, orientación, esquema de colores y escala. Los botones Live Preview, Selectable y Embed In Diagram cambian los modos de interacción. Canvas admite vista dividida: puede abrir varios Canvas para diferentes archivos en el mismo espacio de trabajo.

Elemento de CanvasPropósito
Selector de dispositivoSeleccionar dispositivo para la vista previa (iPhone, iPad, Apple Watch)
Alternar orientaciónCambiar retrato/paisaje (iOS, iPadOS)
Esquema de coloresTema claro/oscuro
Control deslizante Dynamic TypeEscala de fuente para pruebas de accesibilidad
Live PreviewModo interactivo con soporte de gestos
Modo seleccionableInspección de elementos de la interfaz

Cómo funciona Canvas interactivo

Live Preview es la característica clave de Canvas que hace que las vistas previas sean interactivas. En este modo, Canvas renderiza la View en un proceso separado y pasa los gestos (toque, deslizamiento, desplazamiento) al runtime de SwiftUI. El usuario puede presionar botones, llenar campos de texto y probar la navegación sin iniciar el simulador.

SwiftUI procesa los gestos en Canvas a través del mismo sistema de eventos que en un dispositivo real. La diferencia está en el rendimiento: Canvas utiliza renderizado por software a través de Metal, mientras que el simulador usa gráficos del host. Esto significa que las animaciones complejas en Canvas pueden funcionar más lento o verse diferentes visualmente.

Proceso de actualización de Canvas

La actualización de Canvas ocurre en tres etapas. Primero, Xcode detecta el cambio de archivo y compila incrementalmente solo el PreviewProvider modificado. Luego, el nuevo módulo binario se carga en el proceso PreviewProviderExtension. Finalmente, SwiftUI recrea la View y la renderiza a través de Metal. Todo el ciclo toma de 0,5 a 2 segundos dependiendo de la complejidad de la View.

swift
struct TappableButton: View {
    @State private var count = 0
    
    var body: some View {
        Button("Tapped \(count) times") {
            count += 1
        }
        .buttonStyle(.borderedProminent)
    }
}

struct TappableButton_Previews: PreviewProvider {
    static var previews: some View {
        TappableButton()
    }
}

Interactividad: cuando Live Preview está activo, el botón en Canvas funciona como uno real — el contador se incrementa con cada toque y se muestra la animación de presión. Esto permite probar la lógica de los botones sin el simulador.

Configuración de Canvas

Configuraciones básicas de Canvas están disponibles a través del menú Editor → Canvas o mediante los botones de la barra de herramientas de Canvas. Las opciones principales incluyen selección de dispositivo, orientación, tema oscuro y escala Dynamic Type. Para configuraciones persistentes, use modificadores de PreviewProvider en el código.

Configuraciones avanzadas incluyen: Auto Activate Preview — activación automática de Canvas al abrir un archivo SwiftUI; Live Preview — modo con gestos; Draw Live Edges — mostrar bordes de la vista; Show Preview Sizes — tamaño del área de vista previa. Xcode guarda estas configuraciones de forma portátil en archivos del workspace/proyecto.

Configuración mediante PreviewProvider

Configuración programática brinda un control más preciso sobre Canvas. Los modificadores aplicados en las vistas previas anulan las configuraciones de la barra de herramientas y se guardan en el código — todos los miembros del equipo los ven a través de git.

swift
struct SettingsView_Previews: PreviewProvider {
    static var previews: some View {
        SettingsView()
            .previewDevice("iPhone 16 Pro")
            .previewLayout(.device)
            .preferredColorScheme(.dark)
            .dynamicTypeSize(.xxxLarge)
            .previewDisplayName("Dark + XL Text")
    }
}

previewLayout con .device muestra la pantalla completa del dispositivo, mientras que .sizeThatFits muestra una vista previa compacta ajustada al contenido. Para widgets y componentes pequeños, use .sizeThatFits — ahorra espacio en el editor.

Ejemplos de trabajo con Canvas

Ejemplo 1: prueba de adaptabilidad. Use ForEach con múltiples dispositivos y esquemas de colores para asegurarse de que la interfaz se vea bien en todas las pantallas. Canvas actualiza todas las vistas previas simultáneamente, lo que permite detectar problemas de diseño antes de iniciar el simulador.

Ejemplo 2: vista previa con datos. Para Views que muestran contenido dinámico (listas, perfiles, tarjetas), cree varias instancias con diferentes datos en las vistas previas. Esto es más rápido que cambiar entre pantallas en el simulador e ingresar datos.

Vista previa con diferentes estados

Grupo de vistas previas mediante Group o ForEach permite mostrar todos los estados del componente en un solo panel. Para listas esto es especialmente conveniente: lista vacía, carga, error y lista completa son visibles simultáneamente.

swift
struct LoadingStateView: View {
    let state: LoadingState
    
    var body: some View {
        switch state {
        case .loading:
            ProgressView()
        case .loaded(let items):
            List(items, id: \.self) { Text($0) }
        case .error(let message):
            Text(message).foregroundColor(.red)
        }
    }
}

struct LoadingStateView_Previews: PreviewProvider {
    static var previews: some View {
        Group {
            LoadingStateView(state: .loading)
                .previewDisplayName("Loading")
            LoadingStateView(state: .loaded(["Item 1", "Item 2"]))
                .previewDisplayName("Loaded")
            LoadingStateView(state: .error("Failed to load"))
                .previewDisplayName("Error")
        }
    }
}

Canvas vs Simulador — comparación

Canvas y el Simulador se complementan, no se reemplazan. Canvas es ideal para iteraciones rápidas durante el maquetado: editar código con retroalimentación inmediata. El Simulador es necesario para la verificación final: rendimiento real, gestos personalizados, alertas del sistema e integración con funciones de hardware (cámara, sensores).

Según WWDC 2024, Apple posiciona Canvas como una herramienta para las primeras etapas de desarrollo, y el Simulador para pruebas de integración. Se recomienda dedicar el 60% del tiempo de desarrollo de UI en Canvas y el 40% — en pruebas en el simulador o dispositivo.

CaracterísticaCanvasSimulador
Velocidad de actualización0,5–2 seg (incremental)10–60 seg (compilación completa)
GestosBásicos (toque, desplazamiento)Todos (pellizco, rotación, 3D Touch)
Cámara/giroscopioNo compatibleSimulado
AnimacionesLimitadasCompletas
Notificaciones pushNo compatibleCompatible
RedA través del proceso de XcodePila de red completa

Recomendación: diseñe en Canvas, pruebe en el simulador. Use Live Preview para la lógica de gestos de botones y navegación, pero las pruebas finales de animaciones, solicitudes de red y funciones de hardware deben hacerse en el simulador o en un dispositivo real.

Consejos para trabajar con Canvas

Consejo 1: use el modo seleccionable. En el modo seleccionable (icono de cursor), puede hacer clic en cualquier elemento de la vista previa y ver su jerarquía, modificadores y marco en el inspector. Esto es útil para depurar el diseño: ve instantáneamente el padding, el offset y el tamaño del elemento sin imprimir.

Consejo 2: Embed In Diagram. Canvas puede agrupar elementos: seleccione dos o más Views, haga clic en Embed In Diagram — Canvas creará VStack/HStack/ZStack y reconstruirá el código automáticamente. Esto acelera la creación de jerarquías complejas sin escribir corchetes manualmente.

Consejo 3: limpiar caché de previsualización de Canvas. Si Canvas deja de actualizarse, limpie Product → Preview Cache. Xcode eliminará los binarios cacheados de PreviewProvider y los reconstruirá desde cero. Esto soluciona el 90% de los problemas de congelación de Canvas.

Optimización de la velocidad de Canvas

Canvas lento generalmente es causado por una cantidad excesiva de vistas previas. Para Views complejas, use solo una vista previa en lugar de un grupo de 6 a 8. Desactive Live Preview para Views sin gestos — el modo estático se renderiza más rápido. Asegúrese de que PreviewProvider use simulaciones en lugar de solicitudes de red reales.

swift
// Quick debug: minimal preview
struct ComplexView_Previews: PreviewProvider {
    static var previews: some View {
        ComplexView()
            .previewLayout(.sizeThatFits) // compact mode
    }
}

previewLayout(.sizeThatFits) es el modo más rápido de Canvas porque solo renderiza el contenido de la View sin los bordes del dispositivo. Úselo para el maquetado diario, activando .device solo para las comprobaciones finales.

Preguntas frecuentes

¿Por qué Canvas no muestra la vista previa?

La razón más común es la ausencia de PreviewProvider para la View actual. Canvas requiere implementar el protocolo PreviewProvider devolviendo una View en la propiedad previews. Otras razones: errores de compilación en el código, problemas con DerivedData o que el proceso PreviewProviderExtension no se haya iniciado.

¿Se puede depurar código en Canvas?

Sí, Xcode admite la depuración de vistas previas a través de Product → Preview → Debug Preview. Después de la activación, un breakpoint en el código de la View se activará al renderizar Canvas. Esto permite analizar valores de variables en tiempo de ejecución y verificar la lógica de visualización.

¿Canvas admite componentes UIKit?

Canvas admite componentes UIKit a través de UIViewRepresentable y UIViewControllerRepresentable. Sin embargo, algunos componentes no se renderizan: MapKit, WebView, video a través de AVPlayer, vistas personalizadas Metal/GLKit. Canvas no emula capacidades de hardware, por lo que la cámara y los sensores no están disponibles.

¿Cómo acelerar Canvas cuando va lento?

Reduzca la cantidad de vistas previas en un Group (máximo 3–4), use previewLayout(.sizeThatFits) en lugar de .device, desactive Live Preview para Views sin gestos. Limpie Product → Preview Cache. Asegúrese de que PreviewProvider no realice solicitudes de red — use datos simulados.

¿Canvas afecta el tamaño del proyecto?

Canvas no afecta el tamaño del IPA de lanzamiento — el código de PreviewProvider solo se compila en la configuración Debug. Durante el desarrollo, Canvas agrega hasta 100–200 MB de caché en DerivedData, que Xcode gestiona automáticamente. La limpieza regular de DerivedData libera espacio.

Resumen

  • Canvas — editor interactivo de previsualización de Xcode para SwiftUI con actualizaciones en tiempo real.
  • PreviewProvider — requisito previo para Canvas: define el contenido a mostrar.
  • Live Preview — modo con soporte de gestos para probar botones, navegación y formularios.
  • Configuración — a través de la barra de herramientas de Canvas y modificadores programáticos de PreviewProvider.
  • Canvas vs Simulador — Canvas para maquetado, Simulador para pruebas finales de rendimiento.
  • Optimización — .sizeThatFits, vistas previas mínimas, desactivar Live Preview aceleran Canvas.

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también