27 nov. 2025
🧩 Uno de los aspectos más complejos de la concurrencia en Swift es hacer que tipos aislados a actores conformen protocolos que no fueron diseñados con concurrencia.🎯 El problema es común: tienes un tipo marcado con @MainActor que necesita conformar Equatable, Codable o cualquier otro protocolo estándar.⚠️ Aparece el temido error: Conformance crosses into main actor-isolated code and can cause data races.🔍 La raíz del problema está en que protocolos como Equatable esperan implementaciones nonisolated, es decir, que funcionen desde cualquier contexto.🛠️ Swift 6.2 introduce isolated conformances (SE-0470), que permiten restringir una conformación a un actor global específico.💡 Con esta nueva característica, puedes escribir tipo como extension ImageModel: @MainActor Equatable y el compilador entiende la restricción de contexto.🚀 El ajuste InferIsolatedConformances, que hace esto automáticamente cuando está habilitado, parte del nuevo enfoque Approachable Concurrency en Xcode 26.🔄 Antes de Swift 6.2, la solución era @preconcurrency conformances (SE-0423), que funciona, pero semánticamente sugiere que el protocolo está desactualizado y no es seguro.⚡ Otra alternativa es usar nonisolated + MainActor.assumeIsolated, aunque es verboso y puede introducir verificaciones en tiempo de ejecución peligrosas.🎨 Existe un enfoque alternativo poco conocido: diseñar tipos como no Sendable y nonisolated desde el inicio, dejando que el compilador prevenga su escape.🔒 Los tipos no Sendable quedan automáticamente atrapados en el dominio de aislamiento donde se crean, sin necesidad de marcas explícitas de actor.🧠 Este principio no Sendable por definición puede ser la solución más simple o la más compleja, dependiendo de las necesidades internas del tipo.👨💻 Dominar estos patrones de conformance es esencial para migrar proyectos a Swift 6 sin comprometer la seguridad de datos. Lamentablemente no hay una regla o patrón eficaz y la mejor implementación depende del caso concreto.
Leer articulo26 nov. 2025
🎯 Aunque parecen similares, estos tres componentes nativos de SwiftUI tienen propósitos completamente distintos.
Elegir el correcto marca la diferencia entre una interfaz intuitiva y una confusa.
📊 Gauge es para mostrar valores medidos dentro de un rango. Introducido en iOS 16, es ideal para representar temperatura, nivel de batería o uso de CPU.
A diferencia de los otros, es de solo lectura: el usuario no puede interactuar con él para cambiar el valor.
Leer articulo25 nov. 2025
🧠 El modelo on-device de Apple Intelligence opera con una ventana de contexto fija de 4096 tokens por sesión. Esto incluye todas las instrucciones, prompts y respuestas generadas durante la conversación. Cuando se supera este límite, la app lanza un error exceededContextWindowSize que puede interrumpir completamente la experiencia del usuario.
⚡ Un token no es exactamente una palabra. El modelo divide el texto en pequeñas subcadenas que pueden ser palabras completas, fragmentos o incluso caracteres individuales. Apple no expone públicamente un tokenizador ni metadatos de uso, por lo que calcular cuántos tokens consumes es complicado y la mayoría de desarrolladores nos enfrentamos a esto a ciegas.
Leer articulo24 nov. 2025
📚 A medida que los proyectos crecen, el body de nuestras vistas acumula decenas de VStacks, HStacks y modificadores anidados hasta volverse ilegible.Scrollear por el código se convierte en un martirio. El problema no es la cantidad de líneas, sino la falta de estructura clara.🚫 Muchos desarrolladores intentan “arreglarlo” moviendo código a extensiones y propiedades computadas en el mismo archivo. Esto solo desplaza el problema.La legibilidad no mejora realmente y el archivo sigue siendo igual de largo. Necesitamos una estrategia mejor para construir arquitectura en SwiftUI.🎯 La clave está en extraer vistas dedicadas cuando una porción de UI tiene un propósito claro y potencial de reutilización. Cada vista debe tener una única responsabilidad.Esto permite previsualizar estados individuales y facilita el mantenimiento a largo plazo del código.🎨 Los ViewModifiers personalizados son perfectos para consolidar combinaciones repetitivas de estilos que definen tu lenguaje de diseño.Puedes actualizar la apariencia de toda tu app desde un único punto. Además, funcionan como extensiones de View para mayor conveniencia.🔄 Las extensiones genéricas de View ayudan cuando repites layouts similares constantemente, como encabezados de sección con formato consistente.Reducen la indentación del código y mantienen tu interfaz coherente sin duplicar implementaciones.🧩 SwiftUI está diseñado desde cero para composición y reutilización. Aprovecha esa arquitectura: descompón interfaces complejas en bloques pequeños y combínalos.Vistas más simples significan código más fácil de leer, probar y mantener. La meta no es minimizar líneas, sino maximizar claridad.👨💻 Una buena arquitectura SwiftUI transforma el caos en componentes limpios, componibles y testeables. ¿Ya estructuras tus vistas para reutilización?
Leer articulo