<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Caffè Swift Newsletter]]></title><description><![CDATA[¿Qué hay mejor que tomarse un café cargado con lo último de noticias del sector del desarrollo Apple y el lenguaje Swift. Curado y contado para que estés al día en una lectura rápida y amena.]]></description><link>https://applecoding.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!RsDp!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faced4f6c-ae32-4862-9fda-9946fe4a6346_998x860.jpeg</url><title>Caffè Swift Newsletter</title><link>https://applecoding.substack.com</link></image><generator>Substack</generator><lastBuildDate>Mon, 18 May 2026 04:45:49 GMT</lastBuildDate><atom:link href="https://applecoding.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Apple Coding]]></copyright><language><![CDATA[es]]></language><webMaster><![CDATA[applecoding@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[applecoding@substack.com]]></itunes:email><itunes:name><![CDATA[Apple Coding]]></itunes:name></itunes:owner><itunes:author><![CDATA[Apple Coding]]></itunes:author><googleplay:owner><![CDATA[applecoding@substack.com]]></googleplay:owner><googleplay:email><![CDATA[applecoding@substack.com]]></googleplay:email><googleplay:author><![CDATA[Apple Coding]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Agentes al Mac, Swift fuera de Xcode y un Opus que se lee tu repo entero]]></title><description><![CDATA[Newsletter de Swift, 20 de abril de 2026]]></description><link>https://applecoding.substack.com/p/agentes-al-mac-swift-fuera-de-xcode</link><guid isPermaLink="false">https://applecoding.substack.com/p/agentes-al-mac-swift-fuera-de-xcode</guid><dc:creator><![CDATA[Apple Coding]]></dc:creator><pubDate>Mon, 20 Apr 2026 11:39:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!3pyz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7029cf06-f5c0-4168-8a74-63f8d78effd9_1536x1024.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3pyz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7029cf06-f5c0-4168-8a74-63f8d78effd9_1536x1024.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3pyz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7029cf06-f5c0-4168-8a74-63f8d78effd9_1536x1024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3pyz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7029cf06-f5c0-4168-8a74-63f8d78effd9_1536x1024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3pyz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7029cf06-f5c0-4168-8a74-63f8d78effd9_1536x1024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3pyz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7029cf06-f5c0-4168-8a74-63f8d78effd9_1536x1024.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3pyz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7029cf06-f5c0-4168-8a74-63f8d78effd9_1536x1024.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7029cf06-f5c0-4168-8a74-63f8d78effd9_1536x1024.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:434749,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://applecoding.substack.com/i/194785883?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7029cf06-f5c0-4168-8a74-63f8d78effd9_1536x1024.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3pyz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7029cf06-f5c0-4168-8a74-63f8d78effd9_1536x1024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3pyz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7029cf06-f5c0-4168-8a74-63f8d78effd9_1536x1024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3pyz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7029cf06-f5c0-4168-8a74-63f8d78effd9_1536x1024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3pyz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7029cf06-f5c0-4168-8a74-63f8d78effd9_1536x1024.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Tres semanas en las que la palabra <strong>agente</strong> ha pasado de ser una moda a ser, directamente, la infraestructura sobre la que empieza a construirse el desarrollo moderno. <strong>OpenAI</strong> ha metido su app de <strong>Codex</strong> en el Mac con acceso al sistema entero, <strong>Anthropic</strong> ha soltado <strong>Claude Opus 4.7</strong> con un mill&#243;n de tokens de contexto al mismo precio que antes y, por si fuera poco, <strong>Apple</strong> ha formalizado que Swift ya no vive dentro de Xcode: ahora tambi&#233;n en Cursor, VS Code, Kiro, Antigravity, VSCodium y cualquier editor que se deje. Mientras tanto, Swift Evolution sigue movi&#233;ndose, Point-Free termina su serie sobre concurrencia, <strong>Paul Hudson</strong> publica un AGENTS.md para ense&#241;ar a los LLMs a escribir Swift como Dios manda y <strong>Antoine van der Lee</strong> convierte RocketSim en una navaja suiza para perfilado con agentes.</p><p>Y antes de entrar al detalle, una parada obligatoria. El <strong>1 de abril de 2026</strong> Apple cumpli&#243; <strong>50 a&#241;os</strong>, y en <strong>Apple Coding</strong> le hemos dedicado un v&#237;deo especial: <strong><a href="https://youtu.be/TQjOzs5QxnU">50 a&#241;os de Apple desde el punto de vista del desarrollo</a></strong>. Un repaso de medio siglo contado desde donde nos toca &#8212; las herramientas, los lenguajes, los SDKs, las plataformas y las decisiones t&#233;cnicas que han llevado hasta lo que programamos hoy. Si tienes un rato, ponte c&#243;modo: es de esos contenidos que te dan perspectiva sobre lo que est&#225; pasando ahora mismo. Vamos con todo.</p><h2>Swift se emancipa: extensi&#243;n oficial en Open VSX</h2><p>El <strong>8 de abril</strong>, Apple public&#243; en swift.org un art&#237;culo que pocos esperaban tan pronto: <strong><a href="https://www.swift.org/blog/expanding-swift-ide-support/">Expanding Swift&#8217;s IDE Support</a></strong>. Firmado por <strong>Tracy Miranda</strong> del Build and Packaging Workgroup, el anuncio es sencillo de enunciar y grande de consecuencias: la extensi&#243;n oficial de Swift est&#225; ahora en <strong>Open VSX Registry</strong>, el registro abierto de la Eclipse Foundation que usan Cursor, VSCodium, AWS Kiro, Google Antigravity, Windsurf y compa&#241;&#237;a.</p><p>Dicho de otro modo: Swift deja de ser un ciudadano de segunda en el mundo de los editores <em>AI-first</em>. Autocompletado, refactoring, debugging, test exploration y DocC funcionan de primera clase en cualquiera de estos entornos, y los IDEs agentivos pueden incluso instalar la toolchain de Swift por ti cuando detectan un paquete. La jugada tiene tanto de t&#233;cnica como de pol&#237;tica: Apple reconoce oficialmente que <strong>Xcode ya no es el &#250;nico lugar donde se escribe Swift</strong>, y apuesta por estar donde est&#225; el desarrollo moderno en lugar de pelearse con la corriente.</p><p>Combinado con el <strong>SDK oficial de Swift para Android</strong> que lleg&#243; con Swift 6.3, la imagen que queda es la de un lenguaje que sale de casa con las maletas hechas: Android, WebAssembly, Linux, Windows, embebido, y un tooling que ya no depende de tener un Mac delante. Si llevabas a&#241;os esperando este momento, bienvenido a &#233;l.</p><h2>What&#8217;s new in Swift: marzo 2026</h2><p>Dos d&#237;as antes, el <strong>31 de marzo</strong>, Apple public&#243; su <strong><a href="https://www.swift.org/blog/whats-new-in-swift-march-2026/">newsletter mensual de Swift Evolution</a></strong>, y la cosecha no es peque&#241;a. Cuatro propuestas relevantes:</p><ul><li><p><strong>SE-0522</strong> &#8212; en review activa, introduce el atributo <code>@warn</code> para controlar warnings a nivel de declaraci&#243;n. Poder silenciar o elevar un warning concreto sin tocar flags globales del compilador es una de esas cosas peque&#241;as que, en proyectos grandes, te devuelven horas al mes.</p></li><li><p><strong>SE-0509</strong> &#8212; aceptada, a&#241;ade <strong>generaci&#243;n de SBOM</strong> (Software Bill of Materials) en SwiftPM. El nuevo comando <code>swift package generate-sbom</code> con soporte para los formatos est&#225;ndar <strong>CycloneDX</strong> y <strong>SPDX</strong> convierte a Swift en un ciudadano de primera para procesos de compliance y supply-chain security. Si tu empresa te pide auditar dependencias, ya no necesitas hacerlo a mano.</p></li><li><p><strong>ST-0021</strong> &#8212; aceptada, <strong>interoperabilidad Swift Testing &#8596; XCTest</strong>. La migraci&#243;n gradual a Swift Testing deja de ser un dolor: ahora puedes tener tests en ambos frameworks conviviendo sin fricci&#243;n.</p></li><li><p><strong>SE-0515</strong> &#8212; aceptada, <code>reduce</code> con resultados <strong>noncopyable</strong>. Un gui&#241;o a quienes trabajan con tipos de propiedad &#250;nica y necesitaban que el est&#225;ndar librer&#237;a se pusiera al d&#237;a.</p></li></ul><p>Nada revolucionario a nivel individual, pero en conjunto son el tipo de mejoras que pulen el lenguaje en sus esquinas.</p><h2>Codex llega al Mac de verdad</h2><p>Y ahora, al plato fuerte de la semana. El <strong>16 de abril</strong>, <strong>OpenAI</strong> actualiz&#243; su app de <strong>Codex para macOS</strong> con un combo de funciones que la pone a competir de t&#250; a t&#250; con <strong>Claude Code</strong> y con <strong>Cursor</strong>. Por si alguien llega nuevo: Codex se lanz&#243; como app nativa de Mac el <strong>2 de febrero de 2026</strong>, como hermana de consumo del Codex CLI que lleva desde 2024 entre desarrolladores. El empuje estrat&#233;gico viene de <strong>Greg Brockman</strong>, cofundador y presidente de OpenAI, que ha querido sacar los modelos de c&#243;digo del terminal y llevarlos al escritorio. Pero la parte que m&#225;s nos interesa a los que vivimos en el mundo Swift es qui&#233;n est&#225; detr&#225;s del c&#243;digo: una de las mentes detr&#225;s de la app es <strong>Thomas Ricouard </strong>(<strong><a href="https://github.com/Dimillian">@Dimillian</a></strong>), una cara muy conocida en la divulgaci&#243;n Swift y autor de <strong>Ice Cubes</strong>, el cliente de Mastodon de referencia en iOS. Y aqu&#237; viene el titular que merece negrita: <strong>la app de Codex para Mac es 100% nativa en Swift</strong>. Nada de Electron, nada de WebView envolviendo una web app, nada de Catalyst forzado. SwiftUI y AppKit puro. En un momento en que media industria envuelve Chromium en una ventana y lo llama &#8220;app de escritorio&#8221;, que OpenAI haya apostado por una app realmente nativa &#8212;y haya contratado a perfiles como Ricouard para hacerla&#8212; es una declaraci&#243;n de intenciones. Y una vindicaci&#243;n para quienes llevamos a&#241;os diciendo que Swift y SwiftUI son lo mejor para escribir software en un Mac.</p><p>Lo que ha llegado el 16 de abril &#8212;y <a href="https://9to5mac.com/2026/04/16/openais-codex-app-adds-three-key-features-for-expanding-beyond-agentic-coding/">lo cuentan con detalle en 9to5Mac</a>&#8212; es lo siguiente:</p><ul><li><p><strong>Computer Use</strong> integrado: los agentes pueden controlar apps de tu Mac en background, en paralelo, sin interferir con lo que t&#250; est&#233;s haciendo. Construido sobre la misma tecnolog&#237;a que Atlas, el navegador agentivo de OpenAI.</p></li><li><p><strong>In-App Browser</strong>: puedes comentar directamente sobre un elemento de una p&#225;gina web y pasarle al agente instrucciones precisas sobre <em>ese</em> bot&#243;n, <em>esa</em> tarjeta, <em>ese</em> bug visual. Para frontend es oro.</p></li><li><p><strong>Image Generation</strong> con <strong>gpt-image-1.5</strong> integrado en el flujo.</p></li><li><p><strong>M&#225;s de 90 plugins nuevos</strong> entre skills, integraciones y servidores MCP.</p></li><li><p><strong>Soporte para Macs Intel</strong> por primera vez.</p></li><li><p><strong>Memory</strong> persistente entre sesiones: Codex recuerda tus preferencias y workflows recurrentes.</p></li><li><p><strong>Automation</strong>: programar trabajo futuro, reanudarlo tras pausas y planificar tareas a d&#237;as o semanas vista.</p></li><li><p>Soporte para <strong>GitHub review comments</strong>, m&#250;ltiples pesta&#241;as de terminal y <strong>SSH remoto</strong>.</p></li></ul><p>La cifra que mejor resume el momento: <strong>3 millones de usuarios semanales activos</strong>, multiplicado por cinco en tres meses, con un crecimiento del 70% mes sobre mes. Codex ha dejado de ser un experimento y se ha convertido en una de las herramientas de referencia del desarrollo agentivo.</p><p>&#191;Qu&#233; significa esto para un desarrollador Apple? Significa que quien hasta hace un a&#241;o usaba el Terminal para <em>tail -f</em>, ahora puede tener un agente orquestando un <code>xcodebuild</code>, leyendo el informe de Xcode Cloud, mirando las trazas de Instruments, abriendo un PR en GitHub con el fix y reanudando por la ma&#241;ana donde lo dej&#243;. Si no est&#225;s probando una de estas herramientas en serio &#8212;Codex, Claude Code, Cursor&#8212;, en doce meses vas a estar compitiendo en condiciones de inferioridad con gente que s&#237; lo hace. Es as&#237; de crudo.</p><h2>Claude Opus 4.7: un mill&#243;n de tokens al precio de siempre</h2><p>El mismo <strong>16 de abril</strong> &#8212;esta industria ya no conoce los d&#237;as aburridos&#8212;, <strong>Anthropic</strong> lanz&#243; <strong>Claude Opus 4.7</strong>. El anuncio viene con varios titulares fuertes, pero uno destaca por encima del resto: <strong>ventana de contexto de 1 mill&#243;n de tokens al precio est&#225;ndar de la API</strong>, sin premium por long-context. El pricing no cambia respecto a 4.6: <strong>5 d&#243;lares por mill&#243;n de tokens de entrada y 25 por mill&#243;n de salida</strong>.</p><p>&#191;Qu&#233; significa un mill&#243;n de tokens en la vida real? Significa que puedes meter <strong>un repositorio iOS entero de tama&#241;o medio</strong> en el contexto y pedirle a Claude que razone sobre la arquitectura completa, no sobre un pu&#241;ado de archivos sueltos. Significa que las refactorizaciones transversales &#8212;renombrar un protocolo que toca 400 ficheros, migrar de Combine a async/await en una app grande, auditar toda la superficie de concurrencia de un m&#243;dulo&#8212; dejan de ser un ejercicio de paciencia con chunking y se convierten en una conversaci&#243;n normal.</p><p>Las mejoras de Opus 4.7 sobre 4.6 no son cosm&#233;ticas:</p><ul><li><p><strong>SWE-bench Verified: 87,6%</strong> (desde 80,8%).</p></li><li><p><strong>CursorBench: 70%</strong> (desde 58%).</p></li><li><p><strong>GPQA Diamond: 94,2%</strong> en razonamiento cient&#237;fico.</p></li><li><p><strong>128.000 tokens de salida m&#225;xima</strong> con <em>adaptive thinking</em>.</p></li><li><p><strong>Visi&#243;n de alta resoluci&#243;n</strong> hasta <strong>2.576 px / 3,75 megap&#237;xeles</strong>, m&#225;s del triple que antes, con coordenadas 1:1 respecto a los p&#237;xeles reales. Clave para <em>computer use</em>, workflows de capturas y an&#225;lisis de UI.</p></li><li><p>Nuevo nivel de effort <code>xhigh</code> pensado espec&#237;ficamente para coding agentivo.</p></li><li><p><strong>Task budgets</strong> (beta): el modelo recibe un countdown de tokens del loop agentivo completo y prioriza en consecuencia.</p></li></ul><p>Tambi&#233;n hay cambios de comportamiento que conviene conocer antes de migrar. El modelo es m&#225;s <strong>literal</strong> siguiendo instrucciones, calibra la longitud de la respuesta a la complejidad de la tarea, hace <strong>menos tool calls por defecto</strong> y lanza menos sub-agentes. El tono es m&#225;s directo, menos <em>validation-forward</em> &#8212;l&#233;ase: te dice menos veces &#8220;&#161;qu&#233; gran pregunta!&#8221; y va al grano&#8212; y hay un cambio de tokenizer que supone entre 1x y 1,35x m&#225;s tokens que 4.6, as&#237; que ajusta tus <code>max_tokens</code> si tienes l&#237;mites pegados al hueso.</p><p>Del lado de las roturas: los budgets de <em>extended thinking</em> se eliminan en favor del adaptive thinking, <code>temperature</code>, <code>top_p</code> y <code>top_k</code> ya no son configurables, y el contenido del thinking no aparece por defecto en la respuesta. Los detalles completos, en la <strong><a href="https://platform.claude.com/docs/en/about-claude/models/whats-new-claude-4-7">documentaci&#243;n oficial</a></strong>.</p><p>Anthropic remat&#243; la jugada al d&#237;a siguiente con <strong><a href="https://www.anthropic.com/news/claude-design-anthropic-labs">Claude Design</a></strong>, una research preview para planes Pro, Max, Team y Enterprise que lee tu codebase y tus archivos de dise&#241;o para aplicar el design system de tu equipo, exportar a Canva, PDF, PPTX o HTML, y pasar el bundle directamente a Claude Code. La tendencia es clara: los modelos ya no son solo APIs, son productos con manos y ojos.</p><h2>Ense&#241;ar a los agentes a escribir Swift como t&#250; quieres</h2><p>La explosi&#243;n de Codex, Claude Code y compa&#241;&#237;a tiene un efecto colateral l&#243;gico: <strong>cada equipo quiere que el agente escriba c&#243;digo con </strong><em><strong>su</strong></em><strong> estilo</strong>. Y <strong>Paul Hudson</strong>, fiel a su costumbre, ha sido el primero en publicar una gu&#237;a de referencia. El <strong>1 de abril</strong> sali&#243; <strong><a href="https://www.hackingwithswift.com/articles/284/teach-your-ai-to-write-swift-the-hacking-with-swift-way">Teach your AI to write Swift the Hacking with Swift way</a></strong>: un <strong>AGENTS.md</strong> que encapsula sus convenciones de SwiftUI para que Claude Code, Codex y cualquier agente compatible generen c&#243;digo &#8220;como Paul lo har&#237;a&#8221;.</p><p>El art&#237;culo es corto, pero el fichero en s&#237; es un peque&#241;o tratado de estilo: cu&#225;ndo usar <code>@State</code> y cu&#225;ndo <code>@Observable</code>, c&#243;mo nombrar vistas, qu&#233; patrones evitar, qu&#233; modificadores preferir, c&#243;mo estructurar los previews. Para quien ya ten&#237;a su propio AGENTS.md, es una fuente de comparaci&#243;n excelente. Para quien a&#250;n no lo tiene, es el momento de empezar: sin un documento de este tipo, tu agente te va a dar la media del ecosistema, y la media &#8212;con perd&#243;n&#8212; no es buena.</p><h2>RocketSim 15 y la performance en modo agentivo</h2><p><strong>Antoine van der Lee</strong> ha tenido un mes intenso. Por un lado, lanz&#243; <strong><a href="https://www.avanderlee.com/xcode/rocketsim-15-voiceover-navigator-pro-simulator-recordings/">RocketSim 15</a></strong> el <strong>7 de abril</strong> con dos funciones que destacan: un <strong>Post Editor para capturas</strong> que permite ajustar ratios, a&#241;adir bezels de dispositivo en live preview y probar el efecto <strong>Liquid Glass tinted</strong>, y un <strong>VoiceOver Navigator</strong> que te permite navegar con flechas la jerarqu&#237;a de accesibilidad de tu app sin necesidad de un dispositivo f&#237;sico. Hay adem&#225;s una pesta&#241;a dedicada a Network Monitor, grabaci&#243;n a 120 fps y un programa espec&#237;fico para estudiantes.</p><p>La segunda capa es m&#225;s interesante todav&#237;a. El <strong>14 de abril</strong> public&#243; <strong><a href="https://www.avanderlee.com/ai-development/network-requests-optimization-using-xcodes-simulator-agents/">Network Requests Optimization using Xcode&#8217;s Simulator &amp; Agents</a></strong>, donde explica c&#243;mo combinar el Network Monitor de RocketSim con Cursor o con el propio Codex para que un agente analice las trazas de red, detecte llamadas redundantes, patrones de error y oportunidades de <em>caching</em>. Y el <strong>20 de abril</strong> &#8212;ayer mismo, pr&#225;cticamente&#8212; remat&#243; con <strong><a href="https://www.avanderlee.com/ai-development/xcode-instruments-time-profiler-improve-performance-with-ai/">Xcode Instruments Time Profiler: Improve performance with AI</a></strong>, un caso real donde optimiza el fetcher de elementos de accesibilidad de RocketSim pasando de <strong>12 segundos a 485 milisegundos</strong> &#8212;un speedup de 25x&#8212; compartiendo <em>deep copies</em> de Time Profiler con un agente. El flujo que propone es el del futuro inmediato: t&#250; diriges, el agente itera, t&#250; verificas.</p><p>En <strong>Apple Coding</strong> nos hemos hecho una pregunta inc&#243;moda esta semana junto a <strong>&#211;liver Nabani</strong> en uno de nuestros directos: <strong><a href="https://youtube.com/live/z6RIj_j6knE?feature=share">&#191;Un futuro sin apps?</a></strong>. Un debate largo y en profundidad sobre c&#243;mo la IA est&#225; empezando a empujar hacia un escenario en el que la interfaz gr&#225;fica deja de ser el centro y los usuarios se comunican por voz directamente con agentes que, por debajo, orquestan servicios y datos. Si est&#225;s construyendo una app hoy y no te has planteado qu&#233; significa eso para el producto que est&#225;s haciendo, este directo es una parada obligatoria. Y ya que est&#225;s, otra conversaci&#243;n imprescindible de estas semanas: <strong><a href="https://youtube.com/live/PjWDWTZHY_E?feature=share">la entrevista a Rub&#233;n Gonz&#225;lez</a></strong>, profesional que trabaj&#243; 14 a&#241;os en Apple gestionando equipos y que se ha reinventado como creador y consultor de apps aplicando <strong>Spec Driven Development</strong> con IA en su flujo diario. Siempre con criterio y siendo programador por encima de todo &#8212; exactamente la actitud que hay que tener frente a esta ola.</p><h2>Point-Free cierra la serie sobre isolation</h2><p><strong>Point-Free</strong> ha seguido desgranando su serie sobre <strong>Isolation</strong>, y los dos episodios dentro del rango entran de lleno en la parte m&#225;s pr&#225;ctica. El <strong><a href="https://www.pointfree.co/episodes">Ep 361</a></strong> del <strong>6 de abril</strong> presenta los <strong>actors</strong> como alternativa moderna a locking y mutexes, con un refactor en directo de una clase con data races sensibles a un actor. El <strong><a href="https://www.pointfree.co/episodes">Ep 362</a></strong> del <strong>13 de abril</strong> entra en <strong>serial executors</strong>: c&#243;mo un actor encola el trabajo en orden y c&#243;mo, aprovechando eso, se pueden fusionar m&#250;ltiples awaits en uno solo. Si la serie te hab&#237;a dejado convencido de que la concurrencia de Swift 6 es hilo, estos dos episodios te muestran c&#243;mo tejer el tapiz.</p><p>La reflexi&#243;n que llevamos tiempo repitiendo vuelve a ser v&#225;lida: <strong>los agentes te escriben c&#243;digo, pero no sustituyen entender concurrencia, arquitectura y el porqu&#233; de los patrones</strong>. Si quieres aprovechar los agentes como multiplicador en vez de como muleta, el <strong><a href="https://acoding.academy/agentic">Swift Agentic Engineering Program</a></strong> es literalmente la &#250;nica formaci&#243;n pensada para que domines Codex, Claude Code, MCP y Foundation Models con orden y profundidad. No es marketing: es que lo hemos buscado, y no hay otro programa equivalente.</p><h2>Xcode 26.4.1, iOS 26.4 en la calle y Foundation Models afinando el contexto</h2><p>Apple no solo ha terminado de empujar la familia <strong>26.4 al completo</strong> &#8212;iOS, iPadOS, macOS, watchOS, tvOS y visionOS ya est&#225;n en producci&#243;n&#8212;, sino que adem&#225;s ha soltado <strong>Xcode 26.4.1</strong>, una revisi&#243;n menor que se centra en pulir bugs de la 26.4 inicial en Swift Testing, estabilidad del indexer y varios fallos reportados en el String Catalog editor. Si a&#250;n estabas en 26.3 esperando el momento, este es el empuj&#243;n: entre las novedades de la 26.4 tienes <strong>attachment directo</strong> de <code>CGImage</code>, <code>NSImage</code>, <code>UIImage</code> y <code>CIImage</code> en tus tests, warnings en runtime cuando mezclas aserciones XCTest y Swift Testing, y un editor de String Catalog muy mejorado con pre-fill de traducciones, eliminaci&#243;n de idiomas y operaciones de cut/copy/paste/duplicate sobre strings. Las <a href="https://developer.apple.com/documentation/xcode-release-notes/xcode-26_4-release-notes">release notes</a> tienen el detalle completo.</p><p>En paralelo, Apple sembr&#243; <strong><a href="https://www.macrumors.com/2026/04/13/apple-seeds-ios-26-5-beta-2/">iOS 26.5 Beta 2</a></strong> el <strong>13 de abril</strong>, iniciando el siguiente ciclo. Y en el terreno de <strong>Foundation Models</strong>, la <a href="https://developer.apple.com/documentation/technotes/tn3193-managing-the-on-device-foundation-model-s-context-window">Technical Note TN3193</a> documenta la gesti&#243;n mejorada de la ventana de contexto de <strong>4.096 tokens</strong>, con la nueva propiedad <code>contextSize</code> y el m&#233;todo <code>tokenCount(for:)</code> para medir cu&#225;nto consume cada input antes de enviarlo al modelo on-device.</p><h2>Apple Machine Learning en ICLR 2026 y Ollama sobre MLX</h2><p>El <strong>17 de abril</strong>, Apple public&#243; su <a href="https://machinelearning.apple.com/updates/apple-at-iclr-2026">adelanto de ICLR 2026</a>. La conferencia se celebra en Rio de Janeiro del 23 al 27 de abril, y Apple presenta <strong>47 papers</strong>, dos de ellos en formato oral (<strong>ParaRNN</strong> y <em>&#8220;To Infinity and Beyond&#8221;</em>), con <strong>Carl Vondrick</strong> ejerciendo de General Chair y demos en directo de <strong>MLX</strong> (inferencia de LLMs on-device) y <strong>SHARP</strong> (s&#237;ntesis de vistas 3D).</p><p>Y hablando de MLX: el <strong>31 de marzo</strong>, <strong>Ollama</strong> anunci&#243; que migra su engine a MLX, con mejoras de <strong>1,6x en prompt processing</strong> y <strong>2x en response generation</strong>. En un <strong>M5</strong>, el time-to-first-token llega a ser hasta <strong>4x m&#225;s r&#225;pido</strong> que en un M4 gracias a los <strong>Neural Accelerators</strong>. Apple lo detalla en su paper <strong><a href="https://machinelearning.apple.com/research/exploring-llms-mlx-m5">Exploring LLMs with MLX and M5 Neural Accelerators</a></strong>. Si llevabas tiempo pensando que Apple Silicon y la IA on-device iban por caminos paralelos, los caminos se cruzan aqu&#237;.</p><h2>Be Native estrena b&#250;squeda por IA &#8212; y lo hace 100% on-device</h2><p>Y dentro de casa tambi&#233;n tenemos algo de lo que estamos bastante orgullosos. Esta semana hemos lanzado en <strong>Be Native</strong> una de las funciones m&#225;s ambiciosas que hemos construido: <strong>b&#250;squeda por IA</strong>. Be Native es nuestra app m&#225;s ambiciosa &#8212; un cat&#225;logo biling&#252;e espa&#241;ol/ingl&#233;s con cerca de <strong>500 lecciones, cursos, snippets y art&#237;culos</strong> sobre desarrollo en plataformas Apple, y creciendo. Quer&#237;amos que nuestros usuarios pudieran escribir una pregunta en lenguaje natural como <em>&#8220;&#191;c&#243;mo dibujo una ruta en un mapa?&#8221;</em> y aterrizar en las lecciones correctas aunque ninguna de sus palabras apareciera literalmente en el cat&#225;logo. Y lo quer&#237;amos hacer sin servidores. Cada bit de esa experiencia corre <strong>on-device</strong>. Cero llamadas a un servidor, cero trazas de anal&#237;tica. Tu consulta <strong>nunca sale</strong> de tu iPhone o iPad.</p><p>&#129504; El motor es un <strong>h&#237;brido en dos etapas</strong>. Primero, una capa determinista de retrieval combina dos se&#241;ales sobre nuestro cat&#225;logo indexado: similitud sem&#225;ntica con <strong>NLContextualEmbedding</strong> y un scorer l&#233;xico ligero construido sobre el etiquetado de partes de la oraci&#243;n de <strong>NLTagger</strong>. Y aqu&#237; viene la parte no obvia: los embeddings de prop&#243;sito general son <strong>anisotr&#243;picos</strong> &#8212;todos los vectores se agolpan en un cono estrecho&#8212;, as&#237; que la similitud coseno cruda colapsa en una banda de 0,85&#8211;0,87 donde todo parece igual de relevante. La soluci&#243;n es <strong>mean-centering</strong>: restar la media del corpus &#8212;calculada en un job de indexaci&#243;n de dos pasadas y persistida en disco&#8212; antes de puntuar. As&#237; los scores se abren a un rango &#250;til y recuperas separaci&#243;n real entre lo relevante y lo que no lo es. Despu&#233;s, una combinaci&#243;n <strong>0,5&#183;sem&#225;ntica + 0,5&#183;l&#233;xica</strong> con una penalizaci&#243;n por cero solape l&#233;xico nos da los <strong>top 30 candidatos por consulta</strong>.</p><p>Esos 30 candidatos viajan a un <strong>reranker</strong> alimentado por el framework <strong>Foundation Models on-device</strong> de Apple. Una <code>LanguageModelSession</code> persistente &#8212;prewarm cuando el usuario abre la pantalla de b&#250;squeda y reciclada tras cada respuesta para no salirse de la ventana de 4.096 tokens&#8212; recibe un prompt donde el modelo act&#250;a como <em>senior iOS/Swift developer</em>. Devuelve una respuesta estructurada <code>@Generable</code> con el tema que ha entendido y sus lecciones elegidas. Cada elecci&#243;n lleva un campo <code>why</code> que fuerza cadena de razonamiento y elimina falsos positivos adicionales.</p><p>&#127919; Una &#250;ltima pasada determinista de <strong>recall floor</strong> aumenta las elecciones del modelo con cualquier item del cat&#225;logo cuyo t&#237;tulo encaje con el tema identificado &#8212; para capturar ese pu&#241;ado de lecciones paralelas sobre el mismo asunto (variantes, animaciones, tips, snippets) que el modelo a veces se salta. <strong>Ninguna librer&#237;a de terceros ha tocado esto en ning&#250;n punto</strong>. SDK nativo, de principio a fin.</p><p>El resultado es una b&#250;squeda que, enteramente on-device y en espa&#241;ol o ingl&#233;s indistintamente, mapea correctamente <em>&#8220;c&#243;mo a&#241;ado un campo de contrase&#241;a&#8221;</em> a lecciones sobre <code>SecureField</code>, <em>&#8220;quiero saberlo todo sobre SF Symbols&#8221;</em> a todas las lecciones de SF Symbols del cat&#225;logo, y <em>&#8220;how do I draw a route&#8221;</em> a la lecci&#243;n de direcciones en MapKit &#8212; sin que el usuario escriba nunca los nombres de esas APIs. Funciona como magia.</p><p>Gracias especiales al equipo de Apple Developer que comparti&#243; su experiencia con nosotros en Madrid hace unas semanas, muy en particular a <strong>Alberto Ricci</strong>, que nos dio la idea de usar los embeddings y nos mostr&#243; el potencial real del Foundation Models Framework. La funcionalidad llegar&#225; muy pronto a todos los dispositivos compatibles con <strong>Apple Intelligence</strong>.</p><h2>Swift Agentic Engineering Program: solo quedan dos semanas</h2><p>Y hablando de construir cosas con Foundation Models, MCP, Codex y Claude Code con criterio: el <strong><a href="https://acoding.academy/agentic">Swift Agentic Engineering Program</a></strong> cierra inscripciones en <strong>dos semanas</strong>. Si has le&#237;do la newsletter hasta aqu&#237;, habr&#225;s visto por qu&#233; esto ya no va de <em>&#8220;a ver si pruebo ChatGPT para programar&#8221;</em>: va de estructurar un flujo de trabajo completo con agentes, MCPs, skills, task budgets y herramientas on-device de Apple, y hacerlo con el orden y la profundidad que ning&#250;n tutorial suelto te va a dar.</p><p>Te hemos preparado un <strong><a href="https://youtu.be/LMRAC3xu59w">v&#237;deo de anuncio del programa</a></strong> donde contamos exactamente qu&#233; vas a aprender, qui&#233;n lo imparte, c&#243;mo es el proyecto final y por qu&#233; es la &#250;nica formaci&#243;n de este tipo en el mundo hispanohablante. M&#237;ralo, y si te encaja, p&#225;sate por <strong><a href="https://acoding.academy/agentic">acoding.academy/agentic</a></strong> para informarte y reservar plaza. Si est&#225;s pensando que no tienes tiempo para meterte en esto ahora, pi&#233;nsalo al rev&#233;s: <strong>tal vez el tiempo te pase factura si te quedas fuera de este conocimiento</strong>. Cada mes que pasa, la diferencia entre quien sabe orquestar agentes y quien no se nota m&#225;s en el d&#237;a a d&#237;a, en la productividad y &#8212;seamos honestos&#8212; en el sueldo. Dos semanas. No las dejes pasar.</p><h3>Y poco m&#225;s</h3><p>Tres semanas cortas de calendario y largas de sustancia. El desarrollo agentivo ha entrado en su fase adulta: <strong>Codex con acceso al Mac entero</strong>, <strong>Opus 4.7 ley&#233;ndose repositorios completos</strong>, <strong>Swift viviendo oficialmente fuera de Xcode</strong> y toda la comunidad &#8212;Paul Hudson, Antoine van der Lee, Point-Free, Dave Verwer&#8212; empujando en la misma direcci&#243;n. La WWDC26 asoma por el 8 de junio y todo apunta a que Apple va a subir la apuesta en IA on-device y en tooling agentivo. Si a&#250;n no has decidido ponerte en serio con estas herramientas, este es el momento: el <a href="https://acoding.academy/agentic">SAEP</a> cierra inscripciones en dos semanas. Todo lo dem&#225;s ser&#225; llegar tarde a una fiesta que empez&#243; ayer.</p><p>Si quer&#233;is dejarnos un comentario o contarnos cualquier cosa, estamos en los canales habituales.</p><p><strong>Nos leemos pronto y hasta entonces: un saludo y Good Apple Coding</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://applecoding.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Caff&#232; Swift Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Swift 6.3: Android, agentes y el fin de las malas "vibraciones"]]></title><description><![CDATA[Swift para Android ya es oficial, el App Store se llena de VibeCoding (mal), Apple anuncia la WWDC 2026 y mucho m&#225;s en este repaso.]]></description><link>https://applecoding.substack.com/p/swift-63-android-agentes-y-el-fin</link><guid isPermaLink="false">https://applecoding.substack.com/p/swift-63-android-agentes-y-el-fin</guid><dc:creator><![CDATA[Apple Coding]]></dc:creator><pubDate>Sun, 29 Mar 2026 12:22:41 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!8_Yz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e57ae5-0acf-405f-ad30-cd1d2ea660a6_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8_Yz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e57ae5-0acf-405f-ad30-cd1d2ea660a6_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8_Yz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e57ae5-0acf-405f-ad30-cd1d2ea660a6_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!8_Yz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e57ae5-0acf-405f-ad30-cd1d2ea660a6_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!8_Yz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e57ae5-0acf-405f-ad30-cd1d2ea660a6_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!8_Yz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e57ae5-0acf-405f-ad30-cd1d2ea660a6_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8_Yz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e57ae5-0acf-405f-ad30-cd1d2ea660a6_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e7e57ae5-0acf-405f-ad30-cd1d2ea660a6_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2591633,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://applecoding.substack.com/i/192499641?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e57ae5-0acf-405f-ad30-cd1d2ea660a6_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8_Yz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e57ae5-0acf-405f-ad30-cd1d2ea660a6_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!8_Yz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e57ae5-0acf-405f-ad30-cd1d2ea660a6_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!8_Yz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e57ae5-0acf-405f-ad30-cd1d2ea660a6_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!8_Yz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e57ae5-0acf-405f-ad30-cd1d2ea660a6_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Ha pasado un mes intenso desde nuestra &#250;ltima entrega. Tres semanas en las que Apple ha lanzado <strong>Swift 6.3</strong>, ha anunciado la <strong>WWDC26</strong>, ha puesto freno a las apps de <em>vibe coding</em> en el App Store y ha dado de paso un empuj&#243;n a todo el ecosistema de herramientas agentivas. Y mientras tanto, la comunidad no ha parado: nuevos libros, nuevas series educativas y un debate que no se apaga sobre qu&#233; significa realmente saber usar la inteligencia artificial en desarrollo. Vamos con todo.</p><h2>Swift 6.3: el lenguaje sale del jard&#237;n</h2><p>El <strong>24 de marzo</strong>, Apple public&#243; <strong>Swift 6.3</strong> y con &#233;l lleg&#243; uno de los movimientos m&#225;s significativos de los &#250;ltimos a&#241;os: el <strong>primer SDK oficial de Swift para Android</strong>. No es un port experimental ni un hack de la comunidad. Es Apple proporcionando las herramientas para desarrollar programas nativos Android escritos en Swift e integrarlos en apps Kotlin o Java existentes a trav&#233;s de <strong>Swift Java</strong> y <strong>Swift Java JNI Core</strong>. Swift deja de ser un lenguaje exclusivo del ecosistema Apple para convertirse, oficialmente, en un lenguaje multiplataforma.</p><p>Pero hay m&#225;s, y no poco.</p><h3>El atributo <code>@c</code>: Swift habla C de primera clase</h3><p>La novedad m&#225;s t&#233;cnica de Swift 6.3 es el nuevo <strong>atributo </strong><code>@c</code>, que formaliza el viejo <code>@_cdecl</code> que muchos ya us&#225;bamos con cierto temor. Ahora puedes exponer funciones y enums Swift directamente a c&#243;digo C/C++ de forma limpia:</p><pre><code><code>@c("MyLibrary_processData")
func processData(_ buffer: UnsafePointer&lt;UInt8&gt;, count: Int) -&gt; Int32 {
    // implementaci&#243;n Swift accesible desde C
}</code></code></pre><p>Combinado con <code>@implementation</code>, el compilador valida que la firma Swift coincida con una declaraci&#243;n preexistente en un header C, permitiendo reemplazar implementaciones C con Swift de forma gradual y segura. Para quienes trabajan en proyectos mixtos Swift/C++ o en frameworks multiplataforma, esto cambia las reglas del juego.</p><h3>Module Selectors: el fin de la ambig&#252;edad</h3><p>Si alguna vez has tenido dos m&#243;dulos importados con funciones del mismo nombre y has maldecido en voz baja, Swift 6.3 te trae <strong>module selectors</strong> con la sintaxis <code>::</code>:</p><pre><code><code>ModuleA::getValue()   // llama a getValue de ModuleA
ModuleB::getValue()   // llama a getValue de ModuleB
Swift::Task { ... }   // referencia expl&#237;cita al Task de Swift</code></code></pre><p>Parece menor, pero en proyectos grandes con decenas de dependencias es una mejora de calidad de vida enorme.</p><h3>Control fino del rendimiento para autores de librer&#237;as</h3><p>Tres nuevos atributos para quienes construyen frameworks y paquetes: <code>@specialize</code> (preespecializar gen&#233;ricos para tipos concretos frecuentes), <code>@inline(always)</code> (garantizar inlining en cada call site) y <code>@export(implementation)</code> (exponer el cuerpo de funciones en librer&#237;as ABI-estables para optimizaci&#243;n cross-module). Son herramientas que no vas a usar todos los d&#237;as, pero que hacen que tus dependencias sean m&#225;s r&#225;pidas sin que t&#250; hagas nada.</p><h3>Swift Build, Testing y Embedded</h3><p>Swift 6.3 incluye una <strong>preview de Swift Build</strong> integrada en Swift Package Manager: un motor de compilaci&#243;n unificado para Apple, Linux, Windows y Android. Todav&#237;a es preview, pero la direcci&#243;n es clara.</p><p>En <strong>Swift Testing</strong>, siete propuestas implementadas: <strong>warnings con severidad</strong>, <strong>cancelaci&#243;n de tests</strong> con <code>try Test.cancel()</code> y <strong>attachments de im&#225;genes</strong> en Apple y Windows. Y en <strong>Embedded Swift</strong>, mejoras sustanciales: impresi&#243;n de flotantes sin dependencias externas, los atributos <code>@section</code> y <code>@used</code> para control de layout en memoria, y mejoras de debugging en LLDB que permiten interpretar direcciones de memoria como tipos Swift con nombre.</p><p>Todo esto llega empaquetado con <strong>Xcode 26.4</strong> e <strong>iOS 26.4</strong>, que adem&#225;s traen novedades en el <strong>Foundation Models framework</strong>: una nueva propiedad <code>contextSize</code> y el m&#233;todo <code>tokenCount(for:)</code> para gestionar la ventana de contexto de 4.096 tokens. El changelog completo en <a href="https://www.swift.org/blog/swift-6.3-released/">swift.org/blog/swift-6.3-released</a>.</p><p>Y hablando de concurrencia &#8212;que Swift 6.3 sigue puliendo con <strong>region-based isolation</strong> ya en producci&#243;n&#8212;, los chicos de <strong>Point-Free</strong> han arrancado una nueva serie sobre <strong>Isolation</strong> que merece mucho la pena. Tres episodios en marzo: <a href="https://www.pointfree.co/episodes/ep357-isolation-what-is-it">Ep. 357: What Is It?</a> define el concepto seg&#250;n las propuestas de Swift Evolution, <a href="https://www.pointfree.co/episodes/ep358-isolation-legacy-locking">Ep. 358: Legacy Locking</a> explora data races y locks pre-concurrencia, y el Ep. 359: Modern Locking cierra el ciclo mostrando por qu&#233; NSLock sigue teniendo data races sutiles y cu&#225;l es la alternativa moderna. Si la concurrencia en Swift 6 te parece un laberinto, esta serie es el hilo de Ariadna que necesitas. Les perdonamos que crear&#225;n TCA por esto &#128521;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!d9pB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf7f3294-ff3d-4d65-ad6f-eddab3266ebb_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!d9pB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf7f3294-ff3d-4d65-ad6f-eddab3266ebb_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!d9pB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf7f3294-ff3d-4d65-ad6f-eddab3266ebb_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!d9pB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf7f3294-ff3d-4d65-ad6f-eddab3266ebb_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!d9pB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf7f3294-ff3d-4d65-ad6f-eddab3266ebb_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!d9pB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf7f3294-ff3d-4d65-ad6f-eddab3266ebb_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cf7f3294-ff3d-4d65-ad6f-eddab3266ebb_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1537551,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://applecoding.substack.com/i/192499641?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf7f3294-ff3d-4d65-ad6f-eddab3266ebb_1280x720.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!d9pB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf7f3294-ff3d-4d65-ad6f-eddab3266ebb_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!d9pB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf7f3294-ff3d-4d65-ad6f-eddab3266ebb_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!d9pB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf7f3294-ff3d-4d65-ad6f-eddab3266ebb_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!d9pB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf7f3294-ff3d-4d65-ad6f-eddab3266ebb_1280x720.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Malas vibraciones en el App Store</h2><p>Mientras Swift 6.3 sal&#237;a por la puerta grande, Apple cerraba otra con pestillo. A mediados de marzo se confirm&#243; lo que muchos llevaban semanas sospechando: Apple ha bloqueado actualizaciones de <strong>Replit</strong> y <strong>Vibecode</strong>, las dos apps m&#225;s populares de <em>vibe coding</em> &#8212;el t&#233;rmino de moda para generar apps completas mediante prompts de lenguaje natural sin escribir una l&#237;nea de c&#243;digo&#8212;.</p><p>El motivo oficial es la <strong>directriz 2.5.2 de App Review</strong>: las apps no pueden descargar, instalar ni ejecutar c&#243;digo que altere funcionalidades. Apple objeta que las apps generadas se muestren en web views embebidas dentro de la app. Replit espera aprobaci&#243;n si abre las apps generadas en un navegador externo; a Vibecode le han pedido eliminar directamente la funcionalidad de publicar en el App Store.</p><p>El contexto es revelador: el a&#241;o pasado el App Store recibi&#243; <strong>550.000 apps</strong>, muchas de ellas generadas con herramientas de este tipo. Apple ha decidido que la calidad importa m&#225;s que el volumen, y est&#225; poniendo freno a la avalancha de apps de baja calidad que estaba saturando App Review.</p><p>En Apple Coding le hemos dedicado un <a href="https://cuonda.com/apple-coding-daily/vibe-coding-la-mayor-estafa-del-desarrollo-que-ha-roto-el-app-store">v&#237;deo</a> que no se anda con rodeos: <strong>&#8220;Vibe Coding: la mayor estafa del desarrollo que ha roto el App Store&#8221;</strong>. Un an&#225;lisis sin pelos en la lengua sobre qu&#233; ha provocado esta situaci&#243;n y por qu&#233; Apple ha dicho basta.</p><p>Y la reflexi&#243;n que llevamos tiempo haciendo sigue siendo la misma: <strong>la IA sin criterio ni conocimiento no sirve para desarrollos complejos como una app m&#243;vil</strong>. Puedes generar c&#243;digo con un prompt, s&#237;. Pero sin entender la arquitectura, los patrones de dise&#241;o, el ciclo de vida de una app, las guidelines de Apple, la gesti&#243;n de memoria, la concurrencia... lo que obtienes es un castillo de naipes que se cae en cuanto sopla un poco de viento. Y Apple acaba de confirmarlo oficialmente.</p><p>Si est&#225;s en ese punto &#8212;ya sea porque quieres entrar en el mundo del desarrollo Apple o porque necesitas ponerte al d&#237;a con Swift moderno, SwiftUI y las herramientas actuales&#8212;, el <strong><a href="https://acoding.academy/sdp26">Swift Developer Program 2026</a></strong> empieza el <strong>pr&#243;ximo 7 de abril</strong> y a&#250;n quedan plazas. Dos meses intensivos con Swift 6, SwiftUI con Liquid Glass y Xcode Agentic Coding, m&#225;s 13 semanas de proyecto final guiado. Lo imparte <strong>Marc Hervera</strong>. Solo 40 plazas, financiaci&#243;n disponible. Es la formaci&#243;n m&#225;s completa para convertirse en desarrollador iOS profesional, con los fundamentos que ninguna IA puede darte por s&#237; sola.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-CKo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe052ca1c-461b-4925-879d-17f13c16941e_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-CKo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe052ca1c-461b-4925-879d-17f13c16941e_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!-CKo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe052ca1c-461b-4925-879d-17f13c16941e_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!-CKo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe052ca1c-461b-4925-879d-17f13c16941e_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!-CKo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe052ca1c-461b-4925-879d-17f13c16941e_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-CKo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe052ca1c-461b-4925-879d-17f13c16941e_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e052ca1c-461b-4925-879d-17f13c16941e_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1238392,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://applecoding.substack.com/i/192499641?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe052ca1c-461b-4925-879d-17f13c16941e_1280x720.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-CKo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe052ca1c-461b-4925-879d-17f13c16941e_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!-CKo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe052ca1c-461b-4925-879d-17f13c16941e_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!-CKo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe052ca1c-461b-4925-879d-17f13c16941e_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!-CKo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe052ca1c-461b-4925-879d-17f13c16941e_1280x720.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>El MacBook Neo, tres semanas despu&#233;s: r&#233;cord hist&#243;rico</h2><p>Cuando analizamos el <strong>MacBook Neo</strong> en la newsletter anterior, las preguntas eran las de siempre: &#191;puede un chip de iPhone mover macOS de verdad? &#191;8 GB de RAM son suficientes? &#191;Esto es un Mac o un juguete? Tres semanas despu&#233;s, los n&#250;meros han respondido con contundencia.</p><p><strong>Tim Cook</strong> public&#243; el 20 de marzo que el Mac acababa de registrar su <strong>mejor semana de lanzamiento en nuevos usuarios de la historia de Apple</strong>. Aunque no mencion&#243; el Neo por nombre, nadie tiene dudas de a qu&#233; equipo se refiere: el port&#225;til de 599 d&#243;lares ha provocado lo que TechRadar ha descrito como <strong>&#8220;escasez al estilo iPhone&#8221;</strong>. A d&#237;a de hoy, todas las configuraciones en Estados Unidos est&#225;n agotadas online, con entregas estimadas en abril. TrendForce proyecta entre <strong>4 y 5 millones de unidades</strong> vendidas en 2026, y Ming-Chi Kuo cifra entre 2 y 2,5 millones solo en el primer semestre.</p><p>Las reviews han sido una sucesi&#243;n de sorpresas. Tom&#8217;s Hardware lo llam&#243; <strong>&#8220;un game-changer a precio de ganga&#8221;</strong>, 9to5Mac dijo que es <strong>&#8220;un Mac verdaderamente bueno a un precio incre&#237;ble&#8221;</strong>, y Macworld lo resumi&#243; en un <strong>&#8220;sorprendentemente bueno&#8221;</strong>. Los benchmarks cuentan la misma historia: <strong>3.461 puntos en single-core</strong> &#8212;un 47% m&#225;s r&#225;pido que el M1 y a solo un 6-7% del M4&#8212;, mientras que en multi-core iguala al MacBook Air M1. Macworld lleg&#243; a abrir <strong>60 pesta&#241;as de Chrome</strong> con YouTube, Google Docs, hojas de c&#225;lculo y apps en segundo plano sin un solo <em>beach ball</em>. Los 8 GB, en uso real, est&#225;n aguantando mucho mejor de lo que el papel suger&#237;a.</p><p>&#191;Y las limitaciones? Las que ya dijimos: para compilaci&#243;n sostenida, modelos de IA locales o trabajo multi-core intensivo durante horas no es el equipo adecuado. Pero para todo lo dem&#225;s &#8212;y eso incluye a much&#237;sima gente que nunca hab&#237;a considerado un Mac&#8212;, el Neo ha cambiado la conversaci&#243;n. IDC lo ha definido como <strong>&#8220;uno de los anuncios m&#225;s importantes en la historia del Mac&#8221;</strong>, y los analistas coinciden en que est&#225; atrayendo a usuarios de Windows y Chromebook en n&#250;meros que Apple no hab&#237;a visto antes.</p><p>En Apple Coding le dedicamos un <a href="https://cuonda.com/apple-coding-daily/por-que-el-macbook-neo-funciona-tan-bien-y-por-que-te-han-mentido-sobre-los-8gb">v&#237;deo</a> que se ha convertido en uno de los m&#225;s vistos del canal: <strong>&#8220;Por qu&#233; el MacBook Neo funciona tan bien (y por qu&#233; te han mentido sobre los 8 GB)&#8221;</strong>. Desmontamos tres mitos persistentes &#8212;el chip &#8220;m&#243;vil&#8221;, los 8 GB como sentencia de muerte y la gesti&#243;n de n&#250;cleos&#8212; con datos y sin rodeos. Si a&#250;n no lo has visto, p&#225;sate por <a href="https://youtube.com/@applecoding">YouTube</a> y de paso suscr&#237;bete si no lo est&#225;s: es la mejor forma de no perderte estos an&#225;lisis.</p><h2>La comunidad agentiva explota (y necesita orden)</h2><p>Marzo ha sido el mes en que el ecosistema de <strong>agent skills</strong> para Xcode ha explotado.</p><p><strong>Paul Hudson</strong> public&#243; su <strong><a href="https://www.hackingwithswift.com/articles/282/swiftui-agent-skill-claude-codex-ai">SwiftUI Agent Skill</a></strong>, un skill open-source que identifica y corrige errores comunes que cometen los LLMs al generar c&#243;digo SwiftUI. En menos de una semana se convirti&#243; en el skill m&#225;s protagonizado en GitHub. Adem&#225;s, ha creado el repositorio <strong><a href="https://github.com/twostraws/swift-agent-skills">Swift Agent Skills</a></strong>, un directorio curado de skills para la comunidad, junto con skills espec&#237;ficos para SwiftData y Swift Testing.</p><p><strong>Antoine van der Lee</strong>, por su parte, lleva todo marzo publicando sobre desarrollo agentivo en <a href="https://www.avanderlee.com/">SwiftLee</a>: desde un <a href="https://www.avanderlee.com/ai-development/a-9-step-framework-for-choosing-the-right-agent-skill/">framework de 9 pasos</a> para elegir el skill adecuado, hasta los <a href="https://www.avanderlee.com/ai-development/agentic-development-multi-project-challenges/">retos de trabajar con m&#250;ltiples proyectos</a> en entornos agentivos, pasando por c&#243;mo <a href="https://www.avanderlee.com/ai-development/using-an-mcp-to-perform-product-optimizations/">usar MCPs para optimizar productos</a> con datos reales de Amplitude.</p><p>La tendencia es clara: el desarrollo agentivo ha dejado de ser experimental y se ha convertido en el tema dominante del ecosistema Swift. Pero hay un matiz importante que se pierde en la euforia: <strong>&#8220;usar IA&#8221; no es la habilidad. La habilidad es saber c&#243;mo usarla</strong>. Saber qu&#233; pedirle y qu&#233; no. Saber cu&#225;ndo un agente te est&#225; ahorrando horas y cu&#225;ndo te est&#225; metiendo en un agujero que tardar&#225;s d&#237;as en salir. Saber dise&#241;ar los flujos, el orden, las herramientas.</p><p>Y ah&#237; es donde entra el <strong><a href="https://acoding.academy/agentic">Swift Agentic Engineering Program</a></strong>. No existe ahora mismo ninguna formaci&#243;n que te ense&#241;e esto con la profundidad que necesitas &#8212;y no lo decimos como opini&#243;n, lo decimos porque hemos mirado&#8212;. Este programa no solo te ense&#241;a c&#243;mo funciona la IA aplicada al desarrollo, sino que te da las herramientas, los flujos y el orden necesario para convertirte en la persona m&#225;s productiva de tu equipo. Claude Code, Codex, Model Context Protocol, Foundation Models de Apple, agent skills... todo integrado en un programa de 60 horas en directo, con proyecto real. Es la diferencia entre usar la IA como un juguete y usarla como un profesional. Incluso crear&#225;s una app desde 0, un MCP, que ser&#225; la memoria persistente de tus proyectos y tareas&#8230; nativa en Swift. Algo que nadie m&#225;s tiene.</p><h2>The SwiftUI Way: el libro que estabas esperando</h2><p><strong>Natalia Panferova</strong> &#8212;fundadora de <strong>Nil Coalescing</strong> y antigua miembro del equipo de SwiftUI en Apple&#8212; acaba de publicar <strong><a href="https://books.nilcoalescing.com/the-swiftui-way">The SwiftUI Way</a></strong>, y es un imprescindible.</p><p>El libro es una gu&#237;a de campo para desarrolladores intermedios y avanzados que sienten que est&#225;n &#8220;luchando contra el framework&#8221; en vez de trabajar con &#233;l. Cubre seis &#225;reas clave: mentalidad composicional, modelado de dependencias de datos, optimizaci&#243;n de actualizaciones de vistas, carga eficiente de datos, construcci&#243;n de interfaces estables y performantes, y estilizado con convenciones de plataforma y accesibilidad.</p><p>Lo que lo hace especial no es solo el contenido &#8212;que es excelente&#8212; sino la perspectiva: Natalia trabaj&#243; en el equipo que dise&#241;&#243; las APIs de SwiftUI. Sabe por qu&#233; las cosas funcionan como funcionan, y eso se nota en cada cap&#237;tulo. El precio es de <strong>35 d&#243;lares</strong> con un sample chapter gratuito en la web. iOS Dev Weekly ya lo ha destacado en su Issue 746 como lectura recomendada. Si trabajas con SwiftUI a diario, hazte un favor y l&#233;elo.</p><h2>WWDC26: ya hay fecha</h2><p>Apple confirm&#243; el <strong>23 de marzo</strong> que la <strong>WWDC26 se celebrar&#225; del 8 al 12 de junio</strong>. Formato principalmente online, con evento presencial en Apple Park el d&#237;a 8. Los rumores m&#225;s persistentes apuntan a que Apple presentar&#225; <strong>Core AI</strong>, un framework que reemplazar&#237;a a Core ML con soporte nativo para LLMs y modelos de difusi&#243;n on-device. Si se confirma, ser&#225; el cambio m&#225;s importante en la estrategia de IA de Apple desde la introducci&#243;n de Core ML en 2017.</p><p>Tambi&#233;n se anunciaron los <strong>ganadores del Swift Student Challenge 2026</strong>: 350 estudiantes (50 Distinguished Winners) que recibir&#225;n unos AirPods Max 2 y un a&#241;o de membres&#237;a del Developer Program. Los Distinguished Winners visitar&#225;n Apple Park.</p><h3>Y poco m&#225;s</h3><p>Ha sido un mes de los que marcan l&#237;neas en la arena. Swift 6.3 ha cruzado la frontera de Android y ha formalizado la interoperabilidad con C. Apple ha dicho &#8220;hasta aqu&#237;&#8221; con el vibe coding en el App Store. Y el ecosistema de desarrollo agentivo ha madurado lo suficiente como para que la pregunta ya no sea &#8220;&#191;deber&#237;a usar agentes?&#8221; sino &#8220;&#191;s&#233; usarlos bien?&#8221;. La respuesta honesta para la mayor&#237;a es que no, todav&#237;a no. Y por eso formarse &#8212;ya sea desde cero con el <a href="https://acoding.academy/sdp26">SDP26</a> o en agentivo con el <a href="https://acoding.academy/agentic">SAEP</a>&#8212; es la mejor inversi&#243;n que puedes hacer antes de que llegue la WWDC26 en junio.</p><p>Si quer&#233;is dejarnos un comentario o contarnos cualquier cosa, estamos en los canales habituales.</p><p><strong>Nos leemos pronto y hasta entonces: un saludo y Good Apple Coding.</strong></p><p>&#161;Gracias por leer nuestra Newsletter! Nos vemos en Be Native.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://applecoding.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Caff&#232; Swift Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Del Neo al Max: en tres días, Apple cambió el tablero]]></title><description><![CDATA[Lleg&#243; la primera semana de lanzamientos en Apple en 2026 y repasamos c&#243;mo queda ahora la gama de productos, recomendamos el mejor equipo para desarrollo y hablamos de los nuevos M5 Pro, Max y el Neo.]]></description><link>https://applecoding.substack.com/p/del-neo-al-max-en-tres-dias-apple</link><guid isPermaLink="false">https://applecoding.substack.com/p/del-neo-al-max-en-tres-dias-apple</guid><dc:creator><![CDATA[Apple Coding]]></dc:creator><pubDate>Sun, 08 Mar 2026 19:25:35 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!f-HQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feec7f737-6a4f-4854-9340-af7390f7d7ed_1536x1024.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!f-HQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feec7f737-6a4f-4854-9340-af7390f7d7ed_1536x1024.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!f-HQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feec7f737-6a4f-4854-9340-af7390f7d7ed_1536x1024.heic 424w, https://substackcdn.com/image/fetch/$s_!f-HQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feec7f737-6a4f-4854-9340-af7390f7d7ed_1536x1024.heic 848w, https://substackcdn.com/image/fetch/$s_!f-HQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feec7f737-6a4f-4854-9340-af7390f7d7ed_1536x1024.heic 1272w, https://substackcdn.com/image/fetch/$s_!f-HQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feec7f737-6a4f-4854-9340-af7390f7d7ed_1536x1024.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!f-HQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feec7f737-6a4f-4854-9340-af7390f7d7ed_1536x1024.heic" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eec7f737-6a4f-4854-9340-af7390f7d7ed_1536x1024.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:256684,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://applecoding.substack.com/i/190311851?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feec7f737-6a4f-4854-9340-af7390f7d7ed_1536x1024.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!f-HQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feec7f737-6a4f-4854-9340-af7390f7d7ed_1536x1024.heic 424w, https://substackcdn.com/image/fetch/$s_!f-HQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feec7f737-6a4f-4854-9340-af7390f7d7ed_1536x1024.heic 848w, https://substackcdn.com/image/fetch/$s_!f-HQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feec7f737-6a4f-4854-9340-af7390f7d7ed_1536x1024.heic 1272w, https://substackcdn.com/image/fetch/$s_!f-HQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feec7f737-6a4f-4854-9340-af7390f7d7ed_1536x1024.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Apple cumpli&#243; lo prometido. En tres d&#237;as &#8212;del 2 al 4 de marzo&#8212; llegaron el <strong>MacBook Neo</strong>, el <strong>iPhone 17e</strong>, el <strong>iPad Air con M4</strong>, el <strong>MacBook Air M5</strong> y el <strong>MacBook Pro con M5 Pro y M5 Max</strong>. Sin keynote, sin escenario, pero con un cat&#225;logo renovado de arriba a abajo que hace semanas que no ve&#237;amos. Esta semana toca diseccionarlo todo: specs reales, precios finales en d&#243;lares y en euros, y &#8212;lo que m&#225;s nos interesa&#8212; qu&#233; significa cada uno de estos equipos para los que vivimos de desarrollar en el ecosistema Apple.</p><blockquote><p><strong>Nota sobre precios</strong>: los precios en d&#243;lares son antes de impuestos, que var&#237;an seg&#250;n el estado de USA. Los precios en euros incluyen el IVA europeo (~20-25%).</p></blockquote><h2>La semana de los lanzamientos, producto a producto</h2><p>El <strong>MacBook Neo</strong> (s&#237;, ese nombre) es el protagonista m&#225;s sorprendente. Un port&#225;til con chip <strong>A18 Pro</strong> &#8212;el mismo que monta el iPhone 16 Pro&#8212;, pantalla Liquid Retina de 13 pulgadas, 8 GB de RAM unificada, conectividad Wi-Fi 6E y Bluetooth 6, y un dise&#241;o que recuerda m&#225;s al iPad Air que a cualquier Mac anterior: sin notch, biseles uniformes, en cuatro colores (Silver, Blush, Citrus, Indigo). El precio de salida es <strong>599 d&#243;lares / 699 &#8364;</strong> con 256 GB, o 699 $ / 799 &#8364; con 512 GB. En educaci&#243;n, desde 499 $.</p><p>El <strong>iPhone 17e</strong> lleg&#243; el 2 de marzo con chip <strong>A19</strong>, 8 GB de RAM, <strong>MagSafe</strong> integrado por fin en la gama &#8220;e&#8221;, c&#225;mara trasera de 48 megap&#237;xeles con 2x zoom &#243;ptico, nuevo Ceramic Shield 2 y el modem C1X &#8212;hasta el doble de r&#225;pido que el C1 del 16e. Precio: <strong>599 d&#243;lares / 699 &#8364;</strong> con 256 GB. Compatible con Apple Intelligence completa.</p><p>El <strong>iPad Air con M4</strong> llega con el <strong>chip M4</strong> y <strong>12 GB de RAM</strong> (frente a los 8 GB del M3), chip N1 de conectividad (Wi-Fi 7 y Bluetooth 6) y soporte de modem C1X en los modelos celular. Precios desde <strong>599 d&#243;lares / 649 &#8364;</strong> para el 11&#8221; Wi-Fi. Un 30% m&#225;s r&#225;pido que el M3 en tareas CPU.</p><blockquote><div class="pullquote"><p>  <em>El Swift Developer Program 2026 es la formaci&#243;n m&#225;s completa para convertirse en desarrollador iOS profesional: dos meses intensivos con Swift 6.2, SwiftUI con Liquid Glass y Xcode Agentic Coding, m&#225;s 13 semanas y proyecto final. Lo imparte Marc Hervera, con una trayectoria que habla por s&#237; sola. Solo 40 plazas, con financiaci&#243;n disponible. Comenzamos el 4 de abril. Inf&#243;rmate en <a href="http://acoding.academy/sdp26">https://acoding.academy/sdp26</a>.</em></p></div></blockquote><p>El <strong>iPad est&#225;ndar con A18</strong> <strong>no apareci&#243; esta semana</strong>. Apple opt&#243; por no lanzarlo junto al resto de la gama. Los rumores apuntan a que llegar&#225; en los pr&#243;ximos meses.</p><h2>Del Neo al Max: qu&#233; m&#225;quina necesita un desarrollador</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bORq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8590fa65-3936-45b6-a1a7-63717873b1e9_1280x720.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bORq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8590fa65-3936-45b6-a1a7-63717873b1e9_1280x720.heic 424w, https://substackcdn.com/image/fetch/$s_!bORq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8590fa65-3936-45b6-a1a7-63717873b1e9_1280x720.heic 848w, https://substackcdn.com/image/fetch/$s_!bORq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8590fa65-3936-45b6-a1a7-63717873b1e9_1280x720.heic 1272w, https://substackcdn.com/image/fetch/$s_!bORq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8590fa65-3936-45b6-a1a7-63717873b1e9_1280x720.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bORq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8590fa65-3936-45b6-a1a7-63717873b1e9_1280x720.heic" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8590fa65-3936-45b6-a1a7-63717873b1e9_1280x720.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:88727,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://applecoding.substack.com/i/190311851?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8590fa65-3936-45b6-a1a7-63717873b1e9_1280x720.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!bORq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8590fa65-3936-45b6-a1a7-63717873b1e9_1280x720.heic 424w, https://substackcdn.com/image/fetch/$s_!bORq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8590fa65-3936-45b6-a1a7-63717873b1e9_1280x720.heic 848w, https://substackcdn.com/image/fetch/$s_!bORq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8590fa65-3936-45b6-a1a7-63717873b1e9_1280x720.heic 1272w, https://substackcdn.com/image/fetch/$s_!bORq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8590fa65-3936-45b6-a1a7-63717873b1e9_1280x720.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>MacBook Neo &#8212; El que abre la puerta ($599 / 699 &#8364;)</h3><p>El MacBook Neo es perfecto para un perfil concreto: <strong>el que todav&#237;a no da el salto</strong>. Estudiantes, personas que quieren explorar el desarrollo Apple sin comprometer mil euros o m&#225;s, profesionales de otros stacks que necesitan compilar una app de vez en cuando.</p><p>El chip <strong>A18 Pro</strong> tiene 6 n&#250;cleos CPU y 5 de GPU, con un ancho de banda de memoria de <strong>60 GB/s</strong>. En Geekbench: 3.461 puntos en single-core y 8.668 en multi-core &#8212;superando al M1&#8212; en un port&#225;til de 599 d&#243;lares.</p><p>&#191;Es suficiente para Xcode? <strong>S&#237;, con matices</strong>. Xcode arranca, las Previews de SwiftUI funcionan, los simuladores corren y puedes publicar en el App Store. Apple Intelligence est&#225; operativa. Los l&#237;mites aparecen en proyectos grandes con muchos m&#243;dulos, compilaciones limpias complejas o varios simuladores en paralelo.</p><p>Las limitaciones son claras: <strong>8 GB de RAM no ampliables</strong>, un solo puerto USB 3 con DisplayPort, sin Thunderbolt, sin ProMotion, sin pantalla XDR. Sin SD, sin HDMI.</p><p><strong>Para qu&#233; tipo de desarrollo es ideal:</strong> proyectos iOS/macOS de tama&#241;o peque&#241;o o medio, aprendizaje, apps sencillas, freelance a tiempo parcial, desarrollo web frontend.</p><h3>MacBook Air M5 &#8212; El compa&#241;ero de viaje ($1.099 / 1.199 &#8364;)</h3><p>Aqu&#237; hay que ser honesto y decir algo que muchos an&#225;lisis omiten: el <strong>MacBook Air M5 no tiene ventilador</strong>. Es completamente fanless. Y eso tiene implicaciones directas en el uso diario de un desarrollador.</p><p>En t&#233;rminos de chip, el M5 trae <strong>10 n&#250;cleos CPU</strong>, <strong>8 n&#250;cleos GPU</strong> (en el 13&#8221;), <strong>153 GB/s de ancho de banda de memoria</strong> y <strong>16 GB de RAM de base</strong>, configurable hasta 32 GB. Dos puertos Thunderbolt 4, MagSafe 3, Wi-Fi 7, bater&#237;a de hasta 18 horas. El multi-core supera en un <strong>80% al MacBook Neo</strong> en compilaci&#243;n paralela. Son n&#250;meros excelentes.</p><p>Pero sin ventilador, cuando el procesador se calienta bajo carga sostenida, el sistema empieza a limitar la velocidad de proceso &#8212;el conocido <strong>thermal throttling</strong>&#8212;. El Air es perfecto para una o dos horas de trabajo intensivo: una sesi&#243;n de Xcode, una build limpia, unos simuladores abiertos. Lo maneja con soltura. Pero para un flujo de trabajo profesional de ocho o diez horas de compilaciones continuas y simuladores corriendo en paralelo todo el d&#237;a, el Air M5 no es el equipo adecuado.</p><p><strong>&#191;Para qui&#233;n es ideal?</strong> Para el desarrollador profesional que trabaja principalmente en la oficina o en casa con un ordenador de sobremesa y lleva el Air como <strong>m&#225;quina itinerante</strong>. Para estar en una cafeter&#237;a, en un tren, en una reuni&#243;n. Para el freelance que trabaja en sesiones de una o dos horas. En esas condiciones, el Air M5 con 24 GB de RAM es probablemente el mejor port&#225;til que puedes comprar por el precio. Pero si el Air va a ser tu &#250;nico equipo y tu trabajo requiere sesiones largas de compilaci&#243;n diaria, necesitas el escal&#243;n siguiente.</p><h3>MacBook Pro M5 &#8212; El equipo profesional de referencia ($1.699 / 1.899 &#8364;)</h3><p>El <strong>MacBook Pro 14&#8221; con M5</strong> es el equipo que m&#225;s se vende en los departamentos de desarrollo de empresas en Estados Unidos y el que copa los servicios de renting tecnol&#243;gico. Y hay razones concretas.</p><p>Para empezar, tiene <strong>ventilador</strong>. Un solo ventilador, pero activo. Eso significa que puede mantener el rendimiento durante horas sin throttling. El mismo chip M5 &#8212;10 n&#250;cleos CPU, 10 n&#250;cleos GPU, 153 GB/s de ancho de banda&#8212; que en el Air empieza a ceder bajo carga sostenida, en el Pro mantiene el rendimiento estable durante jornadas completas de trabajo.</p><p>Adem&#225;s, usa el <strong>mismo cuerpo y la misma pantalla Liquid Retina XDR con ProMotion a 120 Hz</strong> que los modelos M5 Pro y M5 Max. Y los puertos: MagSafe 3, tres Thunderbolt 4, HDMI, lector de tarjetas SD y jack de audio.</p><p>A partir de <strong>1.699 d&#243;lares / 1.899 &#8364;</strong> (16 GB RAM / 1 TB), el MacBook Pro M5 ofrece capacidades de pantalla y rendimiento sostenido propios de las gamas Pro y Max, a un precio que, si lo comparas con el MacBook Air M5 configurado con 24 GB de RAM (ya en torno a los 1.300 $), el salto no es tan grande como parece.</p><p><strong>Para qu&#233; tipo de desarrollo es ideal:</strong> desarrollo iOS/macOS profesional a tiempo completo en sesiones largas, proyectos de tama&#241;o mediano o grande, trabajo con m&#250;ltiples simuladores de forma continua, desarrollo server-side Swift y cualquier stack donde el port&#225;til sea la herramienta principal del d&#237;a.</p><h3>MacBook Pro 14&#8221; M5 Pro &#8212; El salto a 128 GB ($2.199 / ~2.399 &#8364;)</h3><p>Aqu&#237; cambia la arquitectura. El <strong>M5 Pro</strong> trae hasta <strong>18 n&#250;cleos CPU</strong> y hasta <strong>20 n&#250;cleos GPU</strong>, con hasta <strong>128 GB de RAM unificada</strong> y <strong>307 GB/s de ancho de banda</strong> &#8212;el doble que el M5 base&#8212;. Y tres puertos <strong>Thunderbolt 5</strong>.</p><p>Las compilaciones limpias de proyectos grandes &#8212;30, 40, 50 m&#243;dulos SPM&#8212; se completan en menos de la mitad del tiempo que en un MacBook Pro M5 base. Para quienes trabajan en proyectos monorepo o equipos donde el tiempo de build impacta en la productividad, la diferencia se convierte en euros reales.</p><p><strong>Para qu&#233; tipo de desarrollo es ideal:</strong> equipos de desarrollo iOS/macOS de tama&#241;o medio o grande, proyectos con muchos m&#243;dulos, desarrollo de SDKs y frameworks, Swift en servidor con carga real, proyectos multilenguaje, Python y data science de tama&#241;o mediano, Docker con varios contenedores activos.</p><h3>MacBook Pro 14&#8221;/16&#8221; M5 Max &#8212; El que no tiene techo ($3.599 / ~3.999 &#8364;)</h3><p>El <strong>M5 Max</strong> con <strong>40 n&#250;cleos GPU</strong> y hasta <strong>128 GB de RAM</strong> a <strong>614 GB/s</strong> introduce una <strong>arquitectura de dos chiplets</strong> (Fusion Architecture), primera vez en un port&#225;til Apple, con <strong>Neural Accelerators</strong> en cada n&#250;cleo GPU.</p><p>Para ML y Core ML: entrenar modelos con MLX en el M5 Max es incomparablemente m&#225;s r&#225;pido que en cualquier otro port&#225;til. Para compilaci&#243;n pesada: proyectos con 100+ m&#243;dulos Swift corren en local con tiempos de CI. Y, como veremos a continuaci&#243;n, antes de llegar aqu&#237; vale la pena hacerse una pregunta.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WMOX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda56ae6a-5f97-452f-b062-fb639e7e34db_1280x720.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WMOX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda56ae6a-5f97-452f-b062-fb639e7e34db_1280x720.heic 424w, https://substackcdn.com/image/fetch/$s_!WMOX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda56ae6a-5f97-452f-b062-fb639e7e34db_1280x720.heic 848w, https://substackcdn.com/image/fetch/$s_!WMOX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda56ae6a-5f97-452f-b062-fb639e7e34db_1280x720.heic 1272w, https://substackcdn.com/image/fetch/$s_!WMOX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda56ae6a-5f97-452f-b062-fb639e7e34db_1280x720.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WMOX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda56ae6a-5f97-452f-b062-fb639e7e34db_1280x720.heic" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/da56ae6a-5f97-452f-b062-fb639e7e34db_1280x720.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:94072,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://applecoding.substack.com/i/190311851?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda56ae6a-5f97-452f-b062-fb639e7e34db_1280x720.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WMOX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda56ae6a-5f97-452f-b062-fb639e7e34db_1280x720.heic 424w, https://substackcdn.com/image/fetch/$s_!WMOX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda56ae6a-5f97-452f-b062-fb639e7e34db_1280x720.heic 848w, https://substackcdn.com/image/fetch/$s_!WMOX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda56ae6a-5f97-452f-b062-fb639e7e34db_1280x720.heic 1272w, https://substackcdn.com/image/fetch/$s_!WMOX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda56ae6a-5f97-452f-b062-fb639e7e34db_1280x720.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Un momento: &#191;cu&#225;ntas veces sales de casa?</h2><p>Antes de hablar de Xcode y Swift, hay una conversaci&#243;n que vale la pena tener. Nadie la suele levantar &#8212;ni las marcas, ni la mayor parte de medios especializados&#8212; porque nadie tiene incentivo en record&#225;rtela. Es esta: <strong>los ordenadores de sobremesa siempre rinden m&#225;s, cuestan mucho menos y casi nadie se para a pensar si realmente necesita un port&#225;til</strong>.</p><p>El <strong>Mac mini M4 Pro</strong> &#8212;disponible hoy&#8212; tiene <strong>24 n&#250;cleos CPU y hasta 64 GB de RAM</strong> por <strong>1.399 d&#243;lares / 1.649 &#8364;</strong>. El <strong>Mac Studio M4 Max</strong> &#8212;tambi&#233;n disponible hoy&#8212; tiene hasta <strong>40 n&#250;cleos GPU y hasta 128 GB de RAM</strong> por <strong>1.999 d&#243;lares</strong>. Y ambos pueden conectarse a la pantalla que ya tienes, trabajar durante a&#241;os y nunca hacer throttling.</p><p>&#191;Por qu&#233; rinden mejor que un port&#225;til del mismo chip? La respuesta es f&#237;sica: <strong>dise&#241;o t&#233;rmico</strong>. Los sobremesa tienen ventiladores m&#225;s grandes, m&#225;s espacio para disipar el calor y no necesitan comprometer rendimiento por el peso o el grosor del chasis. El concepto se llama <strong>thermal headroom</strong>: cu&#225;nto margen tiene el sistema antes de empezar a reducir la frecuencia de los n&#250;cleos para no quemarse. En los sobremesa, ese margen es siempre mayor.</p><p>El Mac mini M5 Pro y el Mac Studio con M5 a&#250;n no han llegado &#8212;se esperan en los pr&#243;ximos meses&#8212;, pero cuando lleguen seguir&#225;n esta l&#243;gica: a igualdad de chip, el sobremesa siempre ganar&#225; en rendimiento sostenido y siempre costar&#225; bastante menos que el port&#225;til equivalente.</p><p>Y el <strong>Mac Studio M3 Ultra</strong> actual &#8212;s&#237;, Apple vende hoy un Mac Studio con M4 Max junto a otro con M3 Ultra, en un movimiento bastante inusual&#8212; tiene <strong>28 n&#250;cleos CPU y hasta 192 GB de RAM</strong> por <strong>3.999 d&#243;lares</strong>. Para ponerlo en perspectiva: eso es el precio de un MacBook Pro M5 Max de 14&#8221; con 36 GB de RAM. Con el Mac Studio M3 Ultra tienes m&#225;s de cinco veces m&#225;s RAM y un rendimiento bruto que ning&#250;n port&#225;til puede igualar.</p><p>Por eso la pregunta que vale la pena hacerse, antes de gastarte 3.000 o 4.000 euros en un MacBook Pro Max, es: <strong>&#191;cu&#225;ntos d&#237;as al mes trabajo fuera de casa?</strong> Si la respuesta honesta es &#8220;casi ninguno&#8221;, un Mac mini o un Mac Studio &#8212;combinado con un MacBook Neo o un MacBook Air para los desplazamientos&#8212; puede ser la soluci&#243;n m&#225;s inteligente, m&#225;s potente y m&#225;s barata. Respetamos la decisi&#243;n de quien prefiere el port&#225;til, claro que s&#237;. Pero conviene tenerlo sobre la mesa.</p><blockquote><p><em>Si ya eres desarrollador con experiencia y quieres dar el salto a la codificaci&#243;n ag&#233;ntica, el <strong>Swift Agentic Engineering Program</strong> arranca el 4 de mayo: 60 horas en directo con Claude Code, Codex, Model Context Protocol y Foundation Models de Apple, para multiplicar tu productividad como desarrollador nativo. Aprende a usar la IA tanto en la nube como 100% privada para proteger tu contenido en tu empresa. <strong>Bonificable por FUNDAE</strong>. Inf&#243;rmate en: <a href="http://acoding.academy/agentic">https://acoding.academy/agentic</a>.</em></p></blockquote><h2>Xcode 26.3 y los agentes que ya viven dentro del IDE</h2><p>El <strong>26 de febrero</strong>, justo antes de la semana de lanzamientos, Apple public&#243; <strong>Xcode 26.3</strong> con soporte para <strong>codificaci&#243;n agentiva</strong>.</p><p>Modelos de IA &#8212;con soporte inicial para <strong>Claude de Anthropic</strong> y <strong>Codex de OpenAI</strong>&#8212; pueden operar con autonom&#237;a dentro de Xcode: explorar la estructura del proyecto, leer documentaci&#243;n oficial actualizada, crear archivos, compilar, ejecutar tests, hacer snapshots de Previews y detectar errores, todo de forma aut&#243;noma. El protocolo es <strong>Model Context Protocol (MCP)</strong>. Disponible para miembros del Apple Developer Program.</p><h2>Swift en la semana de los lanzamientos</h2><p>Aunque la semana ha estado dominada por el hardware, el ecosistema Swift no se ha parado. Dos publicaciones recientes que merecen la pena revisar:</p><p>El <strong>2 de marzo</strong>, Swift.org public&#243; el resumen mensual: <strong>&#8220;What&#8217;s New in Swift: February 2026 Edition&#8221;</strong>. Recoge: el lanzamiento de <strong>Swift System Metrics 1.0</strong>, los nuevos paquetes GraphQL para Vapor y Hummingbird, <strong>SQLClient-Swift</strong> &#8212;acceso nativo a SQL Server desde plataformas Apple&#8212;, <strong>TuiKit</strong> para interfaces de terminal, el paquete <strong>FuzzyMatch</strong> para b&#250;squeda difusa de alto rendimiento, la participaci&#243;n de Swift en el <strong>Google Summer of Code 2026</strong> y las &#250;ltimas propuestas de Swift Evolution aceptadas. Todo en <a href="https://www.swift.org/blog/whats-new-in-swift-february-2026/">swift.org</a>.</p><p>Y el <strong>6 de marzo</strong>, tambi&#233;n en Swift.org, un caso de uso real: c&#243;mo el equipo de <strong>TelemetryDeck</strong> construy&#243; su servicio de anal&#237;tica respetuosa con la privacidad sobre Swift, Vapor y Kubernetes, procesando millones de eventos al d&#237;a. Una de las mejores demostraciones p&#250;blicas de Swift en producci&#243;n a escala. Disponible en <a href="https://www.swift.org/blog/building-privacy-first-analytics-with-swift/">swift.org</a>.</p><h2>Apple Coding en YouTube y en Cuonda</h2><p>Esta semana el equipo de Apple Coding ha estado muy activo cubriendo los lanzamientos desde primera hora. En <strong>YouTube</strong> (<a href="https://youtube.com/@applecoding">youtube.com/@applecoding</a>) puedes encontrar los dos &#250;ltimos v&#237;deos publicados. Visita el canal directamente en <a href="https://youtube.com/@applecoding/videos">youtube.com/@applecoding/videos</a> para los t&#237;tulos y URLs exactas.</p><p>En <strong>Cuonda</strong>, los dos episodios m&#225;s recientes de Apple Coding Daily:</p><ul><li><p>El episodio del <strong>4 de marzo</strong> analiza la revoluci&#243;n de arquitectura de los M5 Pro y M5 Max: chiplets, Neural Accelerators en GPU y por qu&#233; esto no es una actualizaci&#243;n incremental. Lo tienes en <a href="https://cuonda.com/apple-coding-daily/revolucion-con-los-m5-pro-y-m5-max-apple-reinventa-su-arquitectura-de-chips">Cuonda</a>.</p></li><li><p>El episodio del <strong>6 de marzo</strong> se centra en el MacBook Neo: si es o no tu pr&#243;ximo port&#225;til, a qui&#233;n le sirve de verdad y qu&#233; compromiso implica frente al MacBook Air M5. Disponible en <a href="https://cuonda.com/apple-coding-daily/macbook-neo-tu-nuevo-portatil-o-no">Cuonda</a>.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kFcD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f208445-5b6a-4e25-93dd-e5bae4b1bc14_1280x720.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kFcD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f208445-5b6a-4e25-93dd-e5bae4b1bc14_1280x720.heic 424w, https://substackcdn.com/image/fetch/$s_!kFcD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f208445-5b6a-4e25-93dd-e5bae4b1bc14_1280x720.heic 848w, https://substackcdn.com/image/fetch/$s_!kFcD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f208445-5b6a-4e25-93dd-e5bae4b1bc14_1280x720.heic 1272w, https://substackcdn.com/image/fetch/$s_!kFcD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f208445-5b6a-4e25-93dd-e5bae4b1bc14_1280x720.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kFcD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f208445-5b6a-4e25-93dd-e5bae4b1bc14_1280x720.heic" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6f208445-5b6a-4e25-93dd-e5bae4b1bc14_1280x720.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:109035,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://applecoding.substack.com/i/190311851?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f208445-5b6a-4e25-93dd-e5bae4b1bc14_1280x720.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kFcD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f208445-5b6a-4e25-93dd-e5bae4b1bc14_1280x720.heic 424w, https://substackcdn.com/image/fetch/$s_!kFcD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f208445-5b6a-4e25-93dd-e5bae4b1bc14_1280x720.heic 848w, https://substackcdn.com/image/fetch/$s_!kFcD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f208445-5b6a-4e25-93dd-e5bae4b1bc14_1280x720.heic 1272w, https://substackcdn.com/image/fetch/$s_!kFcD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f208445-5b6a-4e25-93dd-e5bae4b1bc14_1280x720.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>El episodio que tienes que escuchar </h2><p>El <strong>8 de marzo</strong>, <strong>Mar&#237;a Soriano</strong> y <strong>Julio C&#233;sar Fern&#225;ndez</strong> han publicado en el podcast de <strong>Apple Coding</strong> un episodio especial dedicado &#237;ntegramente a los productos que Apple acaba de lanzar. Una conversaci&#243;n honesta sobre c&#243;mo usan cada uno de ellos estos dispositivos en su d&#237;a a d&#237;a, qu&#233; recomiendan para cada perfil de usuario y su lectura sobre la situaci&#243;n actual del ecosistema Apple.</p><p>Un episodio de esos que escuchas caminando y llegas a casa sin darte cuenta. Lo tienes en <a href="https://youtu.be/tG0mYCFiD_o">YouTube</a>.</p><h3>Y poco m&#225;s</h3><p>La semana que acaba de pasar ha sido de las que quedan en la memoria del ecosistema. Desde los 599 d&#243;lares del MacBook Neo hasta los m&#225;s de 3.900 del MacBook Pro M5 Max, Apple ha redibujado el cat&#225;logo completo en 72 horas &#8212;sin bajar el list&#243;n de calidad en ning&#250;n extremo&#8212;. El Neo es un Mac real, no un experimento. El Max es un monstruo real, no marketing.</p><p>Para los desarrolladores, la conversaci&#243;n m&#225;s interesante no es &#8220;&#191;cu&#225;l es mejor?&#8221; sino &#8220;&#191;cu&#225;l necesito yo?&#8221;. Define tu flujo de trabajo antes de definir el presupuesto. La diferencia entre el Air M5 y el MacBook Pro M5 no es solo de precio: es de ventilador, de pantalla, de sostenibilidad de la carga de trabajo. Y si trabajas en casa la mayor parte del tiempo, quiz&#225;s la pregunta real es si necesitas un port&#225;til o un sobremesa. Esos detalles importan.</p><p>Si quer&#233;is dejarnos un comentario o contarnos cualquier cosa, estamos en los canales habituales.</p><p><strong>Nos leemos pronto y hasta entonces: un saludo y buen c&#243;digo nativo.</strong></p><p>&#161;Gracias por leer nuestra Newsletter! Nos vemos en Be Native.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://applecoding.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Caff&#232; Swift Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Vida en colores: el MacBook que abre puertas (y la Siri que aún no aparece)]]></title><description><![CDATA[Llega la semana fant&#225;stica de Apple, primera de 2026, y muchos cambios en Swift, IA, la futura Siri que no termina de llegar... os lo contamos todo.]]></description><link>https://applecoding.substack.com/p/vida-en-colores-el-macbook-que-abre</link><guid isPermaLink="false">https://applecoding.substack.com/p/vida-en-colores-el-macbook-que-abre</guid><dc:creator><![CDATA[Apple Coding]]></dc:creator><pubDate>Sun, 01 Mar 2026 12:05:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!0XIK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F058228e5-30ea-4cdf-a5ed-7d58774ad651_1536x1024.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0XIK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F058228e5-30ea-4cdf-a5ed-7d58774ad651_1536x1024.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0XIK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F058228e5-30ea-4cdf-a5ed-7d58774ad651_1536x1024.heic 424w, https://substackcdn.com/image/fetch/$s_!0XIK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F058228e5-30ea-4cdf-a5ed-7d58774ad651_1536x1024.heic 848w, https://substackcdn.com/image/fetch/$s_!0XIK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F058228e5-30ea-4cdf-a5ed-7d58774ad651_1536x1024.heic 1272w, https://substackcdn.com/image/fetch/$s_!0XIK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F058228e5-30ea-4cdf-a5ed-7d58774ad651_1536x1024.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0XIK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F058228e5-30ea-4cdf-a5ed-7d58774ad651_1536x1024.heic" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/058228e5-30ea-4cdf-a5ed-7d58774ad651_1536x1024.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:207537,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://applecoding.substack.com/i/189541470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F058228e5-30ea-4cdf-a5ed-7d58774ad651_1536x1024.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0XIK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F058228e5-30ea-4cdf-a5ed-7d58774ad651_1536x1024.heic 424w, https://substackcdn.com/image/fetch/$s_!0XIK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F058228e5-30ea-4cdf-a5ed-7d58774ad651_1536x1024.heic 848w, https://substackcdn.com/image/fetch/$s_!0XIK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F058228e5-30ea-4cdf-a5ed-7d58774ad651_1536x1024.heic 1272w, https://substackcdn.com/image/fetch/$s_!0XIK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F058228e5-30ea-4cdf-a5ed-7d58774ad651_1536x1024.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Cuando escribimos esto, quedan horas para que Apple empiece su &#8220;semana grande&#8221;. Sin keynote, sin escenario, pero con un cat&#225;logo de lanzamientos que promete sacudir el mercado: un MacBook de entrada con chip de iPhone, el esperado iPhone 17e, nuevos iPad y un MacBook Air renovado. Y mientras el mundo mira hacia Cupertino, Siri sigue escondi&#233;ndose entre bambalinas. Hay mucho que contar, as&#237; que arrancamos.</p><h2>La semana que Apple se viste de colores</h2><p>El <strong>2 de marzo</strong> arranca lo que Apple tiene preparado como su gran semana de anuncios. Los comunicados llegar&#225;n de forma escalonada hasta el <strong>4 de marzo</strong>, cuando eventos presenciales en Nueva York, Shangh&#225;i y Londres pongan la guinda. El men&#250; es extenso:</p><ul><li><p><strong>MacBook de entrada con chip A18 Pro</strong>: el protagonista indiscutible. En colores &#8212;amarillo, azul, rosa, plata&#8212;, con pantalla de 12,9-13 pulgadas y a un precio estimado entre los <strong>599 y los 799 d&#243;lares</strong>.</p></li><li><p><strong>iPhone 17e</strong>: chip A19, <strong>MagSafe por fin integrado</strong>, c&#225;mara trasera de 48 megap&#237;xeles y precio sin cambios en los <strong>599 d&#243;lares</strong>.</p></li><li><p><strong>iPad Air con M4</strong> y <strong>iPad est&#225;ndar con A18</strong> &#8212;este &#250;ltimo con soporte para Apple Intelligence por primera vez en la gama base.</p></li><li><p><strong>MacBook Air con M5</strong>, con mejoras de rendimiento multi-core de hasta un 20% respecto al M4.</p></li><li><p><strong>MacBook Pro con M5 Pro y M5 Max</strong> para quien necesita lo m&#225;ximo.</p></li></ul><p>Una semana grande. Y la novedad m&#225;s relevante para quienes desarrollamos para Apple es, sin duda, la primera de la lista.</p><h2>El Mac que puede cambiar qui&#233;n desarrolla para Apple</h2><p>Seamos directos: uno de los mayores frenos para empezar en el desarrollo Apple no es la curva de aprendizaje, sino el precio de la m&#225;quina de entrada. Durante a&#241;os, la opci&#243;n m&#237;nima recomendada ha sido el MacBook Air &#8212;estupendo port&#225;til, pero con un precio de salida que supera los 1.100 d&#243;lares en la mayor&#237;a de mercados.</p><p>Eso est&#225; a punto de cambiar. El nuevo <strong>MacBook con A18 Pro</strong> llega con el mismo chip que el iPhone 16 Pro: CPU de 6 n&#250;cleos, GPU de 6 n&#250;cleos, proceso de 3 nan&#243;metros de segunda generaci&#243;n y 8 GB de RAM garantizados. En benchmarks, el A18 Pro alcanza puntuaciones de single-core a la altura del <strong>M3 Ultra</strong> y multi-core superiores al <strong>M1</strong> &#8212;s&#237;, el mismo chip que inaugur&#243; la era Apple Silicon en el Mac&#8212;. En un port&#225;til de menos de 800 d&#243;lares.</p><p>&#191;Es una m&#225;quina para usuarios profesionales exigentes? No, y hay que ser honesto con eso. Sin Thunderbolt &#8212;solo USB-C est&#225;ndar&#8212;, pantalla m&#225;s peque&#241;a y sin ProMotion. Pero para correr <strong>Xcode</strong>, compilar proyectos reales, trabajar con simuladores y Previews, depurar y publicar en el App Store, es <strong>m&#225;s que suficiente</strong>. Apple Intelligence funciona. El ecosistema completo de herramientas, tambi&#233;n.</p><p>Junto al <strong>Mac mini</strong> &#8212;que sigue siendo la mejor opci&#243;n de sobremesa por precio-prestaciones de todo el ecosistema Apple&#8212; tenemos ahora dos puertas de entrada al desarrollo nativo a precios que, por primera vez en mucho tiempo, compiten de verdad con alternativas de otras plataformas. Si tienes a alguien en tu entorno que quiera empezar a desarrollar para Apple y ha estado esperando el momento, esta semana puede ser el momento de decirle que ya no hay excusas.</p><h2>iOS 26.4: la actualizaci&#243;n que lleg&#243; sin su protagonista</h2><p>La primera beta de <strong>iOS 26.4</strong> aterriz&#243; en manos de los desarrolladores a mediados de febrero, y la comunidad se lanz&#243; a revisarla con la esperanza de encontrar se&#241;ales de la nueva Siri. Resultado: nada. La Siri que promet&#237;a entender el contexto personal, buscar en mensajes antiguos, controlar apps de terceros con la voz... no est&#225;.</p><p>Seg&#250;n Bloomberg, las pruebas internas detectaron problemas serios: Siri responde demasiado lento en solicitudes complejas y ciertas consultas no se procesan correctamente. El equipo ha tenido que frenar. La nueva Siri podr&#237;a llegar en <strong>iOS 26.5</strong> &#8212;primavera&#8212; o incluso quedar para <strong>iOS 27</strong> en oto&#241;o. No ser&#237;a la primera vez que Siri se retrasa, pero la situaci&#243;n tiene un peso especial cuando los competidores llevan meses demostrando exactamente lo que Apple prometi&#243;.</p><p>En nuestro podcast le hemos dedicado 36 minutos a diseccionar qu&#233; ha pasado y qu&#233; significa todo esto para el futuro de Apple Intelligence. Lo tienes <a href="https://youtu.be/AllUzZkxqAk">en YouTube</a> y tambi&#233;n <a href="https://cuonda.com/apple-coding-daily/llega-ios-264-y-donde-esta-la-nueva-siri">en Cuonda</a>, en el formato de Apple Coding Daily.</p><p>Ahora bien: que Siri no aparezca no significa que iOS 26.4 llegue de vac&#237;o. La actualizaci&#243;n s&#237; trae algo relevante para los desarrolladores: un <strong>nuevo modelo de fundaci&#243;n on-device</strong> &#8212;un LLM local completamente renovado&#8212; que mejora sustancialmente al anterior. Este modelo es el coraz&#243;n de lo que Apple est&#225; construyendo: es la pieza que procesar&#225; el <strong>contexto personal</strong> del usuario, la que ejecutar&#225; <strong>comandos en las apps a trav&#233;s de App Intents</strong>, y la base sobre la que se apoyar&#225; la interpretaci&#243;n visual de interfaces, la misma que hemos visto en los papers de <strong>Ferret-UI</strong>. La arquitectura est&#225; tomando forma, ladrillo a ladrillo.</p><p>Esto tiene una implicaci&#243;n concreta si ya ten&#233;is apps que usan el Foundation Models Framework: <strong>Apple ha pedido a los desarrolladores que revisen sus prompts e implementaciones</strong> con el nuevo modelo para asegurarse de que el comportamiento no var&#237;a de forma significativa. Y la raz&#243;n es fundamental, no administrativa: la IA <strong>no es determinista</strong>. A diferencia de una funci&#243;n de c&#243;digo convencional, la misma entrada no produce siempre la misma salida. Un LLM calcula en cada paso el token m&#225;s probable en el espacio de vectores, y esa distribuci&#243;n de probabilidades puede cambiar completamente de un modelo a otro seg&#250;n su base de entrenamiento. Un prompt que funcionaba perfectamente con el modelo anterior puede comportarse de forma distinta &#8212;a veces mejor, a veces inesperada&#8212; con el nuevo. Comprobadlo antes de que llegue a producci&#243;n.</p><h2>La IA siempre necesitar&#225; a alguien detr&#225;s del volante</h2><p>Este contexto de promesas retrasadas da a&#250;n m&#225;s relevancia a un art&#237;culo que public&#243; <strong>Julio C&#233;sar Fern&#225;ndez</strong> estas semanas y que no deber&#237;ais perderos. Con datos emp&#237;ricos &#8212;no opiniones, datos concretos sobre las limitaciones t&#233;cnicas actuales de los sistemas de IA&#8212;, explica por qu&#233; la inteligencia artificial seguir&#225; necesitando humanos cualificados detr&#225;s. Y por qu&#233;, cuanto m&#225;s sepas, m&#225;s valioso ser&#225;s en este entorno.</p><p>Lo ten&#233;is disponible <a href="https://x.com/jcfmunoz/status/2026264716507578567">en X</a>, en LinkedIn y en <strong>Be Native</strong>. Una lectura especialmente recomendable para quienes tienen dudas sobre si vale la pena seguir invirtiendo en formaci&#243;n t&#233;cnica mientras la IA avanza.</p><p>Y hablando de lo que la IA <em>s&#237;</em> puede hacer ya: Apple ha tenido un febrero muy activo en su divisi&#243;n de investigaci&#243;n. El <strong>17 de febrero</strong> public&#243; en <strong>machinelearning.apple.com</strong> dos trabajos que merecen atenci&#243;n.</p><p><strong>Ferret-UI 2</strong> es un modelo multimodal que entiende interfaces de usuario en m&#250;ltiples plataformas &#8212;iPhone, Android, iPad, web, Apple TV&#8212;, combinando percepci&#243;n de alta resoluci&#243;n mediante escalado adaptativo con datos de entrenamiento generados con GPT-4o. Pero la sorpresa del mes ha sido <strong>Ferret-UI Lite</strong>: un agente compacto de solo <strong>3.000 millones de par&#225;metros</strong> dise&#241;ado para ejecutarse completamente en el dispositivo, sin nube, sin latencia de red. Puede localizar elementos en pantalla con una precisi&#243;n del <strong>91,6% en ScreenSpot-V2</strong> y navegar de forma aut&#243;noma por interfaces. El paralelismo con el trabajo de Siri es obvio &#8212;y prometedor. Todo el detalle en <a href="https://machinelearning.apple.com/research/ferret-ui">machinelearning.apple.com</a>.</p><h2>Swift en el navegador: BridgeJS alcanza el MVP</h2><p>El grupo de trabajo de Swift para WebAssembly public&#243; a finales de febrero su resumen mensual, y hay buenas noticias en varios frentes.</p><p>La m&#225;s destacada: <strong>BridgeJS</strong> ha alcanzado el MVP en la versi&#243;n <strong>0.44.1 de JavaScriptKit</strong>. Este nuevo mecanismo de interoperabilidad entre Swift y JavaScript permite declarar APIs usando macros Swift y generar c&#243;digo de puente bidireccional de forma autom&#225;tica. Con el atributo <code>@JS</code> expones tu c&#243;digo Swift a JavaScript; con <code>@JSClass</code>, <code>@JSFunction</code>, <code>@JSGetter</code> y <code>@JSSetter</code> importas el ecosistema JavaScript directamente en Swift. Y puedes incluso generar los bindings desde archivos TypeScript. Type-safe, eficiente y, por fin, c&#243;modo.</p><p>Adem&#225;s, <strong>WasmKit</strong> avanza en el soporte del <strong>Component Model</strong> de WebAssembly &#8212;el est&#225;ndar de modularidad del ecosistema&#8212;, y <strong>ElementaryUI</strong> incorpora <code>@FocusState</code>, la vista <code>Group</code> y un <code>FilterModifier</code> con blur, saturaci&#243;n y brillo, adem&#225;s de mejoras de rendimiento generales. Todos los detalles en el <a href="https://forums.swift.org/t/swift-for-wasm-february-2026-updates/85046">Swift Forums</a>.</p><h2>El backend Swift, en plena forma</h2><p>El <strong>16 de febrero</strong>, <strong>Jay Herron</strong> y la organizaci&#243;n <strong>GraphQLSwift</strong> anunciaron en los Swift Forums el lanzamiento de dos nuevos paquetes: <code>graphql-vapor</code> y <code>graphql-hummingbird</code>. El objetivo: exponer una API GraphQL completa &#8212;con suscripciones WebSocket, cumplimiento de la especificaci&#243;n GraphQL-over-HTTP y un IDE GraphiQL integrado&#8212; con una sola llamada en tu router:</p><pre><code><code>routeBuilder.graphql(schema: schema) {
    // createContext()
}</code></code></pre><p>El framework se encarga de las codificaciones especializadas, el mapeo de errores a c&#243;digos HTTP y los protocolos de suscripci&#243;n. Nada m&#225;s que a&#241;adir.</p><p>En paralelo, el equipo de <strong>Vapor</strong> public&#243; su visi&#243;n de futuro para <strong>Vapor 5</strong>: concurrencia estructurada completa (adi&#243;s para siempre a <code>EventLoopFuture</code>), integraci&#243;n con el servidor HTTP de Hummingbird, soporte de primera clase para OpenAPI, gRPC y streaming asincr&#243;nico, y observabilidad completa desde el primer d&#237;a. Vapor 5 garantizar&#225; <strong>3 a&#241;os de soporte activo</strong>. El servidor en Swift sigue avanzando con paso firme.</p><h2>Para desarrolladores: SwiftUI, Liquid Glass y lo nuevo de Apple</h2><p>Febrero ha sido generoso en contenido oficial para desarrolladores. Algunas cosas que vale la pena revisar antes de que llegue la temporada de actualizaciones:</p><ul><li><p>Las <strong>sesiones fundamentales de SwiftUI</strong> del 10 de febrero siguen disponibles en v&#237;deo, tanto para principiantes como para desarrolladores con experiencia.</p></li><li><p>Las sesiones <strong>&#8220;Let&#8217;s talk Liquid Glass&#8221;</strong> contin&#250;an activas durante marzo. Si todav&#237;a no has explorado las APIs <code>glassEffect</code>, <code>GlassEffectContainer</code> y <code>glassEffectID</code>, es el momento ideal para ponerse al d&#237;a.</p></li><li><p>La nueva documentaci&#243;n sobre <strong>optimizaci&#243;n del Foundation Models Framework</strong> detalla c&#243;mo analizar el consumo de tokens y mejorar los tiempos de respuesta en apps que usan el modelo on-device de 3.000 millones de par&#225;metros de Apple.</p></li></ul><p>Todo disponible en <a href="https://developer.apple.com/hello/february26/">developer.apple.com</a>.</p><h2>Convocamos el Swift Developer Program 2026</h2><p>Una noticia que nos hace especial ilusi&#243;n compartir: hemos convocado el <strong>Swift Developer Program 2026</strong>, la formaci&#243;n de referencia para convertirse en desarrollador Apple profesional, impartido esta edici&#243;n por <strong>Marc Hervera</strong> &#8212;uno de los profesionales con mayor trayectoria y experiencia del ecosistema iOS en el mundo hispanohablante&#8212;.</p><p>Si a&#250;n no conoces a Marc, ahora tienes la excusa perfecta para hacerlo: ten&#233;is <a href="https://youtu.be/y9HEICi9yNc">la entrevista completa en YouTube</a>, donde Julio C&#233;sar habla con &#233;l sobre su carrera desde los tiempos de Objective-C hasta la era de la IA. Si prefieres el audio, est&#225; tambi&#233;n <a href="https://cuonda.com/apple-coding/entrevista-a-marc-hervera-atmhergon-de-objective-c-a-la-era-de-la-ia">en Cuonda</a> dentro del podcast de Apple Coding. Una conversaci&#243;n que merece una escucha tranquila.</p><p>Todos los detalles del programa, en <a href="https://acoding.academy/formaciones/swift-developer-program/">acoding.academy</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iR9c!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b8b746f-db5a-4dfd-b3f1-91dc9950c243_1200x630.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iR9c!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b8b746f-db5a-4dfd-b3f1-91dc9950c243_1200x630.heic 424w, https://substackcdn.com/image/fetch/$s_!iR9c!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b8b746f-db5a-4dfd-b3f1-91dc9950c243_1200x630.heic 848w, https://substackcdn.com/image/fetch/$s_!iR9c!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b8b746f-db5a-4dfd-b3f1-91dc9950c243_1200x630.heic 1272w, https://substackcdn.com/image/fetch/$s_!iR9c!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b8b746f-db5a-4dfd-b3f1-91dc9950c243_1200x630.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iR9c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b8b746f-db5a-4dfd-b3f1-91dc9950c243_1200x630.heic" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4b8b746f-db5a-4dfd-b3f1-91dc9950c243_1200x630.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:44477,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://applecoding.substack.com/i/189541470?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b8b746f-db5a-4dfd-b3f1-91dc9950c243_1200x630.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!iR9c!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b8b746f-db5a-4dfd-b3f1-91dc9950c243_1200x630.heic 424w, https://substackcdn.com/image/fetch/$s_!iR9c!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b8b746f-db5a-4dfd-b3f1-91dc9950c243_1200x630.heic 848w, https://substackcdn.com/image/fetch/$s_!iR9c!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b8b746f-db5a-4dfd-b3f1-91dc9950c243_1200x630.heic 1272w, https://substackcdn.com/image/fetch/$s_!iR9c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b8b746f-db5a-4dfd-b3f1-91dc9950c243_1200x630.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Gabhel Studios: los que construyen Be Native</h2><p>Y para terminar, queremos presentaros formalmente a <strong>Gabhel Studios</strong> (<a href="https://gabhel.com/">gabhel.com</a>), el estudio de desarrollo responsable de <strong>Be Native</strong> y de muchas otras apps dentro del ecosistema Apple Coding, con m&#225;s de 15 a&#241;os de trayectoria en el desarrollo Apple.</p><p>Gabhel Studios ofrece <strong>desarrollo de apps iOS nativas</strong> con Swift y SwiftUI &#8212;c&#243;digo nativo siempre, nunca frameworks multiplataforma&#8212;; <strong>consultor&#237;a de inteligencia artificial</strong>, analizando flujos de trabajo reales e identificando herramientas de IA con impacto concreto; y <strong>modernizaci&#243;n de apps legacy</strong>, con migraciones a Swift 6 con concurrencia estricta, adaptaci&#243;n a Liquid Glass y cumplimiento de la Directiva Europea de Accesibilidad.</p><p>Su filosof&#237;a se resume en cuatro palabras: <em>&#8220;C&#243;digo nativo o nada&#8221;</em>. M&#225;s de 30 a&#241;os de experiencia en proyectos reales, m&#225;s de 10 especializados en consultor&#237;a de IA, y una honestidad que nos parece fundamental: si no pueden resolverlo, no cobran. Estamos muy orgullosos de poder ofreceros los servicios de un equipo as&#237;. Si ten&#233;is un proyecto en mente, no dud&#233;is en <a href="https://gabhel.com/">visitarles</a>.</p><h3>Y poco m&#225;s</h3><p>La semana que entra llega cargada. Nuevos Macs, nuevos iPhones, nuevos iPads, y con ellos nuevas puertas de entrada a un ecosistema que sigue siendo, a nuestro juicio, el mejor lugar donde un desarrollador puede trabajar. Swift no para: est&#225; en el servidor, est&#225; en el navegador, est&#225; en los dispositivos. Y nosotros estamos aqu&#237; para contarlo todo.</p><p>Si quer&#233;is dejarnos un comentario o contarnos cualquier cosa, estamos en los canales habituales.</p><p><strong>Nos leemos pronto y hasta entonces: un saludo y buen c&#243;digo nativo.</strong></p><p>&#161;Gracias por leer nuestra Newsletter! Nos vemos en Be Native.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://applecoding.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Caff&#232; Swift Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Agentes de cambio: cuando Xcode aprendió a pensar]]></title><description><![CDATA[Nuevo modo ag&#233;ntico en Xcode, OpenClaw, novedades en Swift, charlas de Apple... muchas cosas han pasado este primer mes en el mundo Apple.]]></description><link>https://applecoding.substack.com/p/agentes-de-cambio-cuando-xcode-aprendio</link><guid isPermaLink="false">https://applecoding.substack.com/p/agentes-de-cambio-cuando-xcode-aprendio</guid><dc:creator><![CDATA[Apple Coding]]></dc:creator><pubDate>Mon, 09 Feb 2026 12:08:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!4o9t!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc92d7ea5-be72-4903-b9ff-913b72b45c3d_1536x1024.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4o9t!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc92d7ea5-be72-4903-b9ff-913b72b45c3d_1536x1024.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4o9t!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc92d7ea5-be72-4903-b9ff-913b72b45c3d_1536x1024.heic 424w, https://substackcdn.com/image/fetch/$s_!4o9t!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc92d7ea5-be72-4903-b9ff-913b72b45c3d_1536x1024.heic 848w, https://substackcdn.com/image/fetch/$s_!4o9t!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc92d7ea5-be72-4903-b9ff-913b72b45c3d_1536x1024.heic 1272w, https://substackcdn.com/image/fetch/$s_!4o9t!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc92d7ea5-be72-4903-b9ff-913b72b45c3d_1536x1024.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4o9t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc92d7ea5-be72-4903-b9ff-913b72b45c3d_1536x1024.heic" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c92d7ea5-be72-4903-b9ff-913b72b45c3d_1536x1024.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:197397,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://applecoding.substack.com/i/187382165?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc92d7ea5-be72-4903-b9ff-913b72b45c3d_1536x1024.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4o9t!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc92d7ea5-be72-4903-b9ff-913b72b45c3d_1536x1024.heic 424w, https://substackcdn.com/image/fetch/$s_!4o9t!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc92d7ea5-be72-4903-b9ff-913b72b45c3d_1536x1024.heic 848w, https://substackcdn.com/image/fetch/$s_!4o9t!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc92d7ea5-be72-4903-b9ff-913b72b45c3d_1536x1024.heic 1272w, https://substackcdn.com/image/fetch/$s_!4o9t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc92d7ea5-be72-4903-b9ff-913b72b45c3d_1536x1024.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Llev&#225;bamos unas semanas sin pasar por aqu&#237;. La vida, los viajes, los compromisos... a veces conspiran para que la newsletter tenga que esperar. Pero si hay algo bueno de tomarse un respiro es que, al volver, tienes tanto que contar que no sabes ni por d&#243;nde empezar. Y esta vez, cr&#233;enos, ha habido de todo: Apple abrazando la IA ag&#233;ntica en Xcode, una guerra de modelos que se desat&#243; el mismo d&#237;a a la misma hora, una aventura madrile&#241;a con evangelistas de Apple que nos dej&#243; con la boca abierta, y un drama con renombramientos, estafadores crypto y langostas. S&#237;, langostas. Vamos all&#225;.</p><h2>Xcode 26.3: el IDE que ya no solo te ayuda, sino que trabaja por ti</h2><p>El 3 de febrero, Apple dej&#243; caer una de esas bombas que redefinen c&#243;mo trabajamos los desarrolladores. <strong>Xcode 26.3</strong> llega con <strong>coding ag&#233;ntico</strong> integrado de serie. Y no estamos hablando de un autocompletado glorificado: estamos hablando de agentes de IA completos, capaces de buscar documentaci&#243;n, explorar la estructura de archivos de tu proyecto, modificar configuraciones, verificar visualmente el resultado con <strong>Xcode Previews</strong>, iterar builds, solucionar errores y operar de forma aut&#243;noma.</p><p>&#191;Lo m&#225;s interesante? Apple no ha apostado por un &#250;nico proveedor. Xcode 26.3 soporta tanto a <strong>Claude de Anthropic</strong> como a <strong>Codex de OpenAI</strong> como motores de IA. Y por si fuera poco, integra <strong>MCP (Model Context Protocol)</strong>, el est&#225;ndar abierto que permite conectar cualquier agente o herramienta de terceros compatible. Es decir, Apple ha construido una autopista y ha invitado a todos a circular por ella.</p><p>Como dijo <strong>Susan Prescott</strong>, VP de Worldwide Developer Relations: <em>&#8220;El coding ag&#233;ntico potencia la productividad y la creatividad&#8221;</em>. Y lo cierto es que, tras probarlo, cuesta imaginar volver atr&#225;s. Los agentes no solo escriben c&#243;digo: entienden tu proyecto, navegan por &#233;l, y proponen soluciones contextuales. Es un antes y un despu&#233;s.</p><h2>La guerra de los titanes: mismo d&#237;a, misma hora</h2><p>Si el anuncio de Xcode 26.3 sacudi&#243; el mundo Apple, lo que vino dos d&#237;as despu&#233;s fue directamente un terremoto en el mundo de la IA. El <strong>5 de febrero</strong>, tanto <strong>Anthropic</strong> como <strong>OpenAI</strong> lanzaron sus nuevos modelos estrella. El mismo d&#237;a. A la misma hora. Bueno, casi: Anthropic adelant&#243; su lanzamiento <em>quince minutos</em>. Lo justo para poder decir que fueron primeros.</p><p><strong>Claude Opus 4.6</strong> (s&#237;, el modelo que impulsa esta misma newsletter) llega con una <strong>ventana de contexto de 1 mill&#243;n de tokens</strong> en beta &#8212;cinco veces m&#225;s que su predecesor&#8212;, un sistema de <strong>Adaptive Thinking</strong> que decide cu&#225;nto razonar seg&#250;n la complejidad de la tarea, y la funci&#243;n estrella: <strong>Agent Teams</strong>, que permite que m&#250;ltiples instancias de Claude trabajen en paralelo coordin&#225;ndose entre s&#237;. Para demostrar su potencia, Anthropic construy&#243; un compilador de C completo usando un equipo de Claudes trabajando en paralelo. Sin intervenci&#243;n humana. Ah&#237; queda eso.</p><p>En cuanto a rendimiento, Opus 4.6 marca un <strong>72,7% en OSWorld</strong> (frente al 66,3% de Opus 4.5), un <strong>65,4% en Terminal-Bench 2.0</strong> y un <strong>80,8% en SWE-bench Verified</strong>. Pero donde realmente brilla es en la mejora de b&#250;squeda web (+16 puntos) y operaciones de terminal (+5,6 puntos). Y todo esto manteniendo el mismo precio: 5/25 d&#243;lares por mill&#243;n de tokens de entrada/salida.</p><p>Por su parte, <strong>GPT-5.3-Codex</strong> llega como modelo unificado: OpenAI ha dejado de separar los modelos de c&#243;digo de los generalistas. Es un <strong>25% m&#225;s r&#225;pido</strong> que su predecesor, soporta <strong>400K tokens de contexto</strong> y <strong>128K de salida</strong>, y tiene un dato que da v&#233;rtigo: es el primer modelo de OpenAI que <em>ayud&#243; a crear su propia versi&#243;n</em>. Literalmente, versiones tempranas del modelo depuraron su propio pipeline de entrenamiento. Sam Altman adem&#225;s se&#241;al&#243; que es el primer modelo que alcanza la clasificaci&#243;n &#8220;alta&#8221; en ciberseguridad dentro de su framework de preparaci&#243;n, lo que implica tanto potencial como riesgo.</p><div class="pullquote"><p><strong>Ponte al d&#237;a con las &#250;ltimas herramientas de desarrollo y arquitecturas</strong></p><p>Xcode ag&#233;ntico, Foundation Models, Liquid Glass... el mundo del desarrollo Apple no para. En Be Native tienes todo lo que necesitas para estar al d&#237;a.</p><p><strong><a href="https://benative.dev/">Descubre Be Native</a></strong></p></div><h2>Cuando Apple te abre la puerta de su casa</h2><p>Permitidnos ahora un momento de orgullo y agradecimiento. Porque estas &#250;ltimas semanas hemos tenido el privilegio de vivir algo muy especial.</p><p>El pasado <strong>2 de febrero</strong>, <strong>Julio C&#233;sar Fern&#225;ndez</strong>, <strong>Arturo Rivas</strong>, <strong>Jon Ander Orcera</strong> y <strong>Alejandro Mohamad</strong>, en representaci&#243;n de <strong>Apple Coding</strong> y <strong>AC Academy</strong>, asistieron a una charla sobre <strong>Liquid Glass</strong> en el <strong>Impact Hub de Madrid</strong>. La sesi&#243;n estaba enmarcada dentro del programa <strong>&#8220;Meet with Apple&#8221;</strong>, la serie mundial de actividades de dise&#241;o que Apple est&#225; organizando hasta marzo de 2026 para ayudar a los desarrolladores a adoptar su nuevo lenguaje de dise&#241;o.</p><p>La charla fue impartida por <strong>Aniket Roy</strong>, <strong>Design Evangelist de Apple</strong>, que desgran&#243; las claves del sistema de dise&#241;o <strong>Liquid Glass</strong> &#8212;el mayor cambio visual de las plataformas Apple desde iOS 7&#8212; y c&#243;mo los desarrolladores pueden integrar sus principios en sus aplicaciones. Una sesi&#243;n inspiradora que dej&#243; claro que Apple sigue apostando por el dise&#241;o como piedra angular de la experiencia de usuario. Las APIs de SwiftUI como <code>glassEffect</code>, <code>GlassEffectContainer</code> y <code>glassEffectID</code> permiten que las apps que usan componentes est&#225;ndar obtengan soporte de Liquid Glass con un esfuerzo m&#237;nimo, pero el diablo est&#225; en los detalles y en los casos personalizados, que es precisamente lo que estas sesiones presenciales ayudan a resolver.</p><p>Pero la cosa no qued&#243; ah&#237;. <strong>Julio</strong> tuvo adem&#225;s la oportunidad de participar en un <strong>workshop t&#233;cnico de dos d&#237;as sobre Foundation Model Framework</strong>, impartido por <strong>Alberto Ricci</strong>, <strong>Technology Evangelist de Apple</strong> desde 2008 &#8212;una aut&#233;ntica leyenda del evangelismo t&#233;cnico&#8212;. Con un enfoque completamente pr&#225;ctico, Alberto gui&#243; a m&#225;s de 20 desarrolladores Apple a trav&#233;s de un caso real de programaci&#243;n que fue mucho m&#225;s all&#225; de lo esperado: no solo el <strong>Foundation Model Framework</strong> en s&#237;, sino tambi&#233;n <strong>transcripci&#243;n en tiempo real</strong>, <strong>generaci&#243;n de im&#225;genes</strong>, <strong>escaneado con reconocimiento de texto</strong> y muchas m&#225;s capacidades de inteligencia artificial on-device. Dos d&#237;as intensos donde qued&#243; demostrado que la IA de Apple no es un juguete: es una herramienta seria, potente y lista para producci&#243;n.</p><p>Desde aqu&#237; queremos dar las gracias de coraz&#243;n a <strong>Annikki Laine</strong>, <strong>Partnership Manager de Worldwide Developer Relations para Northern Europe en Apple</strong>, que desde Helsinki hace posible que estas actividades lleguen a desarrolladores de toda Europa, y a todo el equipo de Apple Developer Relations por abrirnos las puertas. Momentos as&#237; nos recuerdan por qu&#233; amamos esta comunidad.</p><h2>OpenClaw: la langosta que incendi&#243; internet</h2><p>Y hablando de comunidad, imposible no hablar del fen&#243;meno que ha sacudido el mundo tech estas semanas: <strong>OpenClaw</strong>. Aunque para entender la historia completa hay que rebobinar un poco.</p><p>Todo empez&#243; con <strong>Clawdbot</strong>, un &#8220;proyecto de fin de semana&#8221; de <strong>Peter Steinberger</strong> &#8212;s&#237;, el fundador de <strong>PSPDFKit</strong>, uno de los nombres m&#225;s reconocidos del ecosistema iOS que vendi&#243; su empresa tras una inversi&#243;n de 116 millones de d&#243;lares de Insight Partners&#8212;. La idea era simple y ambiciosa a partes iguales: un agente de IA aut&#243;nomo, open source, que se ejecuta en tu m&#225;quina y se conecta a tus apps del d&#237;a a d&#237;a. <strong>WhatsApp, Slack, Discord, iMessage, Telegram, Signal, tu email, tu calendario, tu terminal</strong>... Clawdbot pod&#237;a gestionarlo todo. En una entrevista con The Pragmatic Engineer, Steinberger solt&#243; la frase que se hizo viral: <em>&#8220;Publico c&#243;digo que no leo&#8221;</em>. Solo en enero de 2026 hizo m&#225;s de <strong>6.600 commits</strong>. &#201;l solo. Desde su casa.</p><p>El nombre &#8220;Clawd&#8221; era un gui&#241;o evidente a Claude de Anthropic. Y claro, Anthropic no tard&#243; en llamar a la puerta con una reclamaci&#243;n de marca registrada. Steinberger pregunt&#243; si pod&#237;a simplemente quitar la &#8220;d&#8221; y dejarlo en &#8220;Clawbot&#8221;. La respuesta: <em>&#8220;No permitido&#8221;</em>. As&#237; que lo renombr&#243; a <strong>Moltbot</strong>. Y aqu&#237; viene la parte buena: en los <strong>diez segundos</strong> que pasaron entre soltar el nombre viejo en GitHub y Twitter y registrar el nuevo, <strong>estafadores de criptomonedas se apoderaron de ambas cuentas antiguas</strong>. El caos fue absoluto.</p><p>Tras 48 horas de confusi&#243;n bajo el nombre Moltbot (que &#8220;nunca termin&#243; de sonar bien&#8221;, admiti&#243; Steinberger), naci&#243; definitivamente <strong>OpenClaw</strong>, con una langosta como mascota y la determinaci&#243;n de que este ser&#237;a el nombre definitivo.</p><p>Los n&#250;meros son de v&#233;rtigo: de 9.000 a <strong>157.000 estrellas en GitHub en 60 d&#237;as</strong>. <strong>34.168 estrellas en solo 48 horas</strong>. Es el repositorio de crecimiento m&#225;s r&#225;pido de la historia de la plataforma, 18 veces m&#225;s r&#225;pido que Kubernetes. De &#233;l surgi&#243; incluso <strong>Moltbook</strong>, una red social <em>para bots de IA</em> donde los agentes de los usuarios publicaban contenido, comentaban y votaban entre ellos. Lleg&#243; a tener <strong>1,5 millones de agentes registrados</strong>. Andrej Karpathy (ex-director de IA en Tesla) lo calific&#243; como <em>&#8220;lo m&#225;s cercano a la ciencia ficci&#243;n que he visto en mucho tiempo&#8221;</em>.</p><p>Las capacidades son reales e impresionantes: agentes que te preparan briefings matutinos personalizados, gesti&#243;n de email y calendario por mensaje, scaffolding de proyectos completos, revisi&#243;n de pull requests desde el m&#243;vil, monitorizaci&#243;n de grupos de WhatsApp con reconocimiento facial... La lista de lo que la comunidad est&#225; construyendo con OpenClaw es interminable, con cientos de <em>skills</em> en su marketplace <strong>ClawHub</strong>.</p><p>Pero &#8212;y es un pero muy importante&#8212; <strong>nosotros lo estamos usando y sabemos de primera mano que hay que tener much&#237;simo cuidado</strong>. Se ha descubierto una vulnerabilidad cr&#237;tica (<strong>CVE-2026-25253</strong>, puntuaci&#243;n CVSS de 8.8) que permite ejecuci&#243;n remota de c&#243;digo con un solo clic. Investigadores de seguridad han encontrado <strong>341 skills maliciosos</strong> en ClawHub &#8212;335 de ellos de una misma campa&#241;a&#8212;. <strong>Snyk</strong> analiz&#243; casi 4.000 skills y encontr&#243; que el 7,1% conten&#237;a fallos cr&#237;ticos que expon&#237;an credenciales. Los ataques de <em>prompt injection</em> pueden secuestrar tu agente a trav&#233;s de algo tan inocente como un documento de Google. Y no hay sandboxing por defecto.</p><p>OpenClaw es una herramienta incre&#237;blemente potente. Pero si no eres alguien con experiencia t&#233;cnica s&#243;lida y no entiendes los riesgos que conlleva dar a un agente de IA acceso a tu vida digital, puede convertirse en una pesadilla de seguridad. The Register lo calific&#243; de <em>&#8220;incendio en un contenedor de basura&#8221;</em> en materia de seguridad. XDA public&#243; un art&#237;culo titulado <em>&#8220;Por favor, dejad de usar OpenClaw&#8221;</em>. Usadlo, pero con mucho, mucho respeto. Y si lo hac&#233;is, revisad cada skill que instal&#233;is, activad el sandboxing, y no le deis permisos que no entend&#225;is.</p><div class="pullquote"><p><strong>Comienza a aprender tu nueva carrera de programaci&#243;n potenciada con IA</strong></p><p>El desarrollo de software ha cambiado para siempre. En Be Native te preparamos para dominar las herramientas que est&#225;n redefiniendo la profesi&#243;n.</p><p><strong><a href="https://benative.dev/">Empieza en Be Native</a></strong></p></div><h2>Swift conquista nuevos territorios</h2><p>Mientras el mundo de la IA ard&#237;a, Swift segu&#237;a avanzando con paso firme en m&#250;ltiples frentes.</p><h3>Windows es territorio Swift</h3><p>El <strong>26 de enero</strong>, el proyecto Swift anunci&#243; oficialmente el <strong>Windows Workgroup</strong>, un grupo de trabajo dedicado a garantizar el soporte continuo de Swift en Windows. El objetivo: mejorar la distribuci&#243;n oficial, adaptar paquetes core como <strong>Foundation</strong> y <strong>Dispatch</strong> a las convenciones de Windows, y establecer buenas pr&#225;cticas para conectar Swift con la API nativa del sistema operativo de Microsoft. Swift va muy en serio con lo de ser multiplataforma.</p><h3>Swift 6.3 asoma la cabeza</h3><p><strong>Swift 6.3</strong> sigue su camino hacia una release en primavera de 2026, con mejoras importantes en <strong>Embedded Swift</strong>: impresi&#243;n de punto flotante, el atributo <code>@c</code> (SE-0495) para funciones compatibles con C, depuraci&#243;n mejorada en LLDB, an&#225;lisis de core dumps, y los atributos <code>@section</code>, <code>@used</code> y <code>@export</code>. Adem&#225;s, el <strong>Android Workgroup</strong> avanza con builds diarios, y hay soporte en preview para <strong>FreeBSD 14.3+</strong>. El lenguaje sigue expandi&#233;ndose a territorios que hace pocos a&#241;os habr&#237;an parecido ciencia ficci&#243;n.</p><h3>Evoluci&#243;n en marcha</h3><p>Varias propuestas de <strong>Swift Evolution</strong> est&#225;n en revisi&#243;n activa:</p><ul><li><p><strong>SE-0506: Advanced Observation Tracking</strong>, que mejora los tipos <code>@Observable</code> con un control m&#225;s granular sobre la detecci&#243;n de cambios en propiedades. Muy &#250;til para infraestructura de middleware y sistemas de widgets.</p></li><li><p><strong>SE-0507: Borrow and Mutate Accessors</strong>, que permite acceso directo a propiedades sin el overhead de copia. Un paso importante para el rendimiento.</p></li><li><p><strong>SE-0504: Task Cancellation Shields</strong>, que introduce un mecanismo para &#8220;proteger&#8221; cierto c&#243;digo de limpieza de la cancelaci&#243;n de tareas. Autor&#237;a de Konrad Malawski.</p></li></ul><h3>Librer&#237;as C m&#225;s c&#243;modas en Swift</h3><p>Un <a href="https://www.swift.org/blog/improving-usability-of-c-libraries-in-swift/">post imperdible de Doug Gregor</a> en swift.org explica c&#243;mo hacer librer&#237;as C m&#225;s ergon&#243;micas en Swift usando <strong>API notes</strong>: archivos YAML que se superponen sobre las cabeceras C para obtener enums nativos, gesti&#243;n autom&#225;tica de memoria con <code>SWIFT_SHARED_REFERENCE</code>, firmas idiom&#225;ticas con <code>SWIFT_NAME</code> y seguridad de tipos con <code>OptionSet</code>. Todo sin tocar una l&#237;nea del c&#243;digo C original. Incluye un script Swift para generar las API notes autom&#225;ticamente. Brillante.</p><h3>Tu iPhone piensa, pero no te esp&#237;a</h3><p>El <strong>Foundation Models Framework</strong> de Apple sigue ganando tracci&#243;n entre los desarrolladores. Hablamos de un modelo de <strong>3.000 millones de par&#225;metros</strong> ejecut&#225;ndose completamente en el dispositivo: sin enviar datos a la nube, sin costes adicionales, funcionando incluso offline. Con tan solo tres l&#237;neas de c&#243;digo Swift puedes acceder a capacidades de resumen, extracci&#243;n de entidades, generaci&#243;n de texto creativo, di&#225;logo corto y mucho m&#225;s. Apple ha publicado nuevos <a href="https://developer.apple.com/documentation/FoundationModels">tutoriales sobre prompting de Foundation Models</a> y un <a href="https://developer.apple.com/videos/play/meet-with-apple/205/">code-along oficial</a> que merece mucho la pena.</p><h3>Radar de la comunidad</h3><ul><li><p>El <strong>Swift Student Challenge 2026</strong> tiene las inscripciones abiertas del <strong>6 al 28 de febrero</strong>. Los Distinguished Winners ser&#225;n invitados a Cupertino este verano.</p></li><li><p>El <strong>10 de febrero</strong>, Apple organiza desde Cupertino un d&#237;a completo de <strong>sesiones fundacionales de SwiftUI</strong> con livestream.</p></li><li><p><strong>Studioworks</strong> comparte su caso de &#233;xito construyendo aplicaciones web completas en Swift con <strong>Hummingbird 2</strong>, <strong>Soto</strong> y <strong>Elementary</strong>, logrando tiempos de carga por debajo de 100ms.</p></li><li><p>Nuevos paquetes destacados: <strong>Cadova</strong> (herramienta de CAD 3D programable), <strong>Feather Database</strong> (capa de base de datos agn&#243;stica con concurrencia Swift), y <strong>MailFoundation</strong> (port de librer&#237;as de correo de .NET).</p></li></ul><h3>Y poco m&#225;s</h3><p>Han sido unas semanas de v&#233;rtigo. Apple abrazando la IA ag&#233;ntica en Xcode, dos gigantes lanzando modelos el mismo d&#237;a, una langosta sembrando el caos en GitHub, y nosotros teniendo el privilegio de aprender de primera mano con los evangelistas de Apple en Madrid. Si algo queda claro es que 2026 no va a dar tregua. Y sinceramente, no querr&#237;amos que la diera.</p><p>Si quer&#233;is dejarnos un comentario o contarnos cualquier cosa, estamos en los canales habituales.</p><p><strong>Nos leemos pronto y hasta entonces: un saludo y Good Apple Coding.</strong></p><p>&#161;Gracias por leer nuestra Newsletter! Nos vemos en Be Native.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://applecoding.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Caff&#232; Swift Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[¡Newsletter fin de año! ¡Feliz 2026!]]></title><description><![CDATA[Cerramos el a&#241;o 2025 con un peque&#241;o repaso de todo lo que ha dado de s&#237; este a&#241;o 2025 en el mundo Apple de desarrollo y c&#243;mo la IA ha cambiado nuestras vidas.]]></description><link>https://applecoding.substack.com/p/newsletter-fin-de-ano-feliz-2026</link><guid isPermaLink="false">https://applecoding.substack.com/p/newsletter-fin-de-ano-feliz-2026</guid><dc:creator><![CDATA[Apple Coding]]></dc:creator><pubDate>Wed, 31 Dec 2025 17:33:50 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Q7x9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7da6dcd8-9828-47ca-bca4-192b486b4908_1536x1024.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Q7x9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7da6dcd8-9828-47ca-bca4-192b486b4908_1536x1024.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Q7x9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7da6dcd8-9828-47ca-bca4-192b486b4908_1536x1024.heic 424w, https://substackcdn.com/image/fetch/$s_!Q7x9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7da6dcd8-9828-47ca-bca4-192b486b4908_1536x1024.heic 848w, https://substackcdn.com/image/fetch/$s_!Q7x9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7da6dcd8-9828-47ca-bca4-192b486b4908_1536x1024.heic 1272w, https://substackcdn.com/image/fetch/$s_!Q7x9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7da6dcd8-9828-47ca-bca4-192b486b4908_1536x1024.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Q7x9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7da6dcd8-9828-47ca-bca4-192b486b4908_1536x1024.heic" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7da6dcd8-9828-47ca-bca4-192b486b4908_1536x1024.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:228719,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://applecoding.substack.com/i/183074312?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7da6dcd8-9828-47ca-bca4-192b486b4908_1536x1024.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Q7x9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7da6dcd8-9828-47ca-bca4-192b486b4908_1536x1024.heic 424w, https://substackcdn.com/image/fetch/$s_!Q7x9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7da6dcd8-9828-47ca-bca4-192b486b4908_1536x1024.heic 848w, https://substackcdn.com/image/fetch/$s_!Q7x9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7da6dcd8-9828-47ca-bca4-192b486b4908_1536x1024.heic 1272w, https://substackcdn.com/image/fetch/$s_!Q7x9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7da6dcd8-9828-47ca-bca4-192b486b4908_1536x1024.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Diciembre toca a su fin y con &#233;l se cierra un 2025 que, sin exagerar, ha sido uno de los a&#241;os m&#225;s transformadores para el ecosistema Apple y el desarrollo en Swift. Un a&#241;o donde Apple decidi&#243; que los n&#250;meros de versi&#243;n aburr&#237;an y que mejor nos sincroniz&#225;bamos todos con el calendario; donde el dise&#241;o de nuestras apps se volvi&#243; l&#237;quido &#8212;literalmente&#8212;; y donde la inteligencia artificial pas&#243; de ser una promesa a convertirse en nuestro compa&#241;ero de c&#243;digo diario.</p><p>Antes de que os lanc&#233;is a las uvas, os invitamos a escuchar el <strong><a href="https://cuonda.com/apple-coding/especial-fin-de-ano-2025-con-maria-soriano">podcast especial de fin de a&#241;o en Apple Coding</a></strong>, donde repasamos todo esto y m&#225;s con el detalle y el cari&#241;o que se merece. Pero si prefer&#237;s la versi&#243;n escrita, poneos c&#243;modos: vamos a recorrer este 2025 mes a mes.</p><div><hr></div><h2>Enero-Febrero: El despertar de los agentes</h2><p>El a&#241;o comenz&#243; con el ecosistema Swift asimilando las novedades de <strong>Swift 6</strong>, lanzado en septiembre de 2024. La adopci&#243;n del nuevo modelo de concurrencia estricta generaba debates acalorados en los foros, mientras los desarrolladores descubr&#237;an que migrar sus proyectos no era tan trivial como esperaban. Los warnings de <code>Sendable</code> se convirtieron en el pan de cada d&#237;a.</p><p>Pero febrero trajo la primera gran bomba del a&#241;o: <strong>Anthropic lanz&#243; Claude Code</strong> el 24 de febrero, junto con Claude 3.7 Sonnet. Por primera vez, ten&#237;amos un agente de IA que viv&#237;a directamente en nuestra terminal, entend&#237;a nuestro c&#243;digo base y pod&#237;a ejecutar tareas complejas mediante comandos en lenguaje natural. No era solo autocompletado glorificado: era un compa&#241;ero que pod&#237;a hacer commits, gestionar ramas de Git y refactorizar c&#243;digo mientras tomabas caf&#233;.</p><p>Mientras tanto, Apple preparaba silenciosamente la expansi&#243;n de <strong>Apple Intelligence</strong> a m&#225;s idiomas y regiones, anunciando que en abril llegar&#237;a a nuevos mercados.</p><div><hr></div><h2>Marzo: Swift 6.1 y la IA llega a Europa</h2><p>Marzo fue un mes de consolidaci&#243;n. <strong>Swift 6.1</strong> vio la luz junto con Xcode 16.3, trayendo mejoras incrementales pero necesarias en el sistema de concurrencia y correcciones de bugs que la comunidad llevaba meses reportando.</p><p>El <strong>31 de marzo</strong>, Apple Intelligence por fin lleg&#243; a la Uni&#243;n Europea en iPhones y iPads, y tambi&#233;n se expandi&#243; a Apple Vision Pro en ingl&#233;s estadounidense. Los europeos por fin pod&#237;amos probar las herramientas de escritura, los res&#250;menes de notificaciones y las funciones de Siri mejoradas que nuestros colegas americanos llevaban disfrutando desde el a&#241;o anterior.</p><p>Tambi&#233;n se formaliz&#243; el <strong>Testing Workgroup</strong>, un grupo dedicado a mejorar el estado del testing en Swift. Su primera reuni&#243;n oficial fue el 10 de marzo, sentando las bases para las mejoras en Swift Testing que ver&#237;amos m&#225;s adelante.</p><p>Y Apple anunci&#243; oficialmente que la <strong>WWDC 2025</strong> tendr&#237;a lugar del 9 al 13 de junio, generando las primeras especulaciones sobre iOS 19 &#8212;aunque el n&#250;mero acabar&#237;a siendo muy diferente&#8212;.</p><div><hr></div><h2>Abril-Mayo: Los requisitos suben y los agentes de OpenAI despiertan</h2><p>Abril trajo cambios importantes para los desarrolladores: a partir de ese mes, <strong>todas las apps subidas a App Store Connect deb&#237;an compilarse con los SDKs de iOS 18</strong>, iPadOS 18, tvOS 18, visionOS 2 o watchOS 11. Adi&#243;s a seguir compilando con versiones antiguas; Apple empujaba a todos hacia adelante.</p><p>En mayo, <strong>OpenAI lanz&#243; Codex</strong> en research preview, su agente de ingenier&#237;a de software basado en la nube. A diferencia de Claude Code, Codex funcionaba de forma as&#237;ncrona: le asignabas tareas y &#233;l trabajaba en paralelo, permitiendo lanzar m&#250;ltiples agentes simult&#225;neamente para escribir features, corregir bugs y proponer pull requests. Estaba potenciado por codex-1, una versi&#243;n de o3 optimizada espec&#237;ficamente para tareas de programaci&#243;n.</p><p>El 3 de junio, Codex lleg&#243; a los usuarios de <strong>ChatGPT Plus</strong>, democratizando el acceso a agentes de c&#243;digo m&#225;s all&#225; de las APIs para desarrolladores.</p><p>Tambi&#233;n en mayo, <strong>GitHub anunci&#243; su coding agent</strong> en Microsoft Build, integrando capacidades ag&#233;nticas directamente en GitHub y VS Code. El panorama de los asistentes de c&#243;digo se estaba transformando a velocidad de v&#233;rtigo.</p><div><hr></div><h2>Junio: WWDC 2025 y el cristal l&#237;quido que lo cambi&#243; todo</h2><p>Y lleg&#243; junio. Y la WWDC. Y nada volvi&#243; a ser igual.</p><p><strong>&#8220;Sleek peek&#8221;</strong> fue el eslogan de la WWDC 2025, celebrada del 9 al 13 de junio con formato h&#237;brido: evento presencial en Apple Park y sesiones online para el resto del mundo. Pero nadie estaba preparado para lo que Apple ten&#237;a guardado.</p><h3>iOS 26: el n&#250;mero que nadie esperaba</h3><p>La primera sorpresa lleg&#243; con los n&#250;meros de versi&#243;n: <strong>Apple abandon&#243; el sistema incremental</strong> y pas&#243; a usar el a&#241;o como n&#250;mero de versi&#243;n. As&#237; que no hubo iOS 19: en su lugar, lleg&#243; <strong>iOS 26</strong>. Y macOS 26. Y watchOS 26. Y visionOS 26. Todos sincronizados con el calendario. Un cambio que gener&#243; debates intensos pero que, hay que admitirlo, tiene su l&#243;gica.</p><h3>Liquid Glass: el dise&#241;o se vuelve fluido</h3><p>Pero el verdadero protagonista fue <strong>Liquid Glass</strong>, el nuevo sistema de dise&#241;o que redefin&#237;a la interfaz de todos los sistemas operativos de Apple. Translucidez, profundidad, elementos que fluyen y se adaptan. La belleza del asunto para los desarrolladores de SwiftUI: <strong>simplemente recompilando con Xcode 26</strong>, las apps adoptaban autom&#225;ticamente el nuevo aspecto. Para quienes quer&#237;an m&#225;s control, llegaron nuevas APIs como <code>glassEffect(_:in:isEnabled:)</code>.</p><p>Apple dio un a&#241;o de gracia para que las apps pudieran seguir usando el dise&#241;o tradicional si lo necesitaban, pero el mensaje estaba claro: el futuro es l&#237;quido.</p><h3>Swift 6.2: WebAssembly, subprocesos y m&#225;s</h3><p><strong>Swift 6.2</strong> se anunci&#243; en la WWDC, trayendo novedades suculentas:</p><ul><li><p><strong>Soporte para WebAssembly (Wasm)</strong>: por fin pod&#237;amos compilar Swift para el navegador y otros entornos Wasm con soporte oficial.</p></li><li><p><strong>El nuevo paquete Subprocess</strong>: una API moderna y orientada a concurrencia para lanzar y gestionar procesos externos.</p></li><li><p><strong>Inline Arrays</strong>: arrays de tama&#241;o fijo con optimizaciones en tiempo de compilaci&#243;n.</p></li><li><p><strong>Aislamiento al main actor por defecto</strong>: una opci&#243;n que reduce dram&#225;ticamente el boilerplate en c&#243;digo concurrente.</p></li><li><p><strong>Extensi&#243;n oficial de Swift para VS Code</strong>: verificada y distribuida por Swift.org, con indexaci&#243;n en segundo plano y debugging integrado con LLDB.</p></li></ul><h3>SwiftUI: m&#225;s poder que nunca</h3><p>SwiftUI recibi&#243; una actualizaci&#243;n masiva:</p><ul><li><p><strong>WebView nativo</strong>: por fin pod&#237;amos cargar y mostrar webs directamente en SwiftUI sin depender de UIKit.</p></li><li><p><strong>TextEditor con texto enriquecido</strong>: edici&#243;n de rich text nativa con controles personalizables.</p></li><li><p><strong>Charts 3D</strong>: la nueva API Chart3D para gr&#225;ficos tridimensionales interactivos.</p></li><li><p><strong>Integraci&#243;n profunda con RealityKit</strong>: nuevos componentes que mezclan SwiftUI y 3D de forma natural.</p></li><li><p><strong>Mejoras para iPadOS</strong>: barra de men&#250; con swipe hacia abajo y ventanas redimensionables de forma m&#225;s fluida.</p></li></ul><h3>Foundation Models Framework</h3><p>Una de las novedades m&#225;s significativas fue el <strong>Foundation Models Framework</strong>, que permite a los desarrolladores acceder directamente al modelo fundacional on-device de Apple Intelligence. Inferencia gratuita, privada, offline. Un movimiento que democratiza el acceso a la IA sin depender de APIs externas ni comprometer la privacidad del usuario.</p><div><hr></div><h2>Julio-Agosto: El verano del crecimiento</h2><p>El verano fue de consolidaci&#243;n. <strong>Claude Code creci&#243; 10x en usuarios</strong> desde su lanzamiento m&#225;s amplio en mayo, demostrando que los desarrolladores estaban hambrientos de herramientas ag&#233;nticas que realmente funcionaran.</p><p>La comunidad empez&#243; a explorar las posibilidades del Foundation Models Framework, aparecieron los primeros tutoriales, y los foros se llenaron de discusiones sobre c&#243;mo aprovechar Liquid Glass sin romper la experiencia de usuario.</p><p>El <strong>Testing Workgroup</strong> continu&#243; su trabajo, preparando las mejoras de output para Swift Testing que llegar&#237;an a trav&#233;s del programa GSoC (Google Summer of Code), con un nuevo sistema de reportes jer&#225;rquicos mucho m&#225;s legible.</p><div><hr></div><h2>Septiembre: iPhone Air, iOS 26 para todos y Swift 6.2 oficial</h2><p>Septiembre es siempre el mes grande para Apple, y este a&#241;o no decepcion&#243;.</p><h3>iPhone 17 y el inesperado iPhone Air</h3><p>El 9 de septiembre, en el evento <strong>&#8220;Awe Dropping&#8221;</strong> celebrado en Apple Park, Apple present&#243; su nueva l&#237;nea de iPhone:</p><ul><li><p><strong>iPhone 17</strong> (799$): con pantalla mejorada con ProMotion y chip A19.</p></li><li><p><strong>iPhone 17 Pro</strong> (1.099$): salto de precio pero con 256GB de base y el potente A19 Pro.</p></li><li><p><strong>iPhone 17 Pro Max</strong> (1.199$): el buque insignia con la mejor c&#225;mara y bater&#237;a.</p></li><li><p><strong>iPhone Air</strong> (999$): la gran sorpresa. Con solo <strong>5.6mm de grosor</strong>, el iPhone m&#225;s fino jam&#225;s creado. Cuerpo de titanio, dise&#241;o que recuerda al m&#237;tico iPod nano, y un mensaje claro de que Apple sabe hacer dispositivos delgados cuando quiere.</p></li></ul><p>El iPhone Air no se llama &#8220;iPhone 17 Air&#8221; &#8212;simplemente iPhone Air&#8212;, lo que sugiere que podr&#237;a convertirse en una l&#237;nea permanente.</p><h3>iOS 26 para todos</h3><p>El 15 de septiembre, coincidiendo con la disponibilidad de los nuevos iPhone, <strong>iOS 26 lleg&#243; al p&#250;blico general</strong>. Liquid Glass transform&#243; millones de dispositivos de la noche a la ma&#241;ana.</p><h3>Swift 6.2 oficial</h3><p>El mismo d&#237;a, <strong>Swift 6.2 se public&#243; oficialmente</strong>, trayendo todas las mejoras anunciadas en la WWDC a producci&#243;n.</p><h3>Claude Code 2.0</h3><p><strong>Anthropic lanz&#243; la versi&#243;n 2.0 de Claude Code</strong> en septiembre, con:</p><ul><li><p><strong>Extensi&#243;n nativa para VS Code</strong>: integraci&#243;n directa sin salir del editor.</p></li><li><p><strong>Sistema de checkpoints</strong>: guardado autom&#225;tico del estado del c&#243;digo antes de cada cambio, con la posibilidad de hacer rollback instant&#225;neo con Esc-Esc o <code>/rewind</code>.</p></li><li><p><strong>Potenciado por Sonnet 4.5</strong>: capacidad para manejar tareas de desarrollo m&#225;s largas y complejas.</p></li></ul><h3>Foundation Models Framework disponible</h3><p>El framework anunciado en junio se hizo disponible con iOS 26, permitiendo a los desarrolladores crear experiencias inteligentes on-device sin coste de inferencia.</p><div><hr></div><h2>Octubre: Vision Pro con M5 y Codex para todos</h2><p>Octubre trajo actualizaciones importantes en hardware y software.</p><h3>Apple Vision Pro con M5</h3><p>El 15 de octubre, Apple anunci&#243; una <strong>actualizaci&#243;n significativa de Vision Pro</strong> con el nuevo chip M5:</p><ul><li><p><strong>10% m&#225;s de p&#237;xeles renderizados</strong> en las pantallas micro-OLED.</p></li><li><p><strong>Hasta 120Hz de refresco</strong> para una experiencia m&#225;s suave.</p></li><li><p><strong>Neural Engine 16 n&#250;cleos</strong>: funciones de IA hasta 50% m&#225;s r&#225;pidas.</p></li><li><p><strong>Bater&#237;a mejorada</strong>: 2.5 horas de uso general, 3 horas de v&#237;deo.</p></li><li><p><strong>Dual Knit Band</strong>: nueva banda que distribuye mejor el peso y reduce la fatiga.</p></li></ul><p>El precio se mantuvo en <strong>3.499$</strong>, y las ventas comenzaron el 22 de octubre.</p><h3>M5 tambi&#233;n en MacBook Pro</h3><p>El MacBook Pro de 14 pulgadas de entrada recibi&#243; el <strong>chip M5</strong>, aunque Apple no actualiz&#243; los modelos Pro/Max ni el Mac mini este a&#241;o &#8212;eso queda para 2026&#8212;.</p><h3>Codex general availability</h3><p>El 6 de octubre, <strong>OpenAI anunci&#243; la disponibilidad general de Codex</strong>, junto con integraci&#243;n con Slack. Tambi&#233;n lleg&#243; <strong>GPT-5-Codex</strong>, una versi&#243;n de GPT-5 optimizada espec&#237;ficamente para tareas ag&#233;nticas de ingenier&#237;a de software.</p><h3>Claude Code para web</h3><p>El 20 de octubre, <strong>Anthropic lanz&#243; Claude Code para web</strong>, permitiendo gestionar m&#250;ltiples agentes de c&#243;digo desde el navegador. Disponible para suscriptores Pro (20$/mes) y Max (100$/200$/mes), representaba la evoluci&#243;n natural de la herramienta de terminal hacia un entorno m&#225;s visual y accesible.</p><div><hr></div><h2>Noviembre-Diciembre: El cierre del a&#241;o</h2><p>Los &#250;ltimos meses del a&#241;o fueron de consolidaci&#243;n y preparaci&#243;n para 2026.</p><p><strong>GitHub Copilot</strong> sigui&#243; evolucionando: en noviembre llegaron los <strong>controles de pol&#237;ticas para agent mode</strong>, y en diciembre se lanzaron los <strong>Agent Skills</strong>, que permiten ense&#241;ar a Copilot a realizar tareas especializadas de forma repetible.</p><p><strong>Swift continu&#243; su expansi&#243;n multiplataforma</strong>: el trabajo en Android avanza con builds diarios y demos end-to-end, Windows madura con mejor soporte de VS Code, y FreeBSD 14.3 recibi&#243; un preview de soporte oficial.</p><p>La comunidad Swift digiri&#243; todas las novedades del a&#241;o, Liquid Glass se convirti&#243; en la nueva normalidad, y los agentes de IA &#8212;Codex, Claude Code, Copilot&#8212; se integraron en el flujo de trabajo de desarrolladores de todo el mundo.</p><p>OpenAI cerr&#243; el a&#241;o con <strong>GPT-5.2-Codex</strong>, presumiendo de ser el modelo de codificaci&#243;n m&#225;s avanzado, con mejoras en trabajos de larga duraci&#243;n, refactorizaciones masivas y capacidades de ciberseguridad.</p><div><hr></div><h2>Y poco m&#225;s</h2><p>Qu&#233; a&#241;o, &#191;verdad? De Swift 6 luchando por la adopci&#243;n a Swift 6.2 con WebAssembly. De iOS 18 a iOS 26 sin pesta&#241;ear. De herramientas de autocompletado a agentes aut&#243;nomos que programan mientras dormimos. El desarrollo ha cambiado para siempre y ahora m&#225;s que nunca se pide algo claro: especializaci&#243;n. Por eso hemos re-definido nuestra formaci&#243;n estrella <a href="https://acoding.academy/smp26">Swift Mastery Program</a>, para dar lo que se necesita: conocimiento y uso de herramientas de IA. No hay otra combinaci&#243;n para garantizar tu futuro.</p><p>El desarrollo Apple en 2025 ha sido una monta&#241;a rusa de innovaci&#243;n: Liquid Glass redefini&#243; c&#243;mo lucen nuestras apps, Foundation Models democratiz&#243; la IA on-device, y los agentes de c&#243;digo &#8212;Claude Code, Codex, Copilot&#8212; transformaron para siempre c&#243;mo escribimos software.</p><p><strong>No olvid&#233;is escuchar el <a href="https://cuonda.com/apple-coding/especial-fin-de-ano-2025-con-maria-soriano">podcast especial de fin de a&#241;o en Apple Coding</a></strong>, donde profundizamos en todo esto con m&#225;s detalle y debate.</p><p>&#191;Qu&#233; nos deparar&#225; 2026? Rumores de Apple Glasses, un Mac mini con M5, el Siri mejorado que Apple prometi&#243; y no entreg&#243; este a&#241;o... Las expectativas son altas, pero si algo hemos aprendido en 2025, es que Apple siempre tiene alguna sorpresa guardada.</p><p>Si quer&#233;is dejarnos un comentario o contarnos cualquier cosa, estamos en los canales habituales.</p><p><strong>Nos leemos en 2026 y hasta entonces: feliz a&#241;o nuevo y buen c&#243;digo nativo.</strong></p><p>&#161;Gracias por leer nuestra Newsletter! Nos vemos en Be Native.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://applecoding.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Caff&#232; Swift Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Feliz Swiftnidad #1 (Navidad jugona con Swift)]]></title><description><![CDATA[Swift cumple diez a&#241;os abierto al mundo, Apple abre sus puertas a Jap&#243;n, nueva apuesta por el mercado de videojuegos, muchas sesiones, tutoriales... comienza la Navidad.]]></description><link>https://applecoding.substack.com/p/feliz-swiftnidad-1-navidad-jugona</link><guid isPermaLink="false">https://applecoding.substack.com/p/feliz-swiftnidad-1-navidad-jugona</guid><dc:creator><![CDATA[Apple Coding]]></dc:creator><pubDate>Mon, 22 Dec 2025 11:44:09 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!rgb9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02bbe09-4115-4ed7-a000-cf4e35fb4e1c_1536x1024.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rgb9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02bbe09-4115-4ed7-a000-cf4e35fb4e1c_1536x1024.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rgb9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02bbe09-4115-4ed7-a000-cf4e35fb4e1c_1536x1024.heic 424w, https://substackcdn.com/image/fetch/$s_!rgb9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02bbe09-4115-4ed7-a000-cf4e35fb4e1c_1536x1024.heic 848w, https://substackcdn.com/image/fetch/$s_!rgb9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02bbe09-4115-4ed7-a000-cf4e35fb4e1c_1536x1024.heic 1272w, https://substackcdn.com/image/fetch/$s_!rgb9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02bbe09-4115-4ed7-a000-cf4e35fb4e1c_1536x1024.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rgb9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02bbe09-4115-4ed7-a000-cf4e35fb4e1c_1536x1024.heic" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e02bbe09-4115-4ed7-a000-cf4e35fb4e1c_1536x1024.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:192039,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://applecoding.substack.com/i/182318131?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02bbe09-4115-4ed7-a000-cf4e35fb4e1c_1536x1024.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rgb9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02bbe09-4115-4ed7-a000-cf4e35fb4e1c_1536x1024.heic 424w, https://substackcdn.com/image/fetch/$s_!rgb9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02bbe09-4115-4ed7-a000-cf4e35fb4e1c_1536x1024.heic 848w, https://substackcdn.com/image/fetch/$s_!rgb9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02bbe09-4115-4ed7-a000-cf4e35fb4e1c_1536x1024.heic 1272w, https://substackcdn.com/image/fetch/$s_!rgb9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02bbe09-4115-4ed7-a000-cf4e35fb4e1c_1536x1024.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Cerramos 2025 con una semana que pasar&#225; a la historia. <strong>Swift cumple una d&#233;cada como proyecto de c&#243;digo abierto</strong>, Apple publica investigaci&#243;n que convierte fotos en mundos 3D en menos de un segundo, los videojuegos reciben un tratamiento de primera clase con una jornada completa de formaci&#243;n desde Cupertino, y Jap&#243;n se une al club de pa&#237;ses donde el iPhone permite tiendas de apps alternativas. Una semana intensa, de esas que te recuerdan por qu&#233; seguimos aqu&#237;.</p><h3>Una d&#233;cada de c&#243;digo abierto</h3><p>El <strong>19 de diciembre</strong> se public&#243; el tradicional <a href="https://www.swift.org/blog/whats-new-in-swift-december-2025/">recap mensual de Swift</a>, pero esta vez ven&#237;a cargado de nostalgia. <strong>Hace exactamente diez a&#241;os</strong>, Apple anunciaba que Swift se convert&#237;a en software de c&#243;digo abierto. Lo que comenz&#243; como un experimento ha crecido hasta convertirse en un ecosistema de m&#225;s de <strong>70 repositorios</strong> con cientos de contribuyentes semanales.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://applecoding.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer Caff&#232; Swift Newsletter! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>El recap destaca los hitos del a&#241;o: <strong>Swift 6.2</strong> con su concurrencia m&#225;s accesible, soporte para <strong>WebAssembly</strong>, interoperabilidad profunda con <strong>C++</strong>, y las mejoras en seguridad de memoria que est&#225;n redefiniendo lo que significa escribir c&#243;digo seguro.</p><p>Pero quiz&#225; lo m&#225;s llamativo es la expansi&#243;n a nuevas plataformas. Swift ya no es solo el lenguaje de Apple: corre en <strong>Android</strong>, <strong>Windows</strong>, <strong>FreeBSD</strong>, sistemas <strong>embebidos</strong>, y hasta en un <strong>Pebble Time Round</strong> de hace diez a&#241;os. El proyecto ha madurado hasta el punto de que <strong>Amazon</strong> ha anunciado soporte integrado en Amazon Linux y adopci&#243;n oficial del AWS Lambda Runtime.</p><p>En el frente de <strong>Swift Evolution</strong>, tres propuestas merecen atenci&#243;n:</p><ul><li><p><strong>SE-0497</strong>: Control de visibilidad de definiciones de funciones (completada)</p></li><li><p><strong>SE-0493</strong>: Permite llamadas <code>async</code> en cuerpos <code>defer</code> (completada)</p></li><li><p><strong>SE-0501</strong>: Reportes de cobertura HTML para Swift Package Manager (en revisi&#243;n)</p></li></ul><p>Y hablando de expansi&#243;n, el <strong>18 de diciembre</strong> se public&#243; <a href="https://www.swift.org/blog/exploring-the-swift-sdk-for-android/">Exploring the Swift SDK for Android</a>, donde se anuncian los nuevos <strong>previews de Swift 6.3</strong> con compilaciones diarias del SDK para Android. El SDK ahora soporta m&#250;ltiples niveles de API de Android usando el familiar atributo <code>@available</code> y verificaciones <code>#available</code>, exactamente igual que en plataformas Apple. Apps como <strong>Spark</strong>, <strong>flowkey</strong>, <strong>MediQuo</strong> y <strong>Naturitas</strong> ya funcionan en producci&#243;n con millones de descargas.</p><h3>De una foto a un mundo</h3><p>Si hay algo que ha incendiado las redes esta semana, es <strong>SHARP</strong>. El <strong>17 de diciembre</strong>, Apple public&#243; investigaci&#243;n que parece magia: un modelo que reconstruye <strong>escenas 3D fotorrealistas a partir de una &#250;nica fotograf&#237;a en menos de un segundo</strong>.</p><p><a href="https://machinelearning.apple.com/research/sharp-monocular-view">SHARP (Sharp Monocular View Synthesis)</a> utiliza <strong>Gaussian Splatting</strong> &#8212;millones de peque&#241;os bloques de color y luz posicionados en el espacio&#8212; para recrear la escena. A diferencia de m&#233;todos anteriores que requer&#237;an docenas o cientos de im&#225;genes desde diferentes &#225;ngulos, SHARP lo logra en un &#250;nico paso de red neuronal.</p><p>Los n&#250;meros son impresionantes:</p><ul><li><p><strong>Tiempo de s&#237;ntesis</strong>: 3 &#243;rdenes de magnitud m&#225;s r&#225;pido que modelos anteriores</p></li><li><p><strong>Renderizado</strong>: m&#225;s de 100 FPS en GPU est&#225;ndar</p></li><li><p><strong>LPIPS</strong>: mejora del 25-34%</p></li><li><p><strong>DISTS</strong>: mejora del 21-43%</p></li></ul><p>La comunidad no ha tardado en experimentar. Un usuario comparti&#243;:</p><blockquote><p><em>&#8220;Acabo de ejecutar SHARP localmente y vi mis fotos convertirse en Gaussian Splats en segundos, luego entr&#233; en ellas con Vision Pro&#8221;</em></p></blockquote><p>El modelo tiene sus limitaciones &#8212;solo puede reconstruir vistas cercanas al punto original, no puede &#8220;inventar&#8221; lo que no ve&#8212; pero las implicaciones para <strong>Vision Pro</strong> y experiencias inmersivas son enormes. Y lo mejor: Apple lo ha publicado como <strong>c&#243;digo abierto</strong> en <a href="https://github.com/apple/ml-sharp">GitHub</a>.</p><p>Pero SHARP no viene solo. El <strong>16 de diciembre</strong> se present&#243; <a href="https://machinelearning.apple.com/research/unigen-enhanced-training">UniGen-1.5</a>, un modelo multimodal que hace algo que hasta ahora requer&#237;a tres modelos diferentes: <strong>entender</strong>, <strong>generar</strong> y <strong>editar</strong> im&#225;genes. Un &#250;nico modelo para todo.</p><p>La innovaci&#243;n clave es <strong>Edit Instruction Alignment</strong>, un nuevo paso de post-entrenamiento que alinea las instrucciones de edici&#243;n con la sem&#225;ntica de la imagen objetivo. En benchmarks, UniGen-1.5 alcanza <strong>0.89 en GenEval</strong> y <strong>86.83 en DPG-Bench</strong>, superando a modelos recientes como BAGEL y BLIP3o. En edici&#243;n de im&#225;genes, su puntuaci&#243;n de <strong>4.31 en ImgEdit</strong> es comparable a modelos propietarios como GPT-Image-1.</p><p>Y no olvidemos <strong>BED-LLM</strong> (19 dic), que propone usar dise&#241;o experimental bayesiano para que los LLMs recopilen informaci&#243;n de forma m&#225;s inteligente, y <strong>DarkDiff</strong> (16 dic), que aplica modelos de difusi&#243;n para mejorar la fotograf&#237;a en condiciones de luz extremadamente baja. Apple no solo est&#225; investigando: est&#225; definiendo el futuro.</p><div><hr></div><h3>Aprende de los que saben</h3><p>Si 2025 te pill&#243; sin tiempo para formarte, 2026 puede ser tu a&#241;o. El <a href="https://acoding.academy/smp26">Swift Mastery Program 2026</a> ya acepta inscripciones: una formaci&#243;n intensiva donde no solo aprender&#225;s las herramientas, sino que entender&#225;s el porqu&#233; detr&#225;s de cada decisi&#243;n.</p><p>En un mundo donde los agentes de IA generan c&#243;digo con facilidad, <strong>quien entiende los fundamentos siempre estar&#225; un paso por delante</strong>. El SMP no es un curso m&#225;s: es el programa que te convertir&#225; en el desarrollador que las empresas necesitan, capaz de supervisar, corregir y dirigir el c&#243;digo que generan las m&#225;quinas.</p><div><hr></div><h3>Press Start: Apple se pone seria con los juegos</h3><p>Si desarrollas videojuegos &#8212;o alguna vez lo has considerado&#8212;, esta semana ha sido un fest&#237;n. Apple ha publicado <strong>Press Start: Game development on Apple platforms</strong>, una jornada completa de formaci&#243;n retransmitida desde el Developer Center de Cupertino.</p><p>La sesi&#243;n principal, disponible en <a href="https://developer.apple.com/videos/play/meet-with-apple/214/">Apple Developer Videos</a>, incluye charlas sobre:</p><ul><li><p><strong>Traza la ruta de tu juego hacia las plataformas Apple</strong> (18:26)</p></li><li><p><strong>Sube de nivel con las tecnolog&#237;as de juegos de Apple</strong> (19:17)</p></li><li><p><strong>Trae tus juegos de PC y consola a Mac</strong> (19:53)</p></li><li><p><strong>Dise&#241;a grandes interfaces para juegos port&#225;tiles</strong> (19:59)</p></li><li><p><strong>Explora potencia, rendimiento y escalabilidad en iPhone/iPad</strong> (15:43)</p></li><li><p><strong>Transforma tu juego con Apple Vision Pro</strong> (27:33)</p></li></ul><p>Adem&#225;s, hay un caso de estudio fascinante: <a href="https://developer.apple.com/videos/play/meet-with-apple/">Descubre c&#243;mo DREDGE fue reimaginado para las plataformas Apple</a> con <strong>Black Salt Games</strong>, donde cuentan c&#243;mo adaptaron su &#233;xito indie &#8212;ganador del App Store Award 2025&#8212; a los dispositivos Apple.</p><p>Pero el contenido no es lo &#250;nico nuevo. La <a href="https://developer.apple.com/games/whats-new/">p&#225;gina What&#8217;s New de Games</a> revela las novedades t&#233;cnicas:</p><p><strong>Metal 4</strong> llega con una API optimizada para Apple Silicon, menor overhead en codificaci&#243;n de comandos, y algo que cambia las reglas: <strong>soporte nativo para Machine Learning</strong> con tensores directamente en el lenguaje de shaders. Ahora puedes ejecutar redes neuronales grandes o hacer inferencia inline en tus shaders.</p><p><strong>Game Porting Toolkit 3</strong> ampl&#237;a el conjunto de instrucciones soportadas, mejora los sparse resources, a&#241;ade soporte para <strong>MetalFX</strong> (upscaling, denoising, frame interpolation), y permite <strong>debugging remoto desde Visual Studio</strong> en Mac.</p><p>El nuevo <strong>GameSave Framework</strong> sincroniza autom&#225;ticamente los datos de guardado entre iPhone, iPad, Mac y Apple Vision Pro. Tus jugadores podr&#225;n continuar la partida donde la dejaron, en cualquier dispositivo.</p><p>Y la estrella: <strong>Apple Games app</strong>, una nueva aplicaci&#243;n unificada que viene preinstalada y sirve como destino &#250;nico para descubrir, lanzar y jugar. Los juegos aparecen autom&#225;ticamente, con integraci&#243;n de Game Center e In-App Events.</p><p>Para los que trabajan con realidad virtual, hay soporte para el <strong>PlayStation VR2 Sense controller</strong> en visionOS con 6 grados de libertad y vibraci&#243;n. Y si desarrollas para pantallas t&#225;ctiles, la nueva <strong>On-screen controls API</strong> facilita crear controles t&#225;ctiles nativos para iPhone e iPad.</p><h3>Liquid Glass para todos</h3><p>Adaptar tu app al nuevo lenguaje de dise&#241;o de Apple no tiene por qu&#233; ser un salto al vac&#237;o. Esta semana se han publicado varios <strong>showcases</strong> donde desarrolladores reales cuentan c&#243;mo lo han hecho:</p><ul><li><p><a href="https://developer.apple.com/videos/play/meet-with-apple/208/">Showcase: Apps integrating Liquid Glass</a> (116:17) &#8212; Lowe&#8217;s, American Airlines y Sky Guide comparten sus experiencias, seguidos de una charla con l&#237;deres del equipo de dise&#241;o de Apple.</p></li><li><p><strong>Liquid Glass showcase: CNN</strong> (9:24)</p></li><li><p><strong>Liquid Glass showcase: Slack</strong> (12:28)</p></li><li><p><strong>Liquid Glass showcase: Tide Guide</strong> (10:52)</p></li><li><p><strong>Liquid Glass showcase: LTK</strong> (9:33)</p></li></ul><p>Y si prefieres aprender haciendo, el <a href="https://developer.apple.com/videos/play/meet-with-apple/237/">Code-along: Start building with Swift and SwiftUI</a> (96:09) te gu&#237;a paso a paso para construir una interfaz iOS completa usando SwiftUI y SwiftData.</p><h3>De Tokio al mundo</h3><p>El <strong>17 de diciembre</strong>, Apple anunci&#243; <a href="https://www.apple.com/newsroom/2025/12/apple-announces-changes-to-ios-in-japan/">cambios significativos en iOS para Jap&#243;n</a>. Para cumplir con la <strong>Ley de Competencia de Software M&#243;vil (MSCA)</strong>, a partir de <strong>iOS 26.2</strong> los desarrolladores en Jap&#243;n pueden:</p><ul><li><p><strong>Distribuir apps en marketplaces alternativos</strong></p></li><li><p><strong>Operar sus propios marketplaces</strong></p></li><li><p><strong>Procesar pagos</strong> de bienes y servicios digitales fuera de Apple In-App Purchase</p></li></ul><p>Jap&#243;n se convierte en el <strong>pa&#237;s n&#250;mero 29</strong> con acceso a tiendas de apps alternativas en iPhone. Los usuarios tambi&#233;n pueden configurar asistentes de voz de terceros para activarse con el bot&#243;n lateral, y hay nuevas pantallas de elecci&#243;n para navegador y motor de b&#250;squeda predeterminados.</p><p>Epic Games, sin embargo, ha confirmado que <strong>Fortnite no volver&#225; a iOS en Jap&#243;n</strong> porque considera que las comisiones siguen siendo demasiado altas. La batalla contin&#250;a.</p><p>En otras novedades corporativas, Apple ha lanzado el <a href="https://developer.apple.com/programs/mini-apps-partner/">Mini Apps Partner Program</a>, dirigido a desarrolladores que alojan mini apps HTML5 dentro de aplicaciones nativas. El programa ofrece una <strong>comisi&#243;n del 85%</strong> (frente al 70% est&#225;ndar) en compras in-app cualificadas, siempre que las mini apps cumplan con los requisitos t&#233;cnicos y de privacidad.</p><p>Y para cerrar con algo bonito: <strong>CapWords</strong> ha ganado el <strong>Apple Design Award 2025</strong> en la categor&#237;a Delight and Fun. Esta <a href="https://developer.apple.com/articles/capwords">app de aprendizaje de idiomas</a> usa IA para convertir fotos de objetos cotidianos en pegatinas animadas que ense&#241;an vocabulario. Desarrollada por un equipo de tres personas en Beijing, naci&#243; de una conversaci&#243;n entre el fundador Ace Lee y su hija de 3 a&#241;os. A veces las mejores ideas vienen de las preguntas m&#225;s simples.</p><h3>Tutoriales de la comunidad</h3><p>La comunidad Swift no descansa ni en Navidad:</p><p><strong>Natalia Panferova</strong> en Nil Coalescing nos regala <a href="https://nilcoalescing.com/blog/AnimatingSFSymbolsInSwiftUI/">Animating SF Symbols in SwiftUI</a> (18 dic), un tutorial sobre c&#243;mo a&#241;adir animaciones y transiciones a los iconos de SF Symbols sin necesidad de l&#243;gica de animaci&#243;n personalizada.</p><p><strong>Antoine van der Lee</strong> en SwiftLee reflexiona sobre <a href="https://www.avanderlee.com/swift/9-months-swift-concurrency-course/">9 months of a Swift Concurrency Course</a> (15 dic), analizando lo que ha aprendido tras lanzar su curso sobre Swift Concurrency &amp; Swift 6 en marzo.</p><p>Y en <strong>iOS Dev Weekly #737</strong>, Dave Verwer destaca varios recursos interesantes: c&#243;mo usar previews de SwiftUI en el editor <strong>Zed</strong>, un tutorial para ejecutar <strong>Swift en Raspberry Pi</strong>, y <strong>Tessera</strong>, un nuevo paquete Swift para crear patrones repetitivos en fondos de apps.</p><h3>Y poco m&#225;s</h3><p>Antes de despedirnos, dos recomendaciones de audio para las fiestas:</p><p>En <strong>Apple Coding Daily</strong>, no os perd&#225;is <a href="https://cuonda.com/apple-coding-daily/un-iphone-robado-desvela-los-40-productos-secretos-de-apple">Un iPhone ROBADO desvela los 40 productos SECRETOS de Apple</a>. Un iPhone prototipo vendido ha filtrado informaci&#243;n sobre <strong>m&#225;s de 40 productos secretos</strong>: iPhone plegable, robots dom&#233;sticos, gafas con IA, un MacBook de 699&#8364;... La mayor filtraci&#243;n de la historia de Apple, contada con todo detalle.</p><p>Y en <strong>Apple Coding</strong>, tenemos una <a href="https://cuonda.com/apple-coding/la-ia-hizo-desaparecer-al-programador-senior-con-antonio-leiva">charla imprescindible con Antonio Leiva</a>, Google Developer Expert en Android y especialista en IA. La conversaci&#243;n gira en torno a c&#243;mo la inteligencia artificial est&#225; transformando los roles profesionales en el desarrollo de software. El t&#237;tulo lo dice todo: <em>&#8220;La IA hizo desaparecer al programador senior&#8221;</em>. Spoiler: no es tan dram&#225;tico como suena, pero s&#237; que hay mucho que reflexionar.</p><p>Ha sido un a&#241;o extraordinario. Swift cumple una d&#233;cada abierto al mundo, Apple publica investigaci&#243;n que parec&#237;a ciencia ficci&#243;n, los videojuegos reciben el tratamiento que merecen, y la comunidad sigue creando contenido de primera. 2026 promete ser a&#250;n mejor.</p><p>Y antes de irnos, una recomendaci&#243;n: si quer&#233;is seguir aprendiendo Swift entre newsletter y newsletter, no dej&#233;is de visitar <a href="https://swiftpills.com/">Swift Pills</a>, el blog de nuestro compa&#241;ero <strong>Arturo Rivas</strong>. Publica de forma continua tutoriales y gu&#237;as sobre desarrollo Swift que os vendr&#225;n de maravilla.</p><p>Si quer&#233;is dejarnos un comentario o contarnos cualquier cosa, estamos en los canales habituales.</p><p><strong>Nos leemos pronto y hasta entonces: un saludo y buen c&#243;digo nativo.</strong></p><p>&#161;Gracias por leer nuestra Newsletter! Nos vemos en <a href="https://benative.dev/es">Be Nativ</a>e.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://applecoding.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer Caff&#232; Swift Newsletter! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[De cuántica a código: cuando la IA nos une]]></title><description><![CDATA[Cerramos el a&#241;o con una semana cargada de novedades que, curiosamente, comparten un hilo conductor: la inteligencia artificial.]]></description><link>https://applecoding.substack.com/p/de-cuantica-a-codigo-cuando-la-ia</link><guid isPermaLink="false">https://applecoding.substack.com/p/de-cuantica-a-codigo-cuando-la-ia</guid><dc:creator><![CDATA[Apple Coding]]></dc:creator><pubDate>Thu, 11 Dec 2025 13:05:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!oj-K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9542b972-aad5-4982-887f-22a65f4a32c6_1536x1024.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oj-K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9542b972-aad5-4982-887f-22a65f4a32c6_1536x1024.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oj-K!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9542b972-aad5-4982-887f-22a65f4a32c6_1536x1024.heic 424w, https://substackcdn.com/image/fetch/$s_!oj-K!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9542b972-aad5-4982-887f-22a65f4a32c6_1536x1024.heic 848w, https://substackcdn.com/image/fetch/$s_!oj-K!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9542b972-aad5-4982-887f-22a65f4a32c6_1536x1024.heic 1272w, https://substackcdn.com/image/fetch/$s_!oj-K!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9542b972-aad5-4982-887f-22a65f4a32c6_1536x1024.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oj-K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9542b972-aad5-4982-887f-22a65f4a32c6_1536x1024.heic" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9542b972-aad5-4982-887f-22a65f4a32c6_1536x1024.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:168621,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://applecoding.substack.com/i/181328450?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9542b972-aad5-4982-887f-22a65f4a32c6_1536x1024.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!oj-K!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9542b972-aad5-4982-887f-22a65f4a32c6_1536x1024.heic 424w, https://substackcdn.com/image/fetch/$s_!oj-K!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9542b972-aad5-4982-887f-22a65f4a32c6_1536x1024.heic 848w, https://substackcdn.com/image/fetch/$s_!oj-K!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9542b972-aad5-4982-887f-22a65f4a32c6_1536x1024.heic 1272w, https://substackcdn.com/image/fetch/$s_!oj-K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9542b972-aad5-4982-887f-22a65f4a32c6_1536x1024.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Desde un f&#237;sico cu&#225;ntico que nos cuenta c&#243;mo la IA est&#225; transformando el desarrollo, hasta los grandes rivales tecnol&#243;gicos sent&#225;ndose a crear est&#225;ndares juntos, pasando por Apple preparando eventos presenciales para ense&#241;arnos a dominar sus nuevos frameworks de IA. Y entre medias, <strong>Swift 6.2.2</strong>, los <strong>App Store Awards 2025</strong> y el <strong>Real Madrid</strong> meti&#233;ndose de lleno en la computaci&#243;n espacial. Una semana para recordar.</p><h3>Swift 6.2.2: peque&#241;os ajustes, grandes detalles</h3><p>El pasado <strong>9 de diciembre</strong> se anunci&#243; oficialmente <a href="https://forums.swift.org/t/announcing-swift-6-2-2/83637">Swift 6.2.2</a>, una actualizaci&#243;n de mantenimiento que, aunque no trae cambios revolucionarios, s&#237; incluye correcciones importantes para quienes trabajan fuera del ecosistema Apple.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://applecoding.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer Caff&#232; Swift Newsletter! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Las mejoras se centran en tres &#225;reas: un nuevo <strong>manejador de errores fatales</strong> en el m&#243;dulo Observation, correcciones en <strong>LLDB para Windows</strong> relacionadas con la b&#250;squeda de librer&#237;as Python, y mejoras en el <strong>Swift Package Manager</strong> para detectar scripts GNU ld que se presentan como librer&#237;as del sistema.</p><p>Si trabajas en Linux o Windows, actualizar es tan sencillo como:</p><pre><code><code>swiftly install 6.2.2</code></code></pre><p>O si prefieres estar siempre a la &#250;ltima:</p><pre><code><code>swiftly install latest</code></code></pre><p>Para el resto, Xcode 26 ya incluye las herramientas necesarias. Lo importante es que Swift sigue madurando como lenguaje multiplataforma, y cada versi&#243;n de mantenimiento es un paso m&#225;s en esa direcci&#243;n.</p><h3>Vision Pro: manos que cobran vida</h3><p>Apple ha actualizado su colecci&#243;n de <a href="https://developer.apple.com/documentation/visionos/introductory-visionos-samples">ejemplos introductorios para visionOS</a> con un nuevo proyecto que merece atenci&#243;n: <strong>&#8220;Animating hand models in visionOS&#8221;</strong>. Este ejemplo demuestra c&#243;mo trabajar con los modelos de manos del usuario para crear animaciones personalizadas, aprovechando el seguimiento de manos que visionOS ofrece de serie.</p><p>Para quienes est&#233;is explorando el desarrollo espacial, recordad que visionOS 26 ya soporta <strong>seguimiento de manos a 90 Hz</strong> sin c&#243;digo adicional, lo que abre posibilidades interesantes para juegos y aplicaciones que requieren movimientos r&#225;pidos y precisos.</p><p>Y hablando de Vision Pro, aunque la noticia es de hace unas semanas, no pod&#237;amos dejar de mencionarla: <strong>Real Madrid y Apple</strong> <a href="https://www.macrumors.com/2025/11/20/real-madrid-apple-immersive-vision-pro/">anunciaron una colaboraci&#243;n</a> para crear un documental inmersivo en formato <strong>Apple Immersive</strong> que se estrenar&#225; en 2026. El proyecto, que Florentino P&#233;rez ha bautizado como el <strong>&#8220;Bernab&#233;u Infinito&#8221;</strong>, se est&#225; grabando con m&#225;s de 30 c&#225;maras Blackmagic durante la actual temporada de Champions League.</p><p>Eddy Cue, vicepresidente de servicios de Apple, visit&#243; el Santiago Bernab&#233;u para cerrar el acuerdo. La idea es que los aficionados de todo el mundo puedan experimentar el ambiente del estadio como si estuvieran all&#237;, en v&#237;deo 180 grados a 8K con audio espacial. Una apuesta decidida por el contenido premium que puede marcar el camino para otros clubes y organizaciones deportivas.</p><h3>La IA que nos viene encima</h3><p>Esta semana hemos tenido el privilegio de estrenar temporada en <strong>Apple Coding</strong> con una <a href="https://cuonda.com/apple-coding/entrevista-tirso-lopez-ausens-phd-en-mecanica-cuantica-aplicada-y-technical-project-manager">entrevista muy especial</a>. <strong>Tirso L&#243;pez Ausens</strong>, doctor en Mec&#225;nica Cu&#225;ntica Aplicada por la UPV y actualmente Director T&#233;cnico de Proyectos en <strong>Multiverse Computing</strong>, nos acompa&#241;&#243; durante m&#225;s de una hora para hablar sobre el presente y futuro de la inteligencia artificial en el desarrollo de software.</p><p>La conversaci&#243;n toc&#243; temas fascinantes: desde c&#243;mo los <strong>agentes de IA</strong> est&#225;n cambiando para siempre la forma en que escribimos c&#243;digo, hasta si tiene sentido seguir estudiando programaci&#243;n en un mundo donde los modelos de lenguaje generan c&#243;digo con facilidad. Spoiler: s&#237; tiene sentido, pero por razones que quiz&#225; no esperas. Pod&#233;is ver la entrevista completa en <a href="https://youtube.com/live/ezLIz4Q9llk">YouTube</a> o escucharla en vuestro cliente de podcasts favorito.</p><p>Y si quer&#233;is profundizar en las &#250;ltimas novedades de IA, en <strong>Apple Coding Daily</strong> hemos dedicado tres episodios consecutivos a desengranar lo que est&#225; pasando:</p><ul><li><p><strong><a href="https://cuonda.com/apple-coding-daily/starflow-v-apple-rompe-las-reglas-de-la-ia-generativa-de-video">8x04 - STARFlow-V</a></strong>: Apple ha publicado investigaci&#243;n que cambia el paradigma de los modelos de difusi&#243;n para generaci&#243;n de v&#237;deo. Una forma mucho m&#225;s eficiente de crear contenido visual sint&#233;tico que podr&#237;a acabar integrada en dispositivos.</p></li><li><p><strong><a href="https://cuonda.com/apple-coding-daily/clara-asi-quiere-apple-que-la-ia-entienda-tu-codigo-de-verdad">8x05 - CLaRa</a></strong>: Los agentes de IA pierden contexto en sesiones largas de programaci&#243;n. Apple propone <strong>CLaRa</strong>, una soluci&#243;n basada en RAG (Retrieval-Augmented Generation) para que la IA entienda tu c&#243;digo de verdad, no solo las &#250;ltimas l&#237;neas que has escrito.</p></li><li><p><strong><a href="https://cuonda.com/apple-coding-daily/agentic-ai-foundation-el-estandar-que-unio-a-los-rivales-de-la-ia">8x06 - Agentic AI Foundation</a></strong>: La Linux Foundation ha anunciado una iniciativa donde <strong>los mayores rivales de la IA han decidido crear est&#225;ndares abiertos juntos</strong>. Cuando empresas que compiten ferozmente se sientan a colaborar, algo gordo est&#225; pasando.</p></li></ul><p>Pod&#233;is seguir Apple Coding Daily en <a href="https://cuonda.com/apple-coding-daily">Cuonda</a> o en <a href="https://youtube.com/@applecoding">YouTube</a>.</p><h3>Apple llega a Madrid</h3><p>Y hablando de inteligencia artificial, Apple ha confirmado que traer&#225; sus eventos presenciales <strong>&#8220;Meet with Apple&#8221;</strong> a Madrid los d&#237;as <strong>2, 3 y 4 de febrero de 2026</strong>. Se esperan dos sesiones diferenciadas:</p><ul><li><p>Una dedicada a <strong>Liquid Glass</strong>, el nuevo lenguaje de dise&#241;o que define iOS 26, iPadOS 26 y el resto de sistemas operativos. Una oportunidad &#250;nica para aprender de primera mano c&#243;mo adaptar vuestras apps al nuevo paradigma visual.</p></li><li><p>Otra centrada en el <strong>Foundation Models Framework</strong>, el framework que permite acceder al modelo de lenguaje de ~3B par&#225;metros que Apple incluye de serie en sus dispositivos. Inferencia local, gratuita, privada y sin necesidad de conexi&#243;n.</p></li></ul><p>El lugar exacto est&#225; por confirmar, pero si ten&#233;is oportunidad de asistir, no lo dud&#233;is. Estos eventos suelen tener plazas muy limitadas y la posibilidad de hablar directamente con ingenieros de Apple no tiene precio. Estad atentos al <a href="https://developer.apple.com/events/">portal de eventos de Apple Developer</a>.</p><h3>Lo mejor del a&#241;o seg&#250;n Apple</h3><p>El <strong>4 de diciembre</strong>, Apple anunci&#243; los <a href="https://www.apple.com/newsroom/2025/12/apple-unveils-the-winners-of-the-2025-app-store-awards/">ganadores de los App Store Awards 2025</a>. 17 apps y juegos reconocidos por su innovaci&#243;n t&#233;cnica e impacto cultural. Algunos destacados:</p><p><strong>Apps del a&#241;o:</strong></p><ul><li><p><strong>iPhone</strong>: Tiimo, una app de planificaci&#243;n que convierte calendarios ca&#243;ticos en l&#237;neas de tiempo visuales y relajantes.</p></li><li><p><strong>iPad</strong>: Detail, herramientas de edici&#243;n de v&#237;deo con IA que democratizan la producci&#243;n audiovisual.</p></li><li><p><strong>Mac</strong>: Essayist, para estudiantes e investigadores que necesitan organizar fuentes y formatear trabajos acad&#233;micos.</p></li><li><p><strong>Vision Pro</strong>: Explore POV, experiencias inmersivas que te transportan a playas, bosques y ciudades del mundo.</p></li><li><p><strong>Apple Watch</strong>: Strava, conectando a la comunidad global de atletas con seguimiento en tiempo real.</p></li></ul><p><strong>Juegos del a&#241;o:</strong></p><ul><li><p><strong>iPhone</strong>: Pok&#233;mon TCG Pocket, la evoluci&#243;n del fen&#243;meno de cartas coleccionables.</p></li><li><p><strong>iPad</strong>: DREDGE, pesca y horror c&#243;smico en un juego que define el g&#233;nero &#8220;cozy creepy&#8221;.</p></li><li><p><strong>Mac</strong>: Cyberpunk 2077 Ultimate Edition, demostrando que Apple Silicon puede con todo.</p></li><li><p><strong>Vision Pro</strong>: Porta Nubi, puzzles atmosf&#233;ricos entre las nubes.</p></li></ul><p>Y menci&#243;n especial para los premios de <strong>Impacto Cultural</strong>, donde destaca <strong>Be My Eyes</strong>, que combina IA y voluntarios para ayudar a personas ciegas o con baja visi&#243;n. Tecnolog&#237;a con prop&#243;sito.</p><h3>Tutoriales de la comunidad</h3><p>La comunidad Swift no descansa ni en diciembre. Aqu&#237; van los art&#237;culos m&#225;s destacados de la semana:</p><p><strong>Antoine van der Lee</strong> en SwiftLee nos regala dos piezas imprescindibles:</p><ul><li><p><a href="https://www.avanderlee.com/optimization/battery-life-on-ios-and-the-myth-of-killing-apps/">Battery life on iOS and the myth of killing apps</a> (9 dic): Desmontando el mito de que cerrar apps ahorra bater&#237;a. Spoiler: no solo no ahorra, sino que puede empeorar las cosas.</p></li><li><p><a href="https://www.avanderlee.com/xcode/the-7-changes-i-do-for-every-new-xcode-project/">The 7 changes I do for every new Xcode project</a> (1 dic): Esos ajustes que todo proyecto deber&#237;a tener desde el principio.</p></li></ul><p><strong>Majid Jabrayilov</strong> en Swift with Majid:</p><ul><li><p><a href="https://swiftwithmajid.com/2025/12/09/monitoring-app-performance-with-metrickit/">Monitoring app performance with MetricKit</a> (9 dic): C&#243;mo usar MetricKit para construir tu propio panel de diagn&#243;stico y resolver problemas que Xcode Organizer no puede detectar.</p></li></ul><p><strong>Natalia Panferova</strong> en Nil Coalescing con dos tutoriales muy pr&#225;cticos:</p><ul><li><p><a href="https://nilcoalescing.com/blog/AddAnInnerShadowToASymbolImageInSwiftUI/">Add an inner shadow to a symbol image in SwiftUI</a> (9 dic): C&#243;mo crear ese efecto de icono recortado con sombra interior usando SF Symbols.</p></li><li><p><a href="https://nilcoalescing.com/blog/InitializingObservableClassesWithinTheSwiftUIHierarchy/">Initializing @Observable classes within the SwiftUI hierarchy</a> (2 dic): Las formas correctas (e incorrectas) de inicializar clases @Observable en vistas SwiftUI.</p></li></ul><h3>Aprende a tu ritmo</h3><p>Si 2025 te pill&#243; sin tiempo para formarte, 2026 puede ser tu a&#241;o. En <strong>Be Native</strong> ya tenemos disponibles los cursos completos de <strong>Swift B&#225;sico e Intermedio</strong> y <strong>SwiftUI B&#225;sico e Intermedio</strong>, impartidos por <strong>Mar&#237;a Soriano</strong>.</p><p>Lo mejor de estos cursos es que puedes seguirlos tanto con <strong>Xcode</strong> en tu Mac como con <strong>Swift Playgrounds en tu iPad</strong>. Aprender Swift mientras viajas en metro o te tomas un caf&#233; en cualquier sitio ya no es ciencia ficci&#243;n.</p><p>Mar&#237;a es una formadora excepcional con m&#225;s de 123.000 suscriptores en su <a href="https://www.youtube.com/@soriano_maria">canal de YouTube</a> y a&#241;os de experiencia creando contenido educativo sobre Swift y SwiftUI. Pod&#233;is conocer m&#225;s sobre ella en su <a href="https://www.linkedin.com/in/sorianom/">perfil de LinkedIn</a>.</p><p>Y si lo que buscas es dar el salto definitivo, el <a href="https://acoding.academy/smp26">Swift Mastery Program 2026</a> ya tiene matriculaci&#243;n abierta. Una formaci&#243;n intensiva donde no solo aprender&#225;s las herramientas, sino que entender&#225;s el porqu&#233; detr&#225;s de cada decisi&#243;n. Porque en un mundo de agentes de IA que generan c&#243;digo, quien entiende los fundamentos siempre estar&#225; un paso por delante.</p><h3>Y poco m&#225;s</h3><p>Cerramos con una nota regulatoria: desde el <strong>10 de diciembre</strong>, la nueva ley australiana exige que las plataformas de redes sociales impidan que menores de 16 a&#241;os tengan cuentas. Apple ha puesto a disposici&#243;n de los desarrolladores la <strong>Declared Age Range API</strong> para facilitar el cumplimiento manteniendo los est&#225;ndares de privacidad. Si tu app tiene usuarios en Australia, es momento de revisar la <a href="https://developer.apple.com/documentation/declaredagerange">documentaci&#243;n</a>.</p><p>Ha sido una semana intensa, de esas que te recuerdan por qu&#233; este ecosistema nunca deja de sorprender. Swift madurando en todas las plataformas, Vision Pro recibiendo contenido premium, la IA redefiniendo c&#243;mo trabajamos, y Apple prepar&#225;ndose para visitarnos en persona. 2026 promete.</p><p>Si quer&#233;is dejarnos un comentario o contarnos cualquier cosa, estamos en los canales habituales.</p><p><strong>Nos leemos pronto y hasta entonces: un saludo y buen c&#243;digo nativo.</strong></p><p>&#161;Gracias por leer nuestra Newsletter! Nos vemos en <a href="https://benative.dev/es">Be Native</a>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://applecoding.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer Caff&#232; Swift Newsletter! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Swift 6.3 ya asoma por el horizonte]]></title><description><![CDATA[Os contamos las novedades del lenguaje, del desarrollo Apple y los mejores tutoriales para ponerse al d&#237;a.]]></description><link>https://applecoding.substack.com/p/swift-63-ya-asoma-por-el-horizonte</link><guid isPermaLink="false">https://applecoding.substack.com/p/swift-63-ya-asoma-por-el-horizonte</guid><dc:creator><![CDATA[Apple Coding]]></dc:creator><pubDate>Sat, 06 Dec 2025 19:56:15 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!uFFA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6e3c9c-fb1c-40c1-a562-4dd33e9413c6_1536x1024.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uFFA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6e3c9c-fb1c-40c1-a562-4dd33e9413c6_1536x1024.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uFFA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6e3c9c-fb1c-40c1-a562-4dd33e9413c6_1536x1024.heic 424w, https://substackcdn.com/image/fetch/$s_!uFFA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6e3c9c-fb1c-40c1-a562-4dd33e9413c6_1536x1024.heic 848w, https://substackcdn.com/image/fetch/$s_!uFFA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6e3c9c-fb1c-40c1-a562-4dd33e9413c6_1536x1024.heic 1272w, https://substackcdn.com/image/fetch/$s_!uFFA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6e3c9c-fb1c-40c1-a562-4dd33e9413c6_1536x1024.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uFFA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6e3c9c-fb1c-40c1-a562-4dd33e9413c6_1536x1024.heic" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5a6e3c9c-fb1c-40c1-a562-4dd33e9413c6_1536x1024.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:180393,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://applecoding.substack.com/i/180907164?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6e3c9c-fb1c-40c1-a562-4dd33e9413c6_1536x1024.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uFFA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6e3c9c-fb1c-40c1-a562-4dd33e9413c6_1536x1024.heic 424w, https://substackcdn.com/image/fetch/$s_!uFFA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6e3c9c-fb1c-40c1-a562-4dd33e9413c6_1536x1024.heic 848w, https://substackcdn.com/image/fetch/$s_!uFFA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6e3c9c-fb1c-40c1-a562-4dd33e9413c6_1536x1024.heic 1272w, https://substackcdn.com/image/fetch/$s_!uFFA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a6e3c9c-fb1c-40c1-a562-4dd33e9413c6_1536x1024.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Entramos en la recta final de 2025 con el ecosistema Apple m&#225;s activo que nunca. Esta semana nos trae <strong>Embedded Swift</strong> prepar&#225;ndose para su debut en Swift 6.3, Apple presentando investigaci&#243;n de vanguardia en <strong>NeurIPS 2025</strong>, y los finalistas de los <strong>App Store Awards</strong> calentando motores para la gala. Pero si algo define esta temporada, es la sensaci&#243;n de que las piezas del puzzle de la <strong>concurrencia accesible</strong> por fin empiezan a encajar.</p><p>Y hablando de encajar piezas, esta semana hemos tenido el privilegio de despedir a <strong>38 nuevos desarrolladores</strong> que han completado el <strong>Swift Developer Program</strong>. Semanas de formaci&#243;n intensiva donde han adquirido una base s&#243;lida en Swift, SwiftUI, arquitecturas y buenas pr&#225;cticas. Lo m&#225;s valioso que se llevan no son las herramientas que han aprendido a usar, sino el <strong>conocimiento profundo</strong> del lenguaje y sus fundamentos. En un mundo donde los LLMs generan c&#243;digo a golpe de prompt, quien entiende el <em>porqu&#233;</em> detr&#225;s de cada l&#237;nea siempre estar&#225; un paso por delante. Enhorabuena a todos ellos, el camino acaba de empezar.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://applecoding.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer Caff&#232; Swift Newsletter! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3>Embedded Swift despega con Swift 6.3</h3><p>El 17 de noviembre, el equipo de Swift anunci&#243; las <a href="https://www.swift.org/blog/embedded-swift-improvements-coming-in-swift-6.3/">mejoras que llegar&#225;n a Embedded Swift con la versi&#243;n 6.3</a>. Para quien no lo conozca, Embedded Swift es un subconjunto del lenguaje dise&#241;ado para entornos con <strong>recursos limitados</strong>: microcontroladores, sistemas embebidos, y todo ese universo donde cada kilobyte cuenta.</p><p>Lo interesante es que la gran mayor&#237;a del lenguaje Swift funciona exactamente igual en modo embebido. La diferencia est&#225; en el compilador, que genera <strong>binarios significativamente m&#225;s peque&#241;os</strong> que la compilaci&#243;n est&#225;ndar. Hasta ahora, poner Swift en un microcontrolador requer&#237;a magia negra y paciencia infinita. Con Swift 6.3, tener Embedded Swift como parte de los <em>nightly builds</em> y eventualmente de la release estable es un <strong>salto cualitativo</strong> para quienes trabajan en IoT o sistemas de bajo nivel.</p><h3>Concurrencia que no asusta</h3><p>Una de las barreras de entrada a Swift moderno ha sido la concurrencia. El modelo de actores y <code>async/await</code> es potente, pero para muchos desarrolladores venidos de otros mundos resultaba intimidante. <strong>Antoine van der Lee</strong> public&#243; esta semana una <a href="https://www.avanderlee.com/">gu&#237;a sobre Approachable Concurrency en Swift 6.2</a> que promete cambiar eso.</p><p>Swift 6.2 introduce mejoras pensadas para hacer la concurrencia m&#225;s <strong>accesible</strong> sin sacrificar seguridad. El objetivo es claro: que escribir c&#243;digo concurrente correcto sea tan natural como escribir c&#243;digo s&#237;ncrono. Los <em>data races</em> siguen siendo el enemigo, pero ahora tenemos mejores armas para combatirlos sin necesidad de un doctorado en sistemas distribuidos.</p><p>Si a&#250;n no has dado el salto a la concurrencia moderna, este es el momento. Y si quieres profundizar en c&#243;mo aplicar estas t&#233;cnicas junto con herramientas de IA para el desarrollo, la formaci&#243;n <a href="https://acoding.academy/smp26">Swift IA Mastery Program</a> te dar&#225; las claves para dominar tanto el c&#243;digo como las herramientas que lo potencian.</p><h3>SwiftUI se viste de Liquid Glass</h3><p>iOS 26 trajo consigo la interfaz <strong>Liquid Glass</strong> y SwiftUI ha recibido su correspondiente dosis de novedades. Paul Hudson ha publicado su ya tradicional <a href="https://www.hackingwithswift.com/articles/278/whats-new-in-swiftui-for-ios-26">What&#8217;s new in SwiftUI for iOS 26</a> y hay material para entretenerse:</p><ul><li><p><strong>WebView nativo</strong>: Por fin podemos incrustar contenido web sin recurrir a UIKit. Adi&#243;s al <code>UIViewRepresentable</code> con <code>WKWebView</code>.</p></li><li><p><strong>Rich Text Editing</strong>: <code>TextEditor</code> ahora soporta <code>AttributedString</code> para edici&#243;n de texto enriquecido real.</p></li><li><p><strong>Macro @Animatable</strong>: Animar vistas y modificadores personalizados nunca fue tan sencillo.</p></li><li><p><strong>TabView minimizable</strong>: La barra de pesta&#241;as puede minimizarse al hacer scroll, siguiendo la filosof&#237;a de Liquid Glass.</p></li><li><p><strong>openURL con navegador integrado</strong>: Ya no es necesario expulsar al usuario a Safari para mostrar un enlace.</p></li></ul><p>Las etiquetas de &#237;ndice en secciones de listas y el ancho fijo para iconos en <code>Label</code> pueden parecer menores, pero son de esas mejoras que te hacen pensar &#8220;&#191;C&#243;mo hemos vivido sin esto?&#8221;.</p><div><hr></div><p><strong>&#191;Te est&#225; gustando esta newsletter?</strong> Es solo una peque&#241;a parte de lo que encontrar&#225;s en <strong><a href="https://benative.dev/">Be Native</a></strong>, la app donde aprender Swift y desarrollo iOS en espa&#241;ol. Podcasts, v&#237;deos, cursos, snippets y art&#237;culos organizados en rutas de aprendizaje desde iniciaci&#243;n hasta nivel experto. Adem&#225;s, podr&#225;s guardar tus favoritos, crear cuadernos digitales y marcar el momento exacto de cada v&#237;deo para volver cuando lo necesites. <strong><a href="https://benative.dev/">Descarga Be Native</a></strong> y lleva tu formaci&#243;n como desarrollador Apple al siguiente nivel.</p><div><hr></div><h3>Apple en NeurIPS 2025: MLX y el M5</h3><p>La conferencia <strong>NeurIPS 2025</strong> est&#225; a la vuelta de la esquina y Apple llega cargada de <a href="https://machinelearning.apple.com/">investigaci&#243;n en machine learning</a>. Entre los trabajos destacados, nos llama especialmente la atenci&#243;n <strong>ExpertLens</strong>, que explora c&#243;mo las caracter&#237;sticas de <em>activation steering</em> en modelos de lenguaje son altamente interpretables.</p><p>Pero el art&#237;culo que m&#225;s nos ha hecho salivar es <a href="https://machinelearning.apple.com/">Exploring LLMs with MLX and the Neural Accelerators in the M5 GPU</a>. El framework <strong>MLX</strong> sigue evolucionando como la herramienta de referencia para experimentar con t&#233;cnicas de inferencia en Apple Silicon. Y s&#237;, has le&#237;do bien: <strong>M5 GPU</strong>. Los aceleradores neurales de la nueva generaci&#243;n de chips prometen llevar la ejecuci&#243;n local de modelos a otro nivel.</p><p>La investigaci&#243;n de Apple en ML no es solo acad&#233;mica. Todo esto acaba aterrizando en Core ML, Create ML y las capacidades de Apple Intelligence que usamos cada d&#237;a. Entender c&#243;mo funciona por dentro nos hace mejores desarrolladores.</p><h3>Mini Apps: Apple abre una nueva puerta</h3><p>El 13 de noviembre, Apple anunci&#243; el <a href="https://developer.apple.com/news/">Mini Apps Partner Program</a>. Se trata de un programa para apps construidas con <strong>tecnolog&#237;as web</strong> que ofrece una comisi&#243;n reducida del <strong>15%</strong> en compras In-App si se implementan las APIs de comercio y verificaci&#243;n de edad requeridas.</p><p>Si tienes dudas, en Apple Coding Daily te lo contamos y qu&#233; supone eso para los modelos de negocio en el App Store. Puedes <a href="https://cuonda.com/apple-coding-daily/la-revolucion-silenciosa-de-apple-mini-apps-y-el-nuevo-app-store">o&#237;rlo aqu&#237;</a> o <a href="https://www.youtube.com/watch?v=6d2rZFTq4wg">verlo aqu&#237;</a>.</p><p>Junto a esto, las <strong>App Review Guidelines</strong> recibieron una actualizaci&#243;n importante: requisitos de restricci&#243;n de edad para apps de creadores, l&#237;mites de APR del 36% para apps de pr&#233;stamos, y prohibici&#243;n de usar iconos de competidores sin aprobaci&#243;n. Si publicas en la App Store, es lectura obligada.</p><h3>Texas entra en juego</h3><p>A partir del <strong>1 de enero de 2026</strong>, la ley <strong>Texas SB2420</strong> exigir&#225; verificaci&#243;n de edad para la descarga de apps. Apple proporcionar&#225; la <strong>Declared Age Range API</strong> para ayudar a los desarrolladores a cumplir manteniendo los est&#225;ndares de privacidad. Si tu app tiene usuarios en Texas, es momento de empezar a planificar.</p><h3>Un caf&#233; con c&#243;digo</h3><p>El <a href="https://www.swift.org/blog/">SDK de Temporal para Swift</a> ya est&#225; disponible como proyecto open source. Temporal permite construir <strong>workflows duraderos y confiables</strong> que sobreviven a fallos, reinicios y despliegues. Si trabajas con sistemas distribuidos o procesos de larga duraci&#243;n, merece un vistazo:</p><pre><code><code>import Temporal

@WorkflowDefinition
struct OrderProcessingWorkflow {
    @WorkflowQuery
    var status: OrderStatus = .pending

    @WorkflowMain
    func run(orderId: String) async throws -&gt; OrderResult {
        // Los workflows de Temporal sobreviven a reinicios
        let payment = try await PaymentActivity.processPayment(orderId: orderId)
        status = .paymentProcessed

        let shipping = try await ShippingActivity.scheduleShipment(orderId: orderId)
        status = .shipped

        return OrderResult(payment: payment, shipping: shipping)
    }
}</code></code></pre><p>La idea es simple pero potente: defines tu l&#243;gica de negocio como c&#243;digo Swift normal, y Temporal se encarga de la durabilidad, los reintentos y la recuperaci&#243;n ante fallos.</p><h3>ServerSide.swift 2025 ya tiene v&#237;deos</h3><p>Para los amantes del Swift en servidor, los <a href="https://www.youtube.com/playlist?list=PLTFt3GGfH3hl2rTYswjVXCaNvXmafQ3bt">v&#237;deos de la conferencia ServerSide.swift 2025</a> ya est&#225;n disponibles en YouTube. Desde Vapor hasta Hummingbird, pasando por casos de uso en producci&#243;n, hay material para varias tardes de aprendizaje.</p><h3>Y poco m&#225;s</h3><p>Cerramos esta &#250;ltima semana de noviembre con la sensaci&#243;n de que Swift sigue madurando en todas las direcciones: sistemas embebidos, concurrencia accesible, interfaces de cristal l&#237;quido, y ML de vanguardia. El ecosistema nunca ha sido tan rico ni ha ofrecido tantas posibilidades.</p><p>A los 38 compa&#241;eros que acaban de graduarse del Swift Developer Program: el conocimiento que hab&#233;is adquirido es vuestro superpoder. Los LLMs pueden generar c&#243;digo, pero solo quien entiende los fundamentos puede evaluar si ese c&#243;digo es correcto, eficiente y mantenible. Seguid aprendiendo, seguid preguntando, seguid rompiendo cosas para entender c&#243;mo funcionan.</p><p>Si quer&#233;is dejarnos un comentario o contarnos cualquier cosa, estamos encantados de leeros.</p><p><strong>Nos leemos pronto y hasta entonces: un saludo y buen c&#243;digo nativo.</strong></p><p>&#161;Gracias por leer nuestra Newsletter! Nos vemos en Be Native.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://applecoding.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer Caff&#232; Swift Newsletter! Suscr&#237;bete gratis para recibir nuevos posts y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Si bastasen un par de newsletters... para resumir una WWDC]]></title><description><![CDATA[Como nuestro caf&#233;, la conferencia ha venido cargada as&#237; que vamos a intentar poner un poco de orden para no atragantarnos. &#161;Divide y vencer&#225;s!]]></description><link>https://applecoding.substack.com/p/si-bastasen-un-par-de-newsletters</link><guid isPermaLink="false">https://applecoding.substack.com/p/si-bastasen-un-par-de-newsletters</guid><dc:creator><![CDATA[Apple Coding]]></dc:creator><pubDate>Wed, 19 Jun 2024 11:57:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!fHes!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc202f9a2-06c5-4f8a-8f88-e5872703c3c8_1792x1024.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fHes!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc202f9a2-06c5-4f8a-8f88-e5872703c3c8_1792x1024.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fHes!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc202f9a2-06c5-4f8a-8f88-e5872703c3c8_1792x1024.heic 424w, https://substackcdn.com/image/fetch/$s_!fHes!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc202f9a2-06c5-4f8a-8f88-e5872703c3c8_1792x1024.heic 848w, https://substackcdn.com/image/fetch/$s_!fHes!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc202f9a2-06c5-4f8a-8f88-e5872703c3c8_1792x1024.heic 1272w, https://substackcdn.com/image/fetch/$s_!fHes!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc202f9a2-06c5-4f8a-8f88-e5872703c3c8_1792x1024.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fHes!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc202f9a2-06c5-4f8a-8f88-e5872703c3c8_1792x1024.heic" width="1456" height="832" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c202f9a2-06c5-4f8a-8f88-e5872703c3c8_1792x1024.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:832,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:140746,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fHes!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc202f9a2-06c5-4f8a-8f88-e5872703c3c8_1792x1024.heic 424w, https://substackcdn.com/image/fetch/$s_!fHes!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc202f9a2-06c5-4f8a-8f88-e5872703c3c8_1792x1024.heic 848w, https://substackcdn.com/image/fetch/$s_!fHes!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc202f9a2-06c5-4f8a-8f88-e5872703c3c8_1792x1024.heic 1272w, https://substackcdn.com/image/fetch/$s_!fHes!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc202f9a2-06c5-4f8a-8f88-e5872703c3c8_1792x1024.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Esta semana ha sido <strong>LA</strong> semana. Una Worldwide Developer Conference claramente dividida en <strong>2 partes</strong>: una fue <strong>evoluci&#243;n</strong> de los sistemas operativos y otra, la manera en que Apple integrar&#225; la <strong>Inteligencia Artificial</strong> en ellos. El ritmo fue, como viene siendo habitual los &#250;ltimos a&#241;os, bastante <strong>fren&#233;tico</strong> debido a la cantidad de cosas que quisieron ense&#241;arnos.</p><p>Respecto a las novedades <strong>evolutivas</strong>, bastantes, no de un calado excesivamente profundo, pero si orientadas a que nuestros dispositivos sean m&#225;s <strong>personales</strong>. Nuestra idea es que se trataba del <strong>camino a seguir</strong> desde hace tiempo, cumplir un <em>roadmap</em> que bien pudo ser dise&#241;ado hace a&#241;os. La diferencia con lo que vino a continuaci&#243;n, significa que la <strong>irrupci&#243;n</strong> de la IA le hizo a Apple ponerse la pilas. Creo que el llevarlo de forma paralela ser&#225; todo un acierto, una cosa son los nuevos sistemas y otro la capa de <strong>Apple Intelligence</strong>. Una IA integrada que ser&#225; tambi&#233;n muy personal al contar acceso a los datos que tienes en tus dispositivos, y los cruza para proporcionar una informaci&#243;n <strong>tan valiosa como precisa</strong>. Pero tranquilo, <s>Todo</s> casi todo, pasa en tu iPhone. Muy buena pinta, pero: <strong>en beta y en ingl&#233;s</strong> a partir de oto&#241;o. Las cosas de palacio van despacio. Y seg&#250;n rumores con lista de espera.</p><p>Un apunte que no podemos dejar pasar antes de entrar en harina: casi la gran mayor&#237;a de las novedades presentadas est&#225; <strong>accesibles mediante APIs</strong> para ser incorporadas por los desarrolladores. Algo que, si bien empieza a ser tendencia, sol&#237;a no ser as&#237; hace unos a&#241;os. Demos gracias a Jobs, o quiz&#225;s todo lo contrario&#8230; &#129300;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uUMO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcd21ca9-26b9-4a85-b727-86499741a7c8_1456x816.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uUMO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcd21ca9-26b9-4a85-b727-86499741a7c8_1456x816.heic 424w, https://substackcdn.com/image/fetch/$s_!uUMO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcd21ca9-26b9-4a85-b727-86499741a7c8_1456x816.heic 848w, https://substackcdn.com/image/fetch/$s_!uUMO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcd21ca9-26b9-4a85-b727-86499741a7c8_1456x816.heic 1272w, https://substackcdn.com/image/fetch/$s_!uUMO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcd21ca9-26b9-4a85-b727-86499741a7c8_1456x816.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uUMO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcd21ca9-26b9-4a85-b727-86499741a7c8_1456x816.heic" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fcd21ca9-26b9-4a85-b727-86499741a7c8_1456x816.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:215770,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uUMO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcd21ca9-26b9-4a85-b727-86499741a7c8_1456x816.heic 424w, https://substackcdn.com/image/fetch/$s_!uUMO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcd21ca9-26b9-4a85-b727-86499741a7c8_1456x816.heic 848w, https://substackcdn.com/image/fetch/$s_!uUMO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcd21ca9-26b9-4a85-b727-86499741a7c8_1456x816.heic 1272w, https://substackcdn.com/image/fetch/$s_!uUMO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcd21ca9-26b9-4a85-b727-86499741a7c8_1456x816.heic 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Organizaci&#243;n por favor</h3><p>Apple lleva tiempo haciendo cambios en cuanto a la <strong>documentaci&#243;n</strong>. Desde el lanzamiento de librer&#237;as para <a href="https://www.swift.org/documentation/docc/">crearla, organizarla y publicarla</a> hasta integraci&#243;n con servicios para descubrir <a href="https://swiftpackageindex.com">paquetes interesantes</a> desarrollados por la comunidad. Esta vez ha sido un <strong>lavado de cara</strong> del punto de encuentro de <a href="https://developer.apple.com/documentation/">toda la documentaci&#243;n para desarrolladores</a> de sus sistemas. M&#225;s all&#225; de retoques, tiene una landing de entrada que promete no ser s&#243;lo bonita sino tambi&#233;n pr&#225;ctica para <strong>descubrir y encontrar</strong> documentaci&#243;n.</p><p>Tenemos una <strong>mudanza</strong>. Y no peque&#241;a, porque toda la estructura del proyecto Open Source de <a href="https://www.swift.org/blog/swiftlang-github/?utm_campaign=iOS%20Dev%20Weekly&amp;utm_medium=web&amp;utm_source=iOS%20Dev%20Weekly%20Issue%20665">Swift en GitHub</a>, pasa a estar bajo el paraguas de la organizaci&#243;n <em>swiftlang.</em> Ya no depender&#225; por tanto, de la misma estructura que el propio software de Apple. Desconocemos las implicaciones internas, pero nuestra intuici&#243;n es que es algo m&#225;s <strong>legal y organizativo</strong> que funcional ya que Apple no cambia su <strong>implicaci&#243;n</strong> en el proyecto.</p><h3>SwiftUI es lo suficientemente maduro para seguir evolucionando</h3><p>Si fren&#233;ticas fueron las charlas inaugurales, no lo son menos los <em>What&#8217;s new</em> de los grandes frameworks. Especialmente <strong>denso</strong>, fue el de <a href="https://www.youtube.com/watch?v=CNMRV0F0w74&amp;pp=ygUVd2hhdCdzIG5ldyBpbiBTd2lmdFVJ">SwiftUI</a>. Nada del otro jueves, pero muchos <strong>peque&#241;os detalles</strong>, por lo que este v&#237;deo es un resumen que te recomienda acudir a otros, donde cuentan las novedades con m&#225;s detenimiento. Hay que tom&#225;rselo con <strong>calma</strong>, es <strong>mucho contenido</strong> y ya sabemos que no siempre es posible aplicarlo los primeros d&#237;as. </p><p>No sabemos si es la flexibilidad del framework o simplemente que a&#250;n est&#225; <a href="https://www.donnywals.com/using-ios-18s-new-tabview-with-a-sidebar/">refinando comportamientos</a>, pero hay <strong>varios cambios en la forma de construir aplicaciones</strong>. Afortunadamente, no rompen lo anterior as&#237; que <em>keep calm and @available</em>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OHO4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2d72c0a-7410-413f-add5-f9a79931f6e2_1456x816.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OHO4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2d72c0a-7410-413f-add5-f9a79931f6e2_1456x816.heic 424w, https://substackcdn.com/image/fetch/$s_!OHO4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2d72c0a-7410-413f-add5-f9a79931f6e2_1456x816.heic 848w, https://substackcdn.com/image/fetch/$s_!OHO4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2d72c0a-7410-413f-add5-f9a79931f6e2_1456x816.heic 1272w, https://substackcdn.com/image/fetch/$s_!OHO4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2d72c0a-7410-413f-add5-f9a79931f6e2_1456x816.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OHO4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2d72c0a-7410-413f-add5-f9a79931f6e2_1456x816.heic" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e2d72c0a-7410-413f-add5-f9a79931f6e2_1456x816.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:184396,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!OHO4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2d72c0a-7410-413f-add5-f9a79931f6e2_1456x816.heic 424w, https://substackcdn.com/image/fetch/$s_!OHO4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2d72c0a-7410-413f-add5-f9a79931f6e2_1456x816.heic 848w, https://substackcdn.com/image/fetch/$s_!OHO4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2d72c0a-7410-413f-add5-f9a79931f6e2_1456x816.heic 1272w, https://substackcdn.com/image/fetch/$s_!OHO4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2d72c0a-7410-413f-add5-f9a79931f6e2_1456x816.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Una librer&#237;a para testearlos a todos</h3><p>Hay un muchachito <strong>nuevo</strong> en el barrio. Ya os adelantamos en su d&#237;a, que dentro del proyecto de Swift, se estaba gestando un proyecto para crear una <strong>librer&#237;a de testing</strong> m&#225;s moderna que los XCTest, basada en <em>macros</em> y usando todas la capacidades del <strong>lenguaje Swift</strong>. Ha culminado en el framework <a href="https://www.youtube.com/watch?v=WFnkNcvLnCI&amp;pp=ygUMc3dpZnR0ZXN0aW5n">Swift Testing</a> y presentada en esta WWDC. Ejecuci&#243;n en <strong>paralelo</strong> por defecto, una sintaxis bastante sencilla para las comprobaciones, declaraci&#243;n de <strong>m&#250;ltiples entradas</strong>&#8230; una maravilla oiga.</p><p>Lo mejor de todo, por si lo anterior fuese poco, es que ser&#225; compatible <strong>desde Xcode 16</strong> en adelante. Da igual que tu aplicaci&#243;n corra en sistemas anteriores a los presentados, que al ser algo a nivel lenguaje no habr&#225; problema. Y puede coexistir con los planes de existentes. Porque testar tambi&#233;n puede ser <strong>divertido</strong>. Y recuerda: este es el nuevo sistema de test unitarios por defecto en Xcode 16. &#191;Sigue funcionando XCTest? S&#237;, claro. Pero si creamos un nuevo proyecto usar&#225; la nueva librer&#237;a Testing que ya est&#225; cargada y forma parte del conjunto de Cocoa y Cocoa Touch.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="http://acoding.academy/vdp24" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!s_mo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8603f12-aa25-479e-a156-36ac1cc703d9_1456x596.heic 424w, https://substackcdn.com/image/fetch/$s_!s_mo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8603f12-aa25-479e-a156-36ac1cc703d9_1456x596.heic 848w, https://substackcdn.com/image/fetch/$s_!s_mo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8603f12-aa25-479e-a156-36ac1cc703d9_1456x596.heic 1272w, https://substackcdn.com/image/fetch/$s_!s_mo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8603f12-aa25-479e-a156-36ac1cc703d9_1456x596.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!s_mo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8603f12-aa25-479e-a156-36ac1cc703d9_1456x596.heic" width="1456" height="596" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d8603f12-aa25-479e-a156-36ac1cc703d9_1456x596.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:596,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:59056,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:&quot;http://acoding.academy/vdp24&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!s_mo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8603f12-aa25-479e-a156-36ac1cc703d9_1456x596.heic 424w, https://substackcdn.com/image/fetch/$s_!s_mo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8603f12-aa25-479e-a156-36ac1cc703d9_1456x596.heic 848w, https://substackcdn.com/image/fetch/$s_!s_mo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8603f12-aa25-479e-a156-36ac1cc703d9_1456x596.heic 1272w, https://substackcdn.com/image/fetch/$s_!s_mo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8603f12-aa25-479e-a156-36ac1cc703d9_1456x596.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Con la concurrencia hemos topado: Swift 6 no es tan fiero como lo pintan</h3><p>El miedo a la comprobaci&#243;n estricta de concurrencia, y a los <strong>avisos</strong> que aparecieron cuando adoptaste Swift 5.10 en tu proyecto, debe desaparecer. Los porqu&#233;s son varios. Algunos de estos avisos ahora ser&#225;n <strong>errores</strong>, pero otros ya no porque el compilador a mejorado para analizar flujos y evitar <strong>falsos positivos</strong>. Otra ventaja es que se puede actualizar un proyecto a Swift 6 sin activar la comprobaci&#243;n si necesitas <a href="https://www.hackingwithswift.com/articles/269/whats-new-in-swift-6">utilizar otras caracter&#237;sticas desde el primer d&#237;a</a>. Incluso permite <strong>migrar librer&#237;a</strong> a librer&#237;a por si el proveedor de turno est&#225; perezoso. </p><p>Se trata de un nuevo modo del lenguaje, como se hiciera en alguna versi&#243;n anterior que inclu&#237;a cambios importantes. Esto permite realizar migraciones paso a paso y paquete a paquete. El golpe <strong>no ha sido tan duro</strong> y sin duda, un c&#243;digo libre de <em>data races</em> es mucho m&#225;s <strong>robusto y predecible</strong>. Recuerda que, aunque en Swift 5.9 y anteriores no se <strong>mostrasen</strong> estos errores, no significa que no estuvieran ah&#237;.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uDeC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21d3d45c-8fbd-4e87-ab67-99a47531dee0_1456x816.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uDeC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21d3d45c-8fbd-4e87-ab67-99a47531dee0_1456x816.heic 424w, https://substackcdn.com/image/fetch/$s_!uDeC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21d3d45c-8fbd-4e87-ab67-99a47531dee0_1456x816.heic 848w, https://substackcdn.com/image/fetch/$s_!uDeC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21d3d45c-8fbd-4e87-ab67-99a47531dee0_1456x816.heic 1272w, https://substackcdn.com/image/fetch/$s_!uDeC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21d3d45c-8fbd-4e87-ab67-99a47531dee0_1456x816.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uDeC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21d3d45c-8fbd-4e87-ab67-99a47531dee0_1456x816.heic" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/21d3d45c-8fbd-4e87-ab67-99a47531dee0_1456x816.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:182502,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uDeC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21d3d45c-8fbd-4e87-ab67-99a47531dee0_1456x816.heic 424w, https://substackcdn.com/image/fetch/$s_!uDeC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21d3d45c-8fbd-4e87-ab67-99a47531dee0_1456x816.heic 848w, https://substackcdn.com/image/fetch/$s_!uDeC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21d3d45c-8fbd-4e87-ab67-99a47531dee0_1456x816.heic 1272w, https://substackcdn.com/image/fetch/$s_!uDeC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21d3d45c-8fbd-4e87-ab67-99a47531dee0_1456x816.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Teatro de variedades</h3><p>Una de las APIs que m&#225;s <strong>protagonismo</strong> ha tenido es la de <a href="https://www.youtube.com/watch?v=UDaNFV1Ll3E">animaciones y transiciones</a>. Mucha tela que cortar: empezando por un nuevo tipo de <strong>navegaci&#243;n de pilas</strong>, se le suma la unificaci&#243;n de las <strong>animaciones</strong> entre plataformas (las de SwiftUI est&#225; disponibles en UIKit y AppKit). Por si fuese poco, se le unen nuevas <strong>transiciones</strong> y mayor control sobre las mismas en nuestros queridos <a href="https://nilcoalescing.com/blog/EnhancedReplaceTransitionForSFSymbolsInIOS18/">SF Symbols</a>. Todo un lujo para nuestra vista, y para nuestro c&#243;digo.</p><p>Las <em>preview</em> tambi&#233;n se encuentran entras las funcionalidades agraciadas con novedades y mejoras. Una de ellas es <a href="https://www.avanderlee.com/swiftui/previewable-macro-usage-in-previews/">un nuevo modificador</a> que permite crear <strong>variables de estado</strong>, ya no tendremos que crear vistas embebidas y otros experimentos. Adem&#225;s, la compilaci&#243;n ahora se asemeja m&#225;s a la de la propia aplicaci&#243;n, por lo que ser&#225;n <strong>m&#225;s &#225;giles y tardar&#225;n menos en refrescar</strong> los cambios. Supusieron un antes y un despu&#233;s en el dise&#241;o y prueba de interfaces gr&#225;ficas y siguen <strong>evolucionando</strong> con el sistema.</p><h3>Vision Pro: pocas novedades para el usuario, muchas para los desarrolladores</h3><p>No podemos olvidar las expectativas de c&#243;mo Apple iba a avanzar con Apple Vision Pro y no decepcion&#243;. Aunque en principio solo se habl&#243; que cosas de poco calado, como nuevos gestos para invocar el men&#250; y poca cosa m&#225;s, cuando levantamos el cap&#243; en la verdadera conferencia inaugural, el <strong>Platforms: State of the Union</strong>, la verdad que por dentro est&#225; cargado de novedades.</p><p>Ahora las empresas que hagan <strong>apps a publicar en el Business Manager de Apple</strong> podr&#225;n acceder a la c&#225;mara del dispositivo y ver lo que ve el usuario o al <em>passthrough</em> que monta la realidad con el mundo digital. Podr&#225;n usar el motor neural y con ello no habr&#225; limitaci&#243;n a las posibilidades que sacar en aplicaci&#243;n industrial o empresarial al dispositivo.</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;7a863ed3-1667-4b53-aa1e-84364a325406&quot;,&quot;duration&quot;:null}"></div><p>Tambi&#233;n tenemos nuevos APIs como <strong>TableTopKit</strong> que nos permite colocar experiencias y objetos sobre superficies o una <strong>API volum&#233;trica</strong> que nos permite modificar este tipo de experiencias como queramos (no como hasta ahora que ten&#237;an un tama&#241;o fijo). Y por supuesto: ahora podemos colocar las m&#250;ltiples ventanas y elementos de nuestra app donde queramos, con mucha m&#225;s libertad.</p><p>Si quieres saber m&#225;s de estas novedades, p&#225;sate por el directo que hicimos junto a Eduardo Herranz de Spatial Voyagers contando todas las novedades, que <a href="https://youtube.com/live/AWVlq757W54">tienes aqu&#237;</a>. Y no olvides que nuestra formaci&#243;n <a href="http://acoding.academy/vdp24">Vision Developer Program</a> os daremos un adelanto de todo esto.</p><h3>Y poco m&#225;s</h3><p>Tras una semana intensa, vuelta a la <strong>calma</strong>. Recordad que no hace falta verse todo el contenido, ni tiene que ser en los <strong>primeros d&#237;as</strong>. El a&#241;o que viene habr&#225; otra WWDC y la rueda seguir&#225; girando. A nosotros ya sab&#233;is que nos encanta <strong>aprender cosas nuevas</strong>. </p><p>Durante las siguientes semanas prometemos traer las novedades m&#225;s importantes para los <strong>desarrolladores</strong>, que hayan podido quedar sepultadas la avalancha del <em>mainstream</em>. Si quer&#233;is dejarnos un comentario o contarnos cualquier cosa, estamos en los canales habituales, nuestro correo caffeswift@gmail.com y la cuenta de X <a href="https://x.com/caffeswift">@caffeswift</a>. Y pronto tendr&#233;is el primero de los Caff&#232; Swift especial WWDC24.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://applecoding.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer Caff&#232; Swift Newsletter! Suscr&#237;bete gratis para recibir nuevas publicaciones y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[0% club del rumor]]></title><description><![CDATA[Solo datos, o casi&#8230; Xcode Copilot tendr&#225; que esperar pero os traemos m&#225;s herramientas y consejos para mejorar en el desarrollo y programaci&#243;n de aplicaciones]]></description><link>https://applecoding.substack.com/p/0-club-del-rumor</link><guid isPermaLink="false">https://applecoding.substack.com/p/0-club-del-rumor</guid><dc:creator><![CDATA[Apple Coding]]></dc:creator><pubDate>Mon, 10 Jun 2024 08:13:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ATAD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ba56c84-7ccb-4758-8c0e-7c43aa3d1f67_1456x816.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ATAD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ba56c84-7ccb-4758-8c0e-7c43aa3d1f67_1456x816.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ATAD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ba56c84-7ccb-4758-8c0e-7c43aa3d1f67_1456x816.heic 424w, https://substackcdn.com/image/fetch/$s_!ATAD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ba56c84-7ccb-4758-8c0e-7c43aa3d1f67_1456x816.heic 848w, https://substackcdn.com/image/fetch/$s_!ATAD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ba56c84-7ccb-4758-8c0e-7c43aa3d1f67_1456x816.heic 1272w, https://substackcdn.com/image/fetch/$s_!ATAD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ba56c84-7ccb-4758-8c0e-7c43aa3d1f67_1456x816.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ATAD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ba56c84-7ccb-4758-8c0e-7c43aa3d1f67_1456x816.heic" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0ba56c84-7ccb-4758-8c0e-7c43aa3d1f67_1456x816.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:247704,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ATAD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ba56c84-7ccb-4758-8c0e-7c43aa3d1f67_1456x816.heic 424w, https://substackcdn.com/image/fetch/$s_!ATAD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ba56c84-7ccb-4758-8c0e-7c43aa3d1f67_1456x816.heic 848w, https://substackcdn.com/image/fetch/$s_!ATAD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ba56c84-7ccb-4758-8c0e-7c43aa3d1f67_1456x816.heic 1272w, https://substackcdn.com/image/fetch/$s_!ATAD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ba56c84-7ccb-4758-8c0e-7c43aa3d1f67_1456x816.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#161;Hoy es el d&#237;a que comienza la <strong>WWDC!</strong> Y la tremenda inundaci&#243;n de rumores sobre lo que Apple presentar&#225;, resulta incluso <strong>abrumadora</strong>. La compa&#241;&#237;a cada vez est&#225; m&#225;s en el foco medi&#225;tico y eso se nota. Como somos unos rom&#225;nticos y nos gusta llegar a la keynote <strong>lo m&#225;s frescos posible</strong>, vamos a desmarcarnos de la rumorolog&#237;a y hablaremos de las novedades en la <strong>siguiente edici&#243;n</strong>.</p><h3>Primera secci&#243;n, primer pero: lo que Xcode ser&#225;</h3><p>Con la excusa de que es nuestra herramienta del d&#237;a a d&#237;a, vamos a saltarnos la norma, y comentar que Mark Gurman <a href="https://x.com/markgurman/status/1799086135282668024?s=42&amp;t=hSsRsbDGWVULHPhWiF3JRg">afirma</a> que la integraci&#243;n de una suerte de asistente, al estilo de <strong>GitHub Copilot</strong>, en <strong>Xcode</strong> ser&#225; presentada pero no estar&#225; preparada hasta <strong>el a&#241;o que viene</strong>. Analizando las implicaciones, el calado y el estado del arte de los modelos generativos, <strong>beta</strong> ser&#225; lo segundo m&#225;s repetido, detr&#225;s de inteligencia artificial claro.</p><p>&#191;Ser&#225; esta integraci&#243;n la que suponga el salto a un nuevo Xcode basado en <strong>Swift Playgrounds</strong>? Qui&#233;n sabe, pero es raro que Apple haya evolucionado esta herramienta de forma tan lenta, cuando permite incluso <strong>publicar aplicaciones</strong> con un nuevo tipo de proyecto Swift basado en <strong>Swift Package Manager</strong>. So&#241;ar es gratis as&#237; que os dejamos una de las <a href="https://mbbischoff.com/wwdc-2024-wishlist/">listas de deseos</a> para los desarrolladores en esta WWDC.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yo2e!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf790edd-aec0-4640-9a07-6f0a50e0f64e_1456x816.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yo2e!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf790edd-aec0-4640-9a07-6f0a50e0f64e_1456x816.heic 424w, https://substackcdn.com/image/fetch/$s_!yo2e!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf790edd-aec0-4640-9a07-6f0a50e0f64e_1456x816.heic 848w, https://substackcdn.com/image/fetch/$s_!yo2e!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf790edd-aec0-4640-9a07-6f0a50e0f64e_1456x816.heic 1272w, https://substackcdn.com/image/fetch/$s_!yo2e!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf790edd-aec0-4640-9a07-6f0a50e0f64e_1456x816.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yo2e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf790edd-aec0-4640-9a07-6f0a50e0f64e_1456x816.heic" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/df790edd-aec0-4640-9a07-6f0a50e0f64e_1456x816.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:192007,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yo2e!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf790edd-aec0-4640-9a07-6f0a50e0f64e_1456x816.heic 424w, https://substackcdn.com/image/fetch/$s_!yo2e!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf790edd-aec0-4640-9a07-6f0a50e0f64e_1456x816.heic 848w, https://substackcdn.com/image/fetch/$s_!yo2e!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf790edd-aec0-4640-9a07-6f0a50e0f64e_1456x816.heic 1272w, https://substackcdn.com/image/fetch/$s_!yo2e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf790edd-aec0-4640-9a07-6f0a50e0f64e_1456x816.heic 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Sube el nivel: paquetiza y loggea</h3><p>No es nuevo el hecho de que dividir una aplicaci&#243;n en <strong>paquetes</strong> es una muy buena pr&#225;ctica para <strong>organizar</strong> el c&#243;digo y <strong>separar</strong> las capas l&#243;gicas de un proyecto. Aunque las opciones son varias, si utilizamos Swift deber&#237;amos darle una oportunidad a Swift Package Manager. Adem&#225;s de ser el <strong>gestor de primer orden</strong> para el lenguaje, se trata de una integraci&#243;n potente y ligera que deber&#237;a cubrir la pr&#225;ctica totalidad de los escenarios. En <a href="https://www.avanderlee.com/swift/creating-swift-package-manager-framework/">esta pieza</a> se explica c&#243;mo crearlos y lo bien que se integra SPM con <strong>Xcode</strong>.</p><p>Si os preguntamos cu&#225;l es la primera forma que se os ocurre de <strong>imprimir un valor</strong> en la consola, vengas de casi cualquier lenguaje dir&#225;s que con el comando <em>print</em>. Mentira no es, pero se puede mejorar. Aunque antiguamente era un poco enrevesado, desde hace algunas versiones, los sistemas de Apple tienen una <a href="https://developer.apple.com/documentation/os/logging">API de log</a> unificada. La recomendaci&#243;n es <strong>empezar a usarla cuanto antes</strong>, incluso para depurar c&#243;digo. Si no te hemos convencido, quiz&#225;s <a href="https://www.donnywals.com/modern-logging-with-the-oslog-framework-in-swift/">este art&#237;culo</a> lo haga.</p><h3>Domina la navegaci&#243;n de tu aplicaci&#243;n</h3><p>La forma de navegar y las APIs existentes <strong>han variado</strong>, quiz&#225;s demasiado para nuestro gusto, desde el lanzamiento de <strong>SwiftUI</strong>. Pasamos de un <em>NavigationView</em> como caj&#243;n de sastre que serv&#237;a para todo, a diferenciar entre vistas apiladas y vistas divididas. En estas &#250;ltimas, el comportamiento y la forma de gestionarlo <strong>ha cambiado bastante</strong> y puede haber pillado despistado hasta al desarrollador m&#225;s avezado. No hay problema, echa un vistazo a <a href="https://swiftandtips.com/how-to-use-navigationsplitview-for-multi-column-display-in-ipad-portrait-mode">esta pieza</a> y no se te resistir&#225; ning&#250;n tipo de <strong>presentaci&#243;n</strong>.</p><p>Algunas veces son cambios, y otras veces <strong>nuevas opciones</strong> para personalizar la presentaci&#243;n de vistas. Las presentaciones modales han adquirido una nueva dimensi&#243;n con el a&#241;adido de los <em>detents</em>. Ya no es necesario acudir a hechizos complejos para <strong>gestionar el espacio que ocupan</strong>, tan necesaria era la API que tambi&#233;n tiene su hom&#243;logo en UIKit. Descubre <a href="https://medium.com/@jpmtech/adding-a-bottom-sheet-or-partial-modal-in-swiftui-b962bd9cb962">todas las opciones disponibles</a> a d&#237;a de hoy. Ah, y por si a&#250;n tienes proyectos en el mencionado, y vetusto, framework de desarrollo UIKit, debes saber que <a href="https://www.swiftwithvincent.com/blog/previews-in-xcode-also-work-with-uikit">tambi&#233;n puedes usar</a> las <strong>nuevas previews</strong> de iOS 17.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://acoding.academy/vdp24" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ggt0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef3a1e9a-e1f8-4a9d-a6f3-5936bd59f3cc_1456x596.heic 424w, https://substackcdn.com/image/fetch/$s_!Ggt0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef3a1e9a-e1f8-4a9d-a6f3-5936bd59f3cc_1456x596.heic 848w, https://substackcdn.com/image/fetch/$s_!Ggt0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef3a1e9a-e1f8-4a9d-a6f3-5936bd59f3cc_1456x596.heic 1272w, https://substackcdn.com/image/fetch/$s_!Ggt0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef3a1e9a-e1f8-4a9d-a6f3-5936bd59f3cc_1456x596.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ggt0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef3a1e9a-e1f8-4a9d-a6f3-5936bd59f3cc_1456x596.heic" width="1456" height="596" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ef3a1e9a-e1f8-4a9d-a6f3-5936bd59f3cc_1456x596.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:596,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:58630,&quot;alt&quot;:&quot;Vision Developer Program&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:&quot;https://acoding.academy/vdp24&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Vision Developer Program" title="Vision Developer Program" srcset="https://substackcdn.com/image/fetch/$s_!Ggt0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef3a1e9a-e1f8-4a9d-a6f3-5936bd59f3cc_1456x596.heic 424w, https://substackcdn.com/image/fetch/$s_!Ggt0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef3a1e9a-e1f8-4a9d-a6f3-5936bd59f3cc_1456x596.heic 848w, https://substackcdn.com/image/fetch/$s_!Ggt0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef3a1e9a-e1f8-4a9d-a6f3-5936bd59f3cc_1456x596.heic 1272w, https://substackcdn.com/image/fetch/$s_!Ggt0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef3a1e9a-e1f8-4a9d-a6f3-5936bd59f3cc_1456x596.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Im&#225;genes as&#237;ncronas y Objective-C</h3><p>Extra&#241;a combinaci&#243;n, &#191;verdad? Spoiler: no tienen <strong>nada que ver</strong>. Empecemos con <em>AsyncImage</em>, ese componente amado y odiado que permite de forma <strong>bastante</strong> personalizable, cargar una imagen desde una URL. Y decimos bastante porque quitando el componente visual, la l&#243;gica detr&#225;s de la descarga guarda algunos secretos: <a href="https://matteomanferdini.com/swiftui-asyncimage/">si necesitas algo avanzado</a> tendr&#225;s que hacerlo con <strong>tu propio c&#243;digo</strong>.</p><p>El aroma del caf&#233; para cafeteros hoy <strong>viene del pasado,</strong> de muy lejos. De cuando esta Newsletter no tendr&#237;a ni raz&#243;n de ser&#8230; Hablamos de <strong>Objective-C</strong>. Si, por los devenires de la vida, te ha tocado lidiar con un <strong>proyecto</strong> que contenga este lenguaje y jam&#225;s has o&#237;do hablar de &#233;l pero te defiendes en Swift, deja lo que est&#233;s haciendo y revisa <a href="https://tanaschita.com/objective-c-for-swift-developers/">esta pieza</a>.</p><h3>Y poco m&#225;s</h3><p>Cerramos la barraca con la promesa de <strong>futuras ediciones</strong> cargadas de informaci&#243;n, probablemente lo complicado sea <strong>filtrarla</strong>. Nos vemos al otro lado. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yER8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4db5471-e758-4169-9dde-adafa233f8af_3840x2160.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yER8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4db5471-e758-4169-9dde-adafa233f8af_3840x2160.heic 424w, https://substackcdn.com/image/fetch/$s_!yER8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4db5471-e758-4169-9dde-adafa233f8af_3840x2160.heic 848w, https://substackcdn.com/image/fetch/$s_!yER8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4db5471-e758-4169-9dde-adafa233f8af_3840x2160.heic 1272w, https://substackcdn.com/image/fetch/$s_!yER8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4db5471-e758-4169-9dde-adafa233f8af_3840x2160.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yER8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4db5471-e758-4169-9dde-adafa233f8af_3840x2160.heic" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e4db5471-e758-4169-9dde-adafa233f8af_3840x2160.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:251656,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yER8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4db5471-e758-4169-9dde-adafa233f8af_3840x2160.heic 424w, https://substackcdn.com/image/fetch/$s_!yER8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4db5471-e758-4169-9dde-adafa233f8af_3840x2160.heic 848w, https://substackcdn.com/image/fetch/$s_!yER8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4db5471-e758-4169-9dde-adafa233f8af_3840x2160.heic 1272w, https://substackcdn.com/image/fetch/$s_!yER8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4db5471-e758-4169-9dde-adafa233f8af_3840x2160.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Y recuerda: <strong>si quieres seguir la WWDC24, puedes hacerlo con nosotros en directo</strong>: estar&#225;n Julio C&#233;sar Fern&#225;ndez, Arturo Rivas y Mar&#237;a Soriano cubriendo tanto el evento principal, como un debate posterior con desarrolladores y creadores de contenido y, por supuesto, la conferencia que realmente esperamos: la State of the Union donde nos cuenten &#8220;la chicha&#8221; detr&#225;s de lo presentado. &#191;Contamos contigo? Puedes seguir en <a href="https://www.youtube.com/live/KGJMB3zl9Os">Youtube</a> o en nuestro <a href="http://twitch.tv/applecoding">Twitch</a>. Ap&#250;ntate <a href="https://discord.gg/V8FuHWCy?event=1249012629524054068">al evento en nuestro servidor de Discord </a>para no olvidarte y saber la hora en tu pa&#237;s..</p><p>Concretamente al que est&#225; despu&#233;s de la semana fant&#225;stica de la <strong>Worldwide Developer Conference</strong> de Apple. Si quer&#233;is dejarnos un comentario o contarnos cualquier cosa, estamos en los canales habituales, nuestro correo caffeswift@gmail.com y la cuenta de X <a href="https://x.com/caffeswift">@caffeswift</a>.</p><p><strong>Nos leemos pronto, si Jobs quiere, y hasta entonces: un saludo y Good Apple Coding.</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://applecoding.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer Caff&#232; Swift Newsletter! Suscr&#237;bete gratis para recibir nuevas publicaciones y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Rumbo a una WWDC AI-lucionante]]></title><description><![CDATA[No nos interesan los rumores si no las certezas: c&#243;mo prepara un developer el gran evento anual, SwiftUI y sus amigos y lo que no te contaron del lenguaje Swift]]></description><link>https://applecoding.substack.com/p/rumbo-a-una-wwdc-ai-lucionante</link><guid isPermaLink="false">https://applecoding.substack.com/p/rumbo-a-una-wwdc-ai-lucionante</guid><dc:creator><![CDATA[Apple Coding]]></dc:creator><pubDate>Mon, 03 Jun 2024 16:05:52 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!aZEp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5412d97a-df88-44bb-9b21-2d8c4465c4f1.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aZEp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5412d97a-df88-44bb-9b21-2d8c4465c4f1.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aZEp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5412d97a-df88-44bb-9b21-2d8c4465c4f1.heic 424w, https://substackcdn.com/image/fetch/$s_!aZEp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5412d97a-df88-44bb-9b21-2d8c4465c4f1.heic 848w, https://substackcdn.com/image/fetch/$s_!aZEp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5412d97a-df88-44bb-9b21-2d8c4465c4f1.heic 1272w, https://substackcdn.com/image/fetch/$s_!aZEp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5412d97a-df88-44bb-9b21-2d8c4465c4f1.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aZEp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5412d97a-df88-44bb-9b21-2d8c4465c4f1.heic" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5412d97a-df88-44bb-9b21-2d8c4465c4f1.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:303240,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!aZEp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5412d97a-df88-44bb-9b21-2d8c4465c4f1.heic 424w, https://substackcdn.com/image/fetch/$s_!aZEp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5412d97a-df88-44bb-9b21-2d8c4465c4f1.heic 848w, https://substackcdn.com/image/fetch/$s_!aZEp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5412d97a-df88-44bb-9b21-2d8c4465c4f1.heic 1272w, https://substackcdn.com/image/fetch/$s_!aZEp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5412d97a-df88-44bb-9b21-2d8c4465c4f1.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>No es un evento, es <strong>&#8220;el evento&#8221;</strong> para muchos de los que nos le&#233;is en cada edici&#243;n. A pocas semanas de la celebraci&#243;n de la <a href="https://developer.apple.com/wwdc24/">WWDC de Apple</a>, ya tenemos horarios para las conferencias inaugurales: <strong>19:00</strong> para la keynote principal y <strong>22:00</strong> para el Platform State of the Union, hora espa&#241;ola peninsular. En la <strong>primera</strong> nos gusta porque hablar&#225;n sobre <strong>el qu&#233;</strong>, la <strong>segunda</strong> nos encanta porque nos contar&#225;n el <strong>c&#243;mo</strong>.</p><p>La <strong>rumorolog&#237;a</strong> intensifica su actividad durante estos d&#237;as y van surgiendo <strong>detalles m&#225;s espec&#237;ficos</strong> sobre posibles novedades. Desde funcionalidades donde Apple usar&#237;a la <strong>IA generativa</strong>, hasta <strong>redise&#241;o</strong> de <em>springboard</em>, los ajustes o incluso el centro de control. Como realmente no lo sabremos hasta el 10 de junio, os traemos algunas piezas sobre <strong>qu&#233; esperar y c&#243;mo prepararos</strong> de cara el evento. Tambi&#233;n hemos querido jugar una <a href="https://cuonda.com/caffe-swift/el-poker-de-la-wwdc24">partida de p&#243;ker</a> con apuestas sobre la conferencia en el podcast de <strong>Caff&#232; Swift</strong>.</p><h3>Prep&#225;rate, va a estallar el ob&#250;s</h3><p><strong>SwiftUI</strong> supuso un soplo de aire fresco, pero tambi&#233;n un cambio de paradigma y un gran salto en los frameworks de desarrollo de aplicaciones. La tecnolog&#237;a actual est&#225; <strong>muy madura</strong> y el predicamento de Apple indica que es el framework de primera clase para construir cualquier aplicaci&#243;n para sus sistemas. Esta pieza nos cuenta al <a href="https://fatbobman.com/en/posts/before-wwdc-2024/">evoluci&#243;n desde su lanzamiento y los desaf&#237;os</a> que a&#250;n tiene que enfrentar. Seguro que <strong>vemos novedades</strong> pronto.</p><p>Pero si el a&#241;o pasado hubo una librer&#237;a digna de menci&#243;n, fue la esperada <strong>SwiftData</strong>. El vetusto CoreData y sus m&#250;ltiples achaques fruto de los a&#241;os, dejaron paso a la modernidad y la forma <em>Swifty</em> de hacer las cosas. Muchas <strong>novedades</strong>, una base s&#243;lida pero mucho camino por delante para <strong>estar a la altura</strong>. Os dejamos un art&#237;culo con <a href="https://fatbobman.com/en/posts/before-wwdc-2024-swiftdata/">las luces y las sombras</a>. Seguro que este a&#241;o vemos mejoras y nuevas caracter&#237;sticas que le dar&#225;n un empuj&#243;n para <strong>situarlo donde debiera</strong> estar.</p><p>Esperamos que Apple presente un <strong>renovado Xcode</strong> asistido de varias formas por IA. Pero por si acaso, y desde ya mismo,  puedes usar los <strong>chatbots existentes</strong> para generar c&#243;digo con estos <a href="https://www.avanderlee.com/swift/chatgpt-code-generation-prompts/">5 consejos</a> que te permitir&#225;n sacarle todo el partido a las nuevas herramientas. Su integraci&#243;n no es tan profunda y requieren m&#225;s trabajo, pero pueden <strong>ayudarte en tu labor</strong> como programador.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://acoding.academy/vdp24" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-C4V!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ebe0533-8431-4afa-a7fd-042de633ff87.heic 424w, https://substackcdn.com/image/fetch/$s_!-C4V!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ebe0533-8431-4afa-a7fd-042de633ff87.heic 848w, https://substackcdn.com/image/fetch/$s_!-C4V!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ebe0533-8431-4afa-a7fd-042de633ff87.heic 1272w, https://substackcdn.com/image/fetch/$s_!-C4V!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ebe0533-8431-4afa-a7fd-042de633ff87.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-C4V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ebe0533-8431-4afa-a7fd-042de633ff87.heic" width="1456" height="596" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4ebe0533-8431-4afa-a7fd-042de633ff87.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:596,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:61050,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:&quot;https://acoding.academy/vdp24&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-C4V!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ebe0533-8431-4afa-a7fd-042de633ff87.heic 424w, https://substackcdn.com/image/fetch/$s_!-C4V!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ebe0533-8431-4afa-a7fd-042de633ff87.heic 848w, https://substackcdn.com/image/fetch/$s_!-C4V!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ebe0533-8431-4afa-a7fd-042de633ff87.heic 1272w, https://substackcdn.com/image/fetch/$s_!-C4V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ebe0533-8431-4afa-a7fd-042de633ff87.heic 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Framework para todo: un gran poder conlleva una gran responsabilidad</h3><p>Hace a&#241;os, si llevabas un tiempo creando aplicaciones para iOS y te planteabas el salto a <strong>macOS</strong>, no era un camino de rosas. &#191;UIKit y AppKit se parecen? Si. &#191;Son lo mismo? No&#8230; Pero lleg&#243; SwiftUI y la cosa cambi&#243;. Hay que ir con cuidado y probarlo todo bien en ambos sistemas antes de enviar tus aplicaciones a revisi&#243;n, pero da gusto la evoluci&#243;n que ha experimentado, sobretodo, para macOS. Los escenarios, las ventanas, men&#250;s y dem&#225;s en macOS eran bastante farragosas, pero la versi&#243;n actual de <strong>SwiftUI</strong> permite una <a href="https://nilcoalescing.com/blog/ScenesTypesInASwiftUIMacApp/">gesti&#243;n eficiente y sencilla</a> de los mismos.</p><p>Un <strong>problema</strong> no declarado de <strong>SwiftUI</strong>, surgido por la r&#225;pida evoluci&#243;n que ha tenido en su, de momento, corta vida, es que hasta los m&#225;s avezados desarrolladores hemos <strong>pasado por alto</strong> algunos componentes muy pr&#225;cticos. Uno de ellos es el <strong>LabeledContent</strong> que <a href="https://asynclearn.com/blog/labeled-content/">permite organizar la presentaci&#243;n interfaz</a>, personalizarla e incluso se adapta al contexto para mostrar la informaci&#243;n de forma ordenada y legible. Si a&#250;n no lo utilizas te <strong>lo recomendamos</strong>, nosotros prometemos hacerlo.</p><p>Al hilo de los componentes de SwiftUI, es digno de menci&#243;n la tremenda capacidad de <strong>personalizaci&#243;n</strong> y la facilidad de hacerlo de la mayor&#237;a de ellos. Pero no todo el monte es or&#233;gano: no todas las formas de personalizaci&#243;n llevan a los mismos resultados. Aqu&#237; enlazamos una pieza sobre c&#243;mo se puede y <strong>c&#243;mo se debe</strong> <a href="https://www.swiftwithvincent.com/blog/bad-practice-not-using-a-buttonstyle">personalizar un bot&#243;n</a>.</p><h3>Lo que nadie te cont&#243;: notificaciones push y String</h3><p>Una amplia mayor&#237;a de las aplicaciones modernas, utilizan alg&#250;n tipo de <strong>notificaci&#243;n remota</strong> para actualizar informaci&#243;n o alertar al usuario de nuevo contenido. Si para siempre han sido un arcano para ti y quieres que deje de ser as&#237;, aqu&#237; tienes una <a href="https://medium.com/@jpmtech/your-complete-guide-to-push-notifications-in-swiftui-8a13f5588662">introducci&#243;n a su funcionamiento</a>. Tambi&#233;n podr&#225;s ver <strong>c&#243;mo implementarlas</strong> en tus aplicaciones.</p><p>&#191;Cadenas de texto? Yo ya lo s&#233; todo sobre <strong>cadenas de texto</strong>. O no&#8230; Swift y el tipo <strong>String</strong> nos abstraen mucha de la l&#243;gica interna que permite manejar y trabajar con cadenas de caracteres. Pero siempre est&#225; bien conocer las <strong>tripas</strong>. <a href="https://blog.ptrkstr.com/stringcount-vs-nsstringlength">Aqu&#237;</a> parten de la forma de medir el tama&#241;o de las mismas para contarnos algunas de las peculiaridades y problemas a los que nos enfrentamos cuando trabajos con ellas.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Qr96!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73bd7c35-649d-49cf-8724-c44a08087f11.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Qr96!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73bd7c35-649d-49cf-8724-c44a08087f11.heic 424w, https://substackcdn.com/image/fetch/$s_!Qr96!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73bd7c35-649d-49cf-8724-c44a08087f11.heic 848w, https://substackcdn.com/image/fetch/$s_!Qr96!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73bd7c35-649d-49cf-8724-c44a08087f11.heic 1272w, https://substackcdn.com/image/fetch/$s_!Qr96!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73bd7c35-649d-49cf-8724-c44a08087f11.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Qr96!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73bd7c35-649d-49cf-8724-c44a08087f11.heic" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/73bd7c35-649d-49cf-8724-c44a08087f11.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:234579,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Qr96!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73bd7c35-649d-49cf-8724-c44a08087f11.heic 424w, https://substackcdn.com/image/fetch/$s_!Qr96!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73bd7c35-649d-49cf-8724-c44a08087f11.heic 848w, https://substackcdn.com/image/fetch/$s_!Qr96!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73bd7c35-649d-49cf-8724-c44a08087f11.heic 1272w, https://substackcdn.com/image/fetch/$s_!Qr96!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73bd7c35-649d-49cf-8724-c44a08087f11.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Swift simple, Swift cafetero</h3><p>Llegamos al final de la edici&#243;n con un par de art&#237;culos de lenguaje puro y duro. Fuera frameworks, herramientas, librer&#237;as&#8230; hablemos de Swift y punto. Lo primero que traemos es una de las <strong>mayores bendiciones</strong> de los que nos gusta reducir la sintaxis de un c&#243;digo a su m&#237;nima expresi&#243;n: <a href="https://swiftwithmajid.com/2024/05/28/if-and-switch-expressions-in-swift/">las sentencias como asignaci&#243;n</a>. Vale ya de usar <em>return</em> por todos lados y de crearnos variables sin inicializar antes de los <em>switch</em> e <em>if</em>, ahora podemos <strong>asignar su salida</strong> de forma directa. &#161;Alabado sea Jobs!</p><p>&#191;Ol&#233;is eso? El aroma del caf&#233; intenso ha inundado esta newsletter. Y tan intenso. Ya hemos hablado de la <strong>comprobaci&#243;n estricta de concurrencia</strong> que tantos dolores de cabeza va a provocar con la salida de <strong>Swift 6</strong>. Que necesites actualizar tu c&#243;digo pase, pero &#191;qu&#233; hay de las librer&#237;as que utilizas y que no se actualicen? Amigo, <a href="https://www.donnywals.com/preconcurrency-usage-in-swift-explained/">hay una soluci&#243;n</a>. Bastar&#225; marcar como <em>@preconcurrency</em> la librer&#237;a, tipo o funci&#243;n que necesites usar pero que no haya adoptados las nuevas medidas.</p><h3>Y poco m&#225;s</h3><p>Y pare cerrar, si todav&#237;a ten&#233;is dudas de la estrategia que seguir&#225; Apple para la IA o en qu&#233; dispositivos funcionar&#225;, no dej&#233;is de visitar nuestro <a href="http://youtube.com/applecoding">canal de Youtube</a> (y suscribiros) donde os contamos <a href="https://www.youtube.com/watch?v=M0oNM7tC1fY">&#8220;Los 3 Pilares de la IA generativa para Apple&#8221;</a> (que llegar&#225;n en la WWDC) y, por supuesto, nuestro &#250;ltimo Caff&#232; Swift en v&#237;deo que tambi&#233;n lo ten&#233;is en el canal, si quer&#233;is asistir en directo al <a href="https://www.youtube.com/watch?v=FpZiw5tJCwU">&#8220;P&#243;ker de la WWDC24&#8221;</a>.</p><p>Se ve, se siente, la <strong>World Wide Developer Conference</strong> est&#225; presente. Despedimos esta edici&#243;n con ganas e ilusi&#243;n de que llegue y os animamos a dejarnos comentarios o cualquier cosa que quer&#225;is contarnos en los canales habituales. Bien por correo en caffeswift@gmail.com o en nuestra cuenta de X <a href="https://x.com/caffeswift">@caffeswift</a>.</p><p><strong>Nos leemos pronto, si Jobs quiere, y hasta entonces: un saludo y Good Apple Coding.</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://applecoding.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer Caff&#232; Swift Newsletter! Suscr&#237;bete gratis para recibir nuevas publicaciones y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Un muchachito nuevo en el barrio]]></title><description><![CDATA[Tiendas alternativas, IA en el dispositivo y mucho Swift, prepara una buena taza de caf&#233; que empezamos]]></description><link>https://applecoding.substack.com/p/un-muchachito-nuevo-en-el-barrio</link><guid isPermaLink="false">https://applecoding.substack.com/p/un-muchachito-nuevo-en-el-barrio</guid><dc:creator><![CDATA[Apple Coding]]></dc:creator><pubDate>Tue, 14 May 2024 11:26:52 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!NQ7_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe23a6de-ab34-4212-93af-44c70748e3fa.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NQ7_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe23a6de-ab34-4212-93af-44c70748e3fa.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NQ7_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe23a6de-ab34-4212-93af-44c70748e3fa.heic 424w, https://substackcdn.com/image/fetch/$s_!NQ7_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe23a6de-ab34-4212-93af-44c70748e3fa.heic 848w, https://substackcdn.com/image/fetch/$s_!NQ7_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe23a6de-ab34-4212-93af-44c70748e3fa.heic 1272w, https://substackcdn.com/image/fetch/$s_!NQ7_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe23a6de-ab34-4212-93af-44c70748e3fa.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NQ7_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe23a6de-ab34-4212-93af-44c70748e3fa.heic" width="1456" height="832" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/be23a6de-ab34-4212-93af-44c70748e3fa.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:832,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:399159,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NQ7_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe23a6de-ab34-4212-93af-44c70748e3fa.heic 424w, https://substackcdn.com/image/fetch/$s_!NQ7_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe23a6de-ab34-4212-93af-44c70748e3fa.heic 848w, https://substackcdn.com/image/fetch/$s_!NQ7_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe23a6de-ab34-4212-93af-44c70748e3fa.heic 1272w, https://substackcdn.com/image/fetch/$s_!NQ7_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe23a6de-ab34-4212-93af-44c70748e3fa.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Tiendas alternativas: </strong>no solo en iOS, tambi&#233;n en breve llegar&#225;n a iPadOS. Cabe recordar que s&#243;lo en Europa, pero la primera (el <a href="https://altstore.io">AltStore</a>) lleg&#243; con solo dos apps y se esperan otras anunciadas como una de Microsoft con sus juegos para Xbox en Cloud Gaming y varias apps propias, adem&#225;s de la tienda de SetApp. AltStore adem&#225;s cobra 1,50&#8364; m&#225;s impuestos al a&#241;o para cubrir el CTF <em>(Core Technology Fee)</em> que es la tarifa que Apple cobra a partir del mill&#243;n de instalaciones al a&#241;o a las apps que tengan alg&#250;n tipo de monetizaci&#243;n (las completamente gratuitas se libran). </p><p>Desde luego, la primera tienda no pod&#237;a empezar peor porque bajo el reclamo de <em>&#8220;Discover apps that push the boundaries of iOS.&#8221;</em> Y uno de esos <em>boundaries</em> son: un <strong>portapapeles vitaminado</strong> que te satura de notificaciones para que <strong>abras la aplicaci&#243;n cada vez</strong> que copias algo para no perderlo, y un <strong>emulador</strong> que <strong>fuera de Europa</strong> est&#225; disponible en el <strong>App Store</strong>. La realidad es que Apple ha eliminado para el acuerdo de negocio de las tiendas alternativas todas las condiciones de negocio y varias m&#225;s de otros apartados, pero ha conservado todo lo referente al control de contenido y a la privacidad. Podemos ver las diferencias en las normas en <a href="https://developer.apple.com/app-store/review/guidelines/">App Review Guidelines</a> pulsando en el check <em>&#8220;Show Notarization Review Guidelines&nbsp;Only&#8221;</em>.</p><p>Esta semana nos hacemos eco de <strong>Mark Gurman</strong>, donde asegura que Apple habr&#237;a conseguido que, las <strong>caracter&#237;sticas</strong> de sus pr&#243;ximos sistemas operativos que <strong>requieren IA</strong>, se ejecuten <a href="https://9to5mac.com/2024/04/21/gurman-ios-18-ai-features-on-device/">completamente en el dispositivo</a>. Esto nos lleva a <a href="https://privatellm.app/es">Private LLM</a> que utiliza distintos modelos para crear un <em><strong>chatbot</strong></em> que se ejecuta en el terminal y a la historia de <a href="https://www.youtube.com/watch?v=b1XCEetucSg">este chico</a> que ha aportando tanto valor <strong>creando modelos</strong> para ejecutar con <a href="https://github.com/ml-explore/mlx">MLX</a>, que la propia <strong>comunidad</strong> le ha comprado un port&#225;til nuevo <em>todo chetado</em> que dice la juventud. Aunque eso no quita que Apple parece que habr&#237;a cerrado un acuerdo de colaboraci&#243;n con OpenAI para integrar sus soluciones en sus nuevos sistemas, sobre todo el espectacular reci&#233;n presentado <a href="https://openai.com">modelo GPT4o</a>. De hecho, habr&#225; app de escritorio de ChatGPT para Mac, capaz de ver nuestra pantalla para ayudarnos en cualquier tarea. Solo compatible con Mac con chips Apple Silicon y macOS 14 en adelante.</p><p>Y aviso a navegantes, el <strong>1 de Mayo</strong> se cumpli&#243; el plazo por el que ahora es necesario que todas las aplicaciones que se env&#237;en al App Store para revisi&#243;n, <a href="https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api">declaren el uso de las APIs que puedan comprometer la privacidad del usuario</a>. No es un proceso complicado, y llevan algunos d&#237;as avisando. Cuando subimos una versi&#243;n que no los declara, un correo bastante detallado nos indica exactamente lo que nos hace falta para corregirlo. &#161;Avisados qued&#225;is! Y tambi&#233;n deb&#233;is incluir en los informes de privacidad <em>(Nutrition Labels)</em> todo lo que cualquier API de terceros haga en vuestra app con los datos de cliente: ojo a los millones de apps con Firebase.</p><h3>Enumerando y descomponiendo con atajos</h3><p>Uno de los tipos m&#225;s utilizados de Swift, que permiten las abstracci&#243;n de listas finitas de forma segura, son los <strong>enum</strong>. Pero lo &#250;til puede volverse en su contra si no lo usas correctamente. <a href="https://holyswift.app/common-mistakes-to-avoid-when-using-enums-in-swift/">Aqu&#237;</a> os dejamos con varios de los errores que no debes cometer.</p><p>En el Podcast ya hemos hablado de <a href="https://cuonda.com/caffe-swift/modularizando">descomposici&#243;n y paquetizaci&#243;n</a> de proyectos. En esta pieza no s&#243;lo hablan de los pros y los contras, si no que el autor detalla <a href="https://ryanashcraft.com/splitting-up-a-monolithic-swift-package/?issue=027&amp;utm_source=Newsletter&amp;utm_medium=email&amp;utm_campaign=FatbobmansSwiftWeekly">c&#243;mo ha realizado la descomposici&#243;n</a> de su <strong>propia aplicaci&#243;n</strong>, paso por paso, con muchos ejemplo de cada parte.</p><p>Cerramos la secci&#243;n con una <a href="https://tanaschita.com/xcode-shortcuts/">colecci&#243;n de atajos de teclado</a> para ser m&#225;s productivos con Xcode. <s>Puedes</s> debes llamarlos combos si quieres.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IIYS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8968b331-c7aa-417a-96e8-776fad744c6b.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IIYS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8968b331-c7aa-417a-96e8-776fad744c6b.heic 424w, https://substackcdn.com/image/fetch/$s_!IIYS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8968b331-c7aa-417a-96e8-776fad744c6b.heic 848w, https://substackcdn.com/image/fetch/$s_!IIYS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8968b331-c7aa-417a-96e8-776fad744c6b.heic 1272w, https://substackcdn.com/image/fetch/$s_!IIYS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8968b331-c7aa-417a-96e8-776fad744c6b.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IIYS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8968b331-c7aa-417a-96e8-776fad744c6b.heic" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8968b331-c7aa-417a-96e8-776fad744c6b.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:175027,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!IIYS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8968b331-c7aa-417a-96e8-776fad744c6b.heic 424w, https://substackcdn.com/image/fetch/$s_!IIYS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8968b331-c7aa-417a-96e8-776fad744c6b.heic 848w, https://substackcdn.com/image/fetch/$s_!IIYS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8968b331-c7aa-417a-96e8-776fad744c6b.heic 1272w, https://substackcdn.com/image/fetch/$s_!IIYS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8968b331-c7aa-417a-96e8-776fad744c6b.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Modelo-Vista y Vista-Par&#225;metro, barras e im&#225;genes</h3><p>Las <strong>arquitecturas</strong> de software dan para debate, y seguramente que en&#233;rgico porque es uno de los temas m&#225;s <strong>controvertidos</strong>. Y el amigo Pedro de <a href="https://twitter.com/swiftandtips?s=21&amp;t=lTcjfKgUPtRTo0s1GKHyrA">SwiftAndTips</a>, nos deja esta pieza donde se pregunta si realmente son necesarios los <strong>ViewModel</strong> en <strong>SwiftUI</strong> o si su uso es una <strong>desventaja</strong> frente a simplemente tener <a href="https://swiftandtips.com/implementing-observation-in-swiftui">Modelos y Vistas bien organizados</a>. Sin salirnos de las <strong>vistas</strong> de <strong>SwiftUI</strong>, tenemos <a href="https://medium.com/@jpmtech/passing-one-swiftui-view-as-a-parameter-to-another-swiftui-view-b01a3cde8166">esta pieza</a> sobre c&#243;mo pasar una vista a otra como <strong>par&#225;metro</strong>. Recuerda: siempre hay que ser nativo, pero asomarse a ver qu&#233; recomiendan expertos nunca es malo.</p><p>No suele faltar entre los art&#237;culos destacados el blog <a href="https://twitter.com/twannl?s=21&amp;t=lTcjfKgUPtRTo0s1GKHyrA">SwiftLee</a>, esta semana os dejamos una pieza sobre los <a href="https://www.avanderlee.com/swift-charts/bar-chart-creation-using-swift-charts/">gr&#225;ficos de barras</a> de la librer&#237;a <strong>SwiftCharts.</strong> Atr&#225;s quedaron los d&#237;as de <em>pintar</em> gr&#225;ficos a mano o con librer&#237;as de terceros. Lo que si que podemos dibujar son los archivos <strong>SVG</strong> en las vistas de <strong>SwiftUI</strong>. El elemento <a href="https://www.createwithswift.com/creating-shapes-from-svg-in-a-swiftui-app/">Shape permite hacerlo</a> de forma sencilla. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fjWP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8146b2f0-b87e-4446-b705-277686087363.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fjWP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8146b2f0-b87e-4446-b705-277686087363.heic 424w, https://substackcdn.com/image/fetch/$s_!fjWP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8146b2f0-b87e-4446-b705-277686087363.heic 848w, https://substackcdn.com/image/fetch/$s_!fjWP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8146b2f0-b87e-4446-b705-277686087363.heic 1272w, https://substackcdn.com/image/fetch/$s_!fjWP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8146b2f0-b87e-4446-b705-277686087363.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fjWP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8146b2f0-b87e-4446-b705-277686087363.heic" width="1456" height="832" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8146b2f0-b87e-4446-b705-277686087363.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:832,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:89354,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fjWP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8146b2f0-b87e-4446-b705-277686087363.heic 424w, https://substackcdn.com/image/fetch/$s_!fjWP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8146b2f0-b87e-4446-b705-277686087363.heic 848w, https://substackcdn.com/image/fetch/$s_!fjWP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8146b2f0-b87e-4446-b705-277686087363.heic 1272w, https://substackcdn.com/image/fetch/$s_!fjWP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8146b2f0-b87e-4446-b705-277686087363.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Caf&#233; experimental con Macros y extra de aislamiento</h3><p>Y no queremos cerrar sin nuestra secci&#243;n cafetera. Empezamos una pieza de Donny Wals sobre c&#243;mo <a href="https://www.donnywals.com/how-to-use-experimental-swift-versions-and-features-in-xcode/">activar las caracter&#237;sticas experimentales de Swift</a> en la configuraci&#243;n de <strong>Xcode</strong>,  que har&#225; las delicias de los m&#225;s aventurados. En este grupo seguramente se encuentran tambi&#233;n los desarrolladores que no se conforman con usar las <strong>Macros</strong> que ofrecen el lenguaje y los frameworks m&#225;s utilizados, si no que est&#225;n dispuestos a hacer <a href="https://codingwithvera.com/deep-dive-into-macros/?utm_campaign=iOS%20Dev%20Weekly&amp;utm_medium=web&amp;utm_source=iOS%20Dev%20Weekly%20Issue%20657">las suyas propias</a>.</p><p>El <strong>aislamiento de variables</strong>, y asegurar que son escritas y/o le&#237;das de forma segura, es algo que preocupa con el <strong>nuevo modelo de concurrencia</strong> <a href="https://developer.apple.com/documentation/swift/concurrency">async/await</a> pero el problema viene ya de los tiempos de <a href="https://developer.apple.com/documentation/DISPATCH">Grand Central Dispatch</a>. Una buena forma de tener claro lo que implica, es diferenciar entre <a href="https://www.massicotte.org/dynamic-isolation">aislamiento din&#225;mico y est&#225;tico</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://acoding.academy/vdp24" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yRZ6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cee231-4f4b-4824-a794-2fefe11d264b.heic 424w, https://substackcdn.com/image/fetch/$s_!yRZ6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cee231-4f4b-4824-a794-2fefe11d264b.heic 848w, https://substackcdn.com/image/fetch/$s_!yRZ6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cee231-4f4b-4824-a794-2fefe11d264b.heic 1272w, https://substackcdn.com/image/fetch/$s_!yRZ6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cee231-4f4b-4824-a794-2fefe11d264b.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yRZ6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cee231-4f4b-4824-a794-2fefe11d264b.heic" width="1456" height="596" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/61cee231-4f4b-4824-a794-2fefe11d264b.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:596,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:80527,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:&quot;https://acoding.academy/vdp24&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yRZ6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cee231-4f4b-4824-a794-2fefe11d264b.heic 424w, https://substackcdn.com/image/fetch/$s_!yRZ6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cee231-4f4b-4824-a794-2fefe11d264b.heic 848w, https://substackcdn.com/image/fetch/$s_!yRZ6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cee231-4f4b-4824-a794-2fefe11d264b.heic 1272w, https://substackcdn.com/image/fetch/$s_!yRZ6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cee231-4f4b-4824-a794-2fefe11d264b.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Presentamos nueva formaci&#243;n: Vision Developer Program</h3><p>Desde AC Academy estamos de enhorabuena pues hemos lanzado un nuevo programa formativo que se impartir&#225; el pr&#243;ximo mes de julio en modalidad online en directo, que est&#225; pensado para todos vosotros, desarrolladores en entornos Apple: Vision Developer Program. Una formaci&#243;n que os ense&#241;ar&#225; a c&#243;mo crear apps para visionOS desde 0 con SwiftUI, SwiftData, RealityKit y el resto de herramientas de la nueva plataforma de realidad extendida (computaci&#243;n espacial) de Apple.</p><p>Una formaci&#243;n pensada para desarrolladores en entornos Apple con UIKit o SwiftUI, que quieran dar el siguiente paso y aprender a c&#243;mo estar presentes en el desembarco de toda una nueva plataforma en la que Apple lleva trabajando casi desde el lanzamiento del iPhone. <a href="https://acoding.academy/vdp24">Tienes todos los detalles en nuestra web</a>.</p><h3>Y poco m&#225;s</h3><p>Parece un cambio menor, pero las <strong>tiendas alternativas</strong> van a, por lo menos, hacer pensar a Apple en otras formas de hacer la suya m&#225;s <strong>competitiva</strong>. Seguiremos con la <em>silly season</em> de cara a la WWDC y como siempre, mucho <strong>Swift</strong>. Si quieres dejarnos cualquier comentario o contarnos algo, puedes dirigirlo a nuestros canales habituales que son el correo caffeswift@gmail.com y la cuenta de X <a href="https://x.com/caffeswift">@caffeswift</a>.</p><p><strong>Nos leemos pronto, si Jobs quiere, y hasta entonces: un saludo y Good Apple Coding.</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://applecoding.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer Caff&#232; Swift Newsletter! Suscr&#237;bete gratis para recibir nuevas publicaciones y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Modelo va, modelo viene]]></title><description><![CDATA[Descubre los modelos generativos de moda en la primavera de Apple]]></description><link>https://applecoding.substack.com/p/modelo-va-modelo-viene</link><guid isPermaLink="false">https://applecoding.substack.com/p/modelo-va-modelo-viene</guid><dc:creator><![CDATA[Apple Coding]]></dc:creator><pubDate>Tue, 16 Apr 2024 08:43:17 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!U6O_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e1b4fb7-5916-4367-a593-946aa74f0f26.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!U6O_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e1b4fb7-5916-4367-a593-946aa74f0f26.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!U6O_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e1b4fb7-5916-4367-a593-946aa74f0f26.heic 424w, https://substackcdn.com/image/fetch/$s_!U6O_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e1b4fb7-5916-4367-a593-946aa74f0f26.heic 848w, https://substackcdn.com/image/fetch/$s_!U6O_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e1b4fb7-5916-4367-a593-946aa74f0f26.heic 1272w, https://substackcdn.com/image/fetch/$s_!U6O_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e1b4fb7-5916-4367-a593-946aa74f0f26.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!U6O_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e1b4fb7-5916-4367-a593-946aa74f0f26.heic" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5e1b4fb7-5916-4367-a593-946aa74f0f26.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:196774,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!U6O_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e1b4fb7-5916-4367-a593-946aa74f0f26.heic 424w, https://substackcdn.com/image/fetch/$s_!U6O_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e1b4fb7-5916-4367-a593-946aa74f0f26.heic 848w, https://substackcdn.com/image/fetch/$s_!U6O_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e1b4fb7-5916-4367-a593-946aa74f0f26.heic 1272w, https://substackcdn.com/image/fetch/$s_!U6O_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e1b4fb7-5916-4367-a593-946aa74f0f26.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Despu&#233;s del anuncio de las fechas de la <a href="https://developer.apple.com/wwdc24/">WWDC de 2024</a>, sobre la que os dimos todos los detalles y c&#243;mo seguirla en la <a href="https://applecoding.substack.com/p/la-wwdc-traera-una-interfaz-asombrosa?r=37jt22">pasada edici&#243;n de esta publicaci&#243;n</a>, empezamos la <em>silly season</em>. Si no hab&#237;a empezado ya, porque raro es el momento en que <strong>los rumores no sobrevuelan la actualidad</strong> tecnol&#243;gica. Sea como fuere, Apple sigue a lo suyo. Esta semana public&#243; la segunda versi&#243;n de su modelo grande de lenguaje (LLM) llamado <strong>Ferret</strong>, que desarrolla junto a la <strong>Universidad de Columbia</strong>. Recordemos que se trata de un modelo experto en el campo de la visi&#243;n computerizada. En <strong>Apple Coding</strong> nos adelantaban <a href="https://cuonda.com/apple-coding-daily/ferret-el-modelo-de-vision-computerizada-de-apple">todos los detalles</a> en su primera versi&#243;n.</p><p>De aqu&#237; a la conferencia habr&#225; <strong>muchos rumores</strong>, algunos de ellos se ver&#225;n materializados en junio, otros m&#225;s adelante, incluso el a&#241;o que viene, y algunos ser&#225;n fruto del <em>clickbait</em> o una suerte de tel&#233;fono escacharrado. Nuestra recomendaci&#243;n es <strong>coger todo con pinzas y disfrutar el camino</strong>. Os dejamos nuestra <a href="https://cuonda.com/caffe-swift/lista-de-deseos-para-la-wwdc24">lista de deseos</a> en formato podcast de Caff&#232; Swift.</p><p>Lo que est&#225; completamente confirmado es que la <strong>pr&#243;xima versi&#243;n mayor de Swift</strong>, la sexta ya, debutar&#225; en alg&#250;n momento entre junio y septiembre. Si no quieres que te pille el toro, <a href="https://medium.com/jamf-engineering/swift-6-upgrade-preparation-0941fbea2db6">aqu&#237;</a> puedes leer sobre las <strong>novedades</strong> y c&#243;mo puedes <strong>adaptar tu c&#243;digo</strong>.</p><h3>Tomar atajos para traducir tus aplicaciones</h3><p>Xcode es querido y odiado a partes iguales. Esta compleja herramienta permite crear software para todas las plataformas de Apple. Entre sus ventajas est&#225; la interfaz, bastante limpia respecto a otros entornos similares sabiendo que de por s&#237; son herramientas complejas, pero no siempre funciona lo bien y lo r&#225;pido que nos gustar&#237;a. Respecto a esto &#250;ltimo, puedes aumentar tu productividad si conoces <a href="https://tanaschita.com/xcode-quicktip-learning-shortcuts/">los atajos de teclado</a> adecuados. </p><p>Una de las mejoras con el paso de los a&#241;os, que combina esfuerzos en el propio lenguaje <strong>Swift</strong>, los <strong>frameworks</strong> de desarrollo y el propio <strong>Xcode</strong>, ha sido la <strong>traducci&#243;n de aplicaciones</strong>. Aunque el idioma en el que se suelen programar la aplicaciones es el ingl&#233;s, los usuarios no tienen porqu&#233; saberlo. Una de las claves para aumentar el <strong>n&#250;mero de usuarios objetivo</strong> y que estos se sientan adem&#225;s c&#243;modos, es a&#241;adiendo tradiciones para, mientras m&#225;s idiomas, mejor. <a href="https://blog.ptrkstr.com/localize-a-swiftui-app">En esta pieza</a> puedes leer c&#243;mo hacerlo para aplicaciones escritas en <strong>SwiftUI</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FGh-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d06a4d4-92cd-482b-8eed-0c0b1afe0d5c.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FGh-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d06a4d4-92cd-482b-8eed-0c0b1afe0d5c.heic 424w, https://substackcdn.com/image/fetch/$s_!FGh-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d06a4d4-92cd-482b-8eed-0c0b1afe0d5c.heic 848w, https://substackcdn.com/image/fetch/$s_!FGh-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d06a4d4-92cd-482b-8eed-0c0b1afe0d5c.heic 1272w, https://substackcdn.com/image/fetch/$s_!FGh-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d06a4d4-92cd-482b-8eed-0c0b1afe0d5c.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FGh-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d06a4d4-92cd-482b-8eed-0c0b1afe0d5c.heic" width="1024" height="575" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4d06a4d4-92cd-482b-8eed-0c0b1afe0d5c.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:575,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:108687,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FGh-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d06a4d4-92cd-482b-8eed-0c0b1afe0d5c.heic 424w, https://substackcdn.com/image/fetch/$s_!FGh-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d06a4d4-92cd-482b-8eed-0c0b1afe0d5c.heic 848w, https://substackcdn.com/image/fetch/$s_!FGh-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d06a4d4-92cd-482b-8eed-0c0b1afe0d5c.heic 1272w, https://substackcdn.com/image/fetch/$s_!FGh-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d06a4d4-92cd-482b-8eed-0c0b1afe0d5c.heic 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Notificaciones que llevan a Roma</h3><p>La <strong>notificaciones</strong> son una parte si no fundamental, al menos importante para la gran mayor&#237;a de aplicaciones. Permiten <strong>interactuar con el usuario</strong> sin necesidad de que &#233;ste entre en la aplicaci&#243;n y a&#241;aden funcionalidad que de otra manera no ser&#237;a posible. Siempre se habla de notificaciones push pero es posible programar notificaciones <strong>de forma local</strong>. <a href="https://asynclearn.com/blog/programa-notificaciones-locales-usando-swift/">Este art&#237;culo</a> de AsyncLearn nos muestra como crearlas en SwiftUI, que dicho sea de paso, utiliza un hechizo que bien merecer&#237;a <strong>una API directa</strong> en esta WWDC.</p><p>Las notificaciones no s&#243;lo permiten <strong>abrir nuestra aplicaci&#243;n</strong> desde el banner del centro de notificaciones, tambi&#233;n podemos a&#241;adir par&#225;metros para llevar al usuario a un <strong>punto concreto</strong> de la navegaci&#243;n. Una forma de hacerlo <a href="https://swiftwithmajid.com/2024/04/09/deep-linking-for-local-notifications-in-swiftui/">pueden ser los deeplinks</a>. As&#237; podemos aprovechar su implementaci&#243;n si ya existe, o crearla para este caso, y usarla para que al ejecutar nuestra aplicaci&#243;n desde <strong>enlaces web</strong> mostremos el flujo deseado.</p><h3>Una reentrada de <em>any </em>cafeteros</h3><p>Un tema que nos apasiona, y nos quita el sue&#241;o a parte iguales, es la <strong>reentrada de actores</strong>. Donny Wals dedica un <a href="https://www.donnywals.com/actor-reentrancy-in-swift-explained/">extenso art&#237;culo</a> para explicarnos lo que es y propone algunas <strong>soluciones</strong> mientras esperamos una <strong>evoluci&#243;n de Swift</strong> que permita asigna un <strong>ejecutor exclusivo en un actor</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-0e_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9fc1339-9e7a-4250-a54d-2a800a72edc7.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-0e_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9fc1339-9e7a-4250-a54d-2a800a72edc7.heic 424w, https://substackcdn.com/image/fetch/$s_!-0e_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9fc1339-9e7a-4250-a54d-2a800a72edc7.heic 848w, https://substackcdn.com/image/fetch/$s_!-0e_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9fc1339-9e7a-4250-a54d-2a800a72edc7.heic 1272w, https://substackcdn.com/image/fetch/$s_!-0e_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9fc1339-9e7a-4250-a54d-2a800a72edc7.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-0e_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9fc1339-9e7a-4250-a54d-2a800a72edc7.heic" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f9fc1339-9e7a-4250-a54d-2a800a72edc7.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:301273,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-0e_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9fc1339-9e7a-4250-a54d-2a800a72edc7.heic 424w, https://substackcdn.com/image/fetch/$s_!-0e_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9fc1339-9e7a-4250-a54d-2a800a72edc7.heic 848w, https://substackcdn.com/image/fetch/$s_!-0e_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9fc1339-9e7a-4250-a54d-2a800a72edc7.heic 1272w, https://substackcdn.com/image/fetch/$s_!-0e_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9fc1339-9e7a-4250-a54d-2a800a72edc7.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Swift introdujo <em>any</em> hace alguna versiones, y endurecer&#225; las obligatoriedad de su uso para que, un simple vistazo al c&#243;digo, podamos observar el <strong>compromiso de rendimiento</strong> que le supone al compilador no saber el tipo antes de la ejecuci&#243;n. Vincent Pradeilles nos cuenta esto y las <strong>diferencias con su hermano mayor </strong><em><strong>Any</strong> </em>dentro de <a href="https://www.swiftwithvincent.com/blog/whats-the-difference-between-any-and-any">esta pieza</a>. </p><h3>Y poco m&#225;s</h3><p>Semanas de transici&#243;n hacia el gran evento, donde veremos mucho <strong>rumor</strong> y, tiene pinta que tambi&#233;n algunas <strong>cosas interesantes</strong> por el camino. Apple tiene <strong>mucho software</strong> y, como pas&#243; el a&#241;o anterior, deber&#225; <strong>soltar lastre</strong> para que la presentaci&#243;n inaugural no pase de la <em>hora y pico</em>. Los comentarios y el <em>feedback</em> son m&#225;s que bienvenidos, puedes hacerlo en nuestros canales habituales: correo electr&#243;nico caffeswift@gmail.com y la cuenta de X <a href="https://x.com/caffeswift">@caffeswift</a>.</p><p><strong>Nos leemos pronto, si Jobs quiere, y hasta entonces: un saludo y Good Apple Coding.</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://applecoding.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer Caff&#232; Swift Newsletter! Suscr&#237;bete gratis para recibir nuevas publicaciones y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[La WWDC traerá una Interfaz Asombrosa]]></title><description><![CDATA[La conferencia comenzar&#225; el 10 de Junio, las Persona atraviesan la ventana, el a&#241;o de Linux en el escritorio y art&#237;culos para desarrollar tus habilidades]]></description><link>https://applecoding.substack.com/p/la-wwdc-traera-una-interfaz-asombrosa</link><guid isPermaLink="false">https://applecoding.substack.com/p/la-wwdc-traera-una-interfaz-asombrosa</guid><dc:creator><![CDATA[Apple Coding]]></dc:creator><pubDate>Mon, 08 Apr 2024 15:52:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!mAy-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c31c9fc-c261-4c27-9c3b-77c4b4d8a724.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mAy-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c31c9fc-c261-4c27-9c3b-77c4b4d8a724.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mAy-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c31c9fc-c261-4c27-9c3b-77c4b4d8a724.heic 424w, https://substackcdn.com/image/fetch/$s_!mAy-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c31c9fc-c261-4c27-9c3b-77c4b4d8a724.heic 848w, https://substackcdn.com/image/fetch/$s_!mAy-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c31c9fc-c261-4c27-9c3b-77c4b4d8a724.heic 1272w, https://substackcdn.com/image/fetch/$s_!mAy-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c31c9fc-c261-4c27-9c3b-77c4b4d8a724.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mAy-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c31c9fc-c261-4c27-9c3b-77c4b4d8a724.heic" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2c31c9fc-c261-4c27-9c3b-77c4b4d8a724.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:176856,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mAy-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c31c9fc-c261-4c27-9c3b-77c4b4d8a724.heic 424w, https://substackcdn.com/image/fetch/$s_!mAy-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c31c9fc-c261-4c27-9c3b-77c4b4d8a724.heic 848w, https://substackcdn.com/image/fetch/$s_!mAy-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c31c9fc-c261-4c27-9c3b-77c4b4d8a724.heic 1272w, https://substackcdn.com/image/fetch/$s_!mAy-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c31c9fc-c261-4c27-9c3b-77c4b4d8a724.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Habemus</em> fecha. La <a href="https://developer.apple.com/wwdc24/">conferencia mundial de desarrolladores</a> de Apple, m&#225;s conocida como <strong>WWDC</strong>, de este a&#241;o 2024, se celebrar&#225; entre <strong>lunes 10 y el viernes 14</strong> <strong>de Junio</strong>. El evento comenzar&#225;, como cada a&#241;o, con la <a href="https://developer.apple.com/wwdc24/WWDC2024.ics">presentaci&#243;n de las &#250;ltimas novedades en el software y los sistemas operativos</a> de la compa&#241;&#237;a. Despu&#233;s tendremos otro de los platos fuertes. con el <strong>Platforms State of the Union</strong>, donde se explicar&#225;n m&#225;s a fondo los detalles t&#233;cnicos y las novedades <strong>enfocadas a los desarrolladores</strong>. Los siguientes d&#237;as, se ir&#225;n publicando otras charlas, m&#225;s <strong>cortas y monotem&#225;ticas,</strong> sobre las nuevas caracter&#237;sticas para programadores, dise&#241;adores y otros profesionales que quieran <strong>desarrollar productos</strong> en cualquiera de las plataformas ofrecidas por los de la manzana.</p><p>Aunque ya es tarde para apuntarse a lista y poder acudir en persona, el contenido es <strong>pre-producido</strong> y se emite <strong>on-line para todo el mundo</strong>. Podr&#225;s verlo todo a trav&#233;s de la aplicaci&#243;n <a href="https://apps.apple.com/es/app/apple-developer/id640199958">Developer</a>, y este a&#241;o tambi&#233;n un un nuevo <a href="https://www.youtube.com/@AppleDeveloper">canal de YouTube</a>. Las <strong>conferencias principales del primer d&#237;a</strong> se emiten adem&#225;s en la web de <a href="https://www.apple.com/es/apple-events/">eventos de Apple</a> y en la <a href="https://apps.apple.com/es/app/apple-tv/id1174078549">aplicaci&#243;n TV</a>. </p><p>Y por supuesto, podr&#225;s seguirlo desde nuestro canal de <a href="http://youtube.com/@applecoding">Youtube</a> o en <a href="http://twitch.tv/applecoding">Twitch</a> en directo con muchos amigos <em>developers</em> e <em>influencers</em> de tecnolog&#237;a. Un directo de m&#225;s de 6 horas donde cubriremos tanto la <em>keynote</em> inaugural como el evento <strong>Platforms: State of the Union</strong>. &#191;Te lo vas a perder?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Cj6r!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9d1ca54-6ff6-459e-b603-39be79f36ce5.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Cj6r!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9d1ca54-6ff6-459e-b603-39be79f36ce5.heic 424w, https://substackcdn.com/image/fetch/$s_!Cj6r!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9d1ca54-6ff6-459e-b603-39be79f36ce5.heic 848w, https://substackcdn.com/image/fetch/$s_!Cj6r!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9d1ca54-6ff6-459e-b603-39be79f36ce5.heic 1272w, https://substackcdn.com/image/fetch/$s_!Cj6r!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9d1ca54-6ff6-459e-b603-39be79f36ce5.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Cj6r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9d1ca54-6ff6-459e-b603-39be79f36ce5.heic" width="1176" height="392" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a9d1ca54-6ff6-459e-b603-39be79f36ce5.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:392,&quot;width&quot;:1176,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:47231,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Cj6r!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9d1ca54-6ff6-459e-b603-39be79f36ce5.heic 424w, https://substackcdn.com/image/fetch/$s_!Cj6r!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9d1ca54-6ff6-459e-b603-39be79f36ce5.heic 848w, https://substackcdn.com/image/fetch/$s_!Cj6r!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9d1ca54-6ff6-459e-b603-39be79f36ce5.heic 1272w, https://substackcdn.com/image/fetch/$s_!Cj6r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9d1ca54-6ff6-459e-b603-39be79f36ce5.heic 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Sobre lo que nos espera, podr&#237;amos hablar largo y tendido. No obstante, los pilares ser&#225;n precisamente dos. El vice-presidente de marketing de de Apple <a href="https://twitter.com/gregjoz/status/1772671384335925493?">public&#243; en X</a> que la conferencia ser&#237;a, <strong>Absolutely Incredible</strong>, con ambas letras en may&#250;scula. Junto con las <a href="https://es.wired.com/articulos/apple-presenta-realm-la-ia-que-promete-salvar-a-siri">novedades que la propia compa&#241;&#237;a ha presentado</a> en el campo de los <a href="https://www.google.com/url?sa=t&amp;source=web&amp;rct=j&amp;opi=89978449&amp;url=https://www.questionpro.com/blog/es/modelos-generativos/&amp;ved=2ahUKEwjokp7wq66FAxUI_rsIHQM6AXAQFnoECDIQAQ&amp;usg=AOvVaw0F3PzKvhmAxlYsUY6i7uxy">modelos generativos de lenguaje</a>, y la <a href="https://github.com/ml-explore/mlx/discussions/654">multitud de proyectos</a> que la comunidad ha ido creando con las herramientas ya publicadas, avecinan un gran paso en la incorporaci&#243;n de la <strong>IA tanto en el sistema como en las aplicaciones</strong>. Puedes escuchar m&#225;s detalles sobre <a href="https://cuonda.com/apple-coding-daily/mm1-el-modelo-de-ia-generativa-de-apple-para-rivalizar-con-gpt-de-openai">los modelos en los que trabajan</a> y lo que <a href="https://cuonda.com/apple-coding-daily/asi-sera-la-ia-generativa-que-apple-presentara-en-la-wwdc24">podr&#237;an presentar</a> en Apple Coding Daily. </p><p>El segundo tiene que ver con un <strong>redise&#241;o de la interfaz</strong>. Os adelant&#225;bamos que el lenguaje de dise&#241;o de visionOS podr&#237;a ser trasladado, primero a iOS y iPadOS y m&#225;s tarde a macOS. De esta forma, las interfaces tendr&#237;an el mismo estilo de <strong>capas, sombras difusas y transparencias basadas en materiales</strong>, suponiendo un salto del actual <em>flat-design</em> al <em>neomorfismo</em>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hPGK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6054a7f-e290-4a62-aca5-fe428215927c.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hPGK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6054a7f-e290-4a62-aca5-fe428215927c.heic 424w, https://substackcdn.com/image/fetch/$s_!hPGK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6054a7f-e290-4a62-aca5-fe428215927c.heic 848w, https://substackcdn.com/image/fetch/$s_!hPGK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6054a7f-e290-4a62-aca5-fe428215927c.heic 1272w, https://substackcdn.com/image/fetch/$s_!hPGK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6054a7f-e290-4a62-aca5-fe428215927c.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hPGK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6054a7f-e290-4a62-aca5-fe428215927c.heic" width="1024" height="576" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e6054a7f-e290-4a62-aca5-fe428215927c.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:576,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:57359,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hPGK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6054a7f-e290-4a62-aca5-fe428215927c.heic 424w, https://substackcdn.com/image/fetch/$s_!hPGK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6054a7f-e290-4a62-aca5-fe428215927c.heic 848w, https://substackcdn.com/image/fetch/$s_!hPGK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6054a7f-e290-4a62-aca5-fe428215927c.heic 1272w, https://substackcdn.com/image/fetch/$s_!hPGK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6054a7f-e290-4a62-aca5-fe428215927c.heic 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Algo menos de dos meses para salir de dudas y tambi&#233;n para ver los avances de la <a href="https://blog.swiftify.com/whats-new-in-swift-6-e875ca675a28">versi&#243;n 6 de Swift</a>.</p><h3>Persona sale de la ventana para emular experiencias y tutorales</h3><p>Algo que vimos en el contenido de la <strong>anterior WWDC</strong>, pero que no ha estado disponible hasta hace unos d&#237;as, son las <a href="https://developer.apple.com/documentation/groupactivities/adding-spatial-persona-support-to-an-activity">experiencias compartidas utilizando Spatial Persona</a>. Tras una nota de prensa de Apple, esta opci&#243;n se activ&#243; en todas las versiones 1.1 o superior del sistema de las Apple Vision Pro con las llamadas FaceTime. Esta suerte de avatar hiperrealista para las videollamadas, <strong>ha salido de la ventana</strong> donde estaba enclaustrado y ahora los otros interlocutores <strong>pueden verlo dentro de su entorno,</strong> <strong>manos incluidas</strong>. En <a href="https://cuonda.com/apple-coding-daily/probando-spatial-persona-en-apple-vision-pro">otro Apple Coding Daily</a> nos cuentan las posibilidades se abren a este respecto, pero recordemos, esta funcionalidad <strong>a&#250;n est&#225; en beta</strong>.</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;01598e86-91be-468e-964a-ce4f20941f63&quot;,&quot;duration&quot;:null}"></div><p>Otra de las noticias importantes, ha sido el cambio de las gu&#237;as de revisi&#243;n del App Store para <a href="https://developer.apple.com/news/?id=0kjli9o1">permitir emuladores</a>. Ahora se podr&#225;n subir aplicaciones que recreen <strong>hardware y software de otros sistemas</strong> y que permitan <strong>descargar contenido </strong>desde ellas. Eso si, el desarrollador es el &#250;nico responsable de que el contenido descargado tengas las licencias necesarias o que las ROMS usadas no sean las originales o est&#233;n dentro del <em>abandonware</em> necesario, como ya sucede con otros emuladores como ScummVM que llevan tiempo en el App Store porque no es m&#225;s que un int&#233;rprete de los <em>scripts</em> que daban vida a las aventuras gr&#225;ficas de LucasArts de hace a&#241;os. El quid est&#225; en no usar c&#243;digo protegido o ROMS (para las BIOS de las m&#225;quinas) copiadas <em>byte</em> a <em>byte</em> y que tengan propiedad intelectual.</p><p>La &#250;ltima noticia que os traemos tiene que ver con el sitio web para desarrolladores de Apple, que ha <a href="https://developer.apple.com/tutorials/develop-in-swift">incluido nuevos tutoriales</a> paso a paso para <strong>aprender el lenguaje Swift</strong>, y la creaci&#243;n <strong>aplicaciones con SwiftUI</strong> <strong>desde cero</strong>. Est&#225;n construidos con la <a href="https://www.swift.org/documentation/docc/">librer&#237;a DocC</a> que permite <strong>generar documentaci&#243;n y publicarla en un sitio web</strong> con una simple exportaci&#243;n. Recomendamos echar un vistazo, tanto a los tutoriales como a la librer&#237;a. De propina os dejamos uno de los tutoriales para <a href="https://developer.apple.com/tutorials/app-dev-training/caching-network-data#">cachear datos de red</a>.</p><h3>La fiesta en el lado servidor la paga Apple</h3><p>Aunque Swift y muchas de las librer&#237;as son open-source, <strong>el apoyo de las empresas</strong> es fundamental para el desarrollo de estos proyectos. Hace unas semanas, se anunciaba que Apple volv&#237;a a <a href="https://x.com/SwiftServerConf/status/1769754941835338067?s=20">patrocinar la Server Swift Conference</a>. Se confirma as&#237; la apuesta de los de California por esta comunidad y el <strong>uso del lenguaje m&#225;s all&#225; de sus plataformas </strong>dando un apoyo continuo al desarrollo de lado servidor.</p><p>Puede que las <strong>conexiones de red</strong> y el acceso a los servicios web sea una de las caracter&#237;sticas que m&#225;s aplicaciones implementen. Recibir y enviar informaci&#243;n desde y hacia un servidor, permite que el <strong>contenido</strong> de nuestra aplicaci&#243;n sea <strong>m&#225;s din&#225;mico</strong> y mantiene a los <strong>usuarios conectados</strong>. Si nunca hasta ahora has desarrollado fuera de los sistemas de Apple, URLSession habr&#225; sido tu aliado. Pero tambi&#233;n existe otra librer&#237;a llamada <a href="https://github.com/swift-server/async-http-client">AsyncHTTPClient</a>, que permite crear un <strong>cliente HTTP en Swift</strong>. Te dejamos <a href="https://swiftonserver.com/async-http-client-by-example/">este art&#237;culo</a> donde cuentan como utilizarla, y porqu&#233; puede ser m&#225;s conveniente en ciertas aplicaciones.</p><p>Seguimos de lado servidor con un sospechoso habitual, esta vez el genial Paul Hudson que nos ha sorprendido con una <strong>librer&#237;a para crear p&#225;ginas web est&#225;ticas</strong> llamada <a href="https://github.com/twostraws/Ignite">Ignite</a>. Pese a que ya exist&#237;an otras como <a href="https://github.com/JohnSundell/Plot">Plot</a>, en esta ocasi&#243;n la sintaxis es <strong>muy parecida a SwiftUI</strong>, lo que reduce la barrera de entrada para desarrolladores que ya conozcan el framework. &#161;Ya no hay excusa para no crear webs usando Swift!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bptL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8aa1d99-9f14-4404-853d-8b5fb081862b.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bptL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8aa1d99-9f14-4404-853d-8b5fb081862b.heic 424w, https://substackcdn.com/image/fetch/$s_!bptL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8aa1d99-9f14-4404-853d-8b5fb081862b.heic 848w, https://substackcdn.com/image/fetch/$s_!bptL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8aa1d99-9f14-4404-853d-8b5fb081862b.heic 1272w, https://substackcdn.com/image/fetch/$s_!bptL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8aa1d99-9f14-4404-853d-8b5fb081862b.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bptL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8aa1d99-9f14-4404-853d-8b5fb081862b.heic" width="1020" height="697" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b8aa1d99-9f14-4404-853d-8b5fb081862b.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:697,&quot;width&quot;:1020,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:126940,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!bptL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8aa1d99-9f14-4404-853d-8b5fb081862b.heic 424w, https://substackcdn.com/image/fetch/$s_!bptL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8aa1d99-9f14-4404-853d-8b5fb081862b.heic 848w, https://substackcdn.com/image/fetch/$s_!bptL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8aa1d99-9f14-4404-853d-8b5fb081862b.heic 1272w, https://substackcdn.com/image/fetch/$s_!bptL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8aa1d99-9f14-4404-853d-8b5fb081862b.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>El a&#241;o de Linux en el escritorio y el nuevo paradigma</h3><p>No es lo que imaginas. Desde que se liber&#243; el c&#243;digo de <strong>Swift</strong> y pas&#243; a ser un proyecto de software libre, ya se contaba con la <strong>compatibilidad de Linux</strong>. Esto permit&#237;a hacer aplicaciones para este sistema pero en <strong>modo terminal</strong>. S&#243;lo los <em>framework</em> SwiftUI, UIKit, y AppKit permiten construir aplicaciones gr&#225;ficas pero siempre dentro de los sistemas de Apple. En una <a href="https://www.swift.org/blog/adwaita-swift/">publicaci&#243;n del blog de Swift</a> nos presentaban a <a href="https://github.com/AparokshaUI/adwaita-swift">Adwaita</a>, una librer&#237;a de <strong>construcci&#243;n de aplicaciones con interfaz</strong> de usuario para distribuciones Linux con escrito GNOME. Webs, aplicaciones de Linux&#8230; &#161;Swift lo puede todo! Esta es un <em>wrapper</em> de la librer&#237;a libadwaita, en C++, pero con una capa de abstracci&#243;n que se parece mucho a SwiftUI.</p><p>Hacemos un doble mortal para hablaros de la dificultad de no dar <strong>soporte a versiones anteriores</strong> de los sistemas y poder as&#237; adoptar las &#250;ltimas novedades. Si hablamos de novedades, una a la que no se le ha dado su debida importancia es nuevo patr&#243;n <a href="https://developer.apple.com/documentation/observation">Observation</a>. Nos hemos topado con <a href="https://fatbobman.com/en/posts/new-frameworks-new-mindset/">esta pieza</a> sobre c&#243;mo este patr&#243;n y uno de los framework construidos sobre &#233;l, <a href="https://developer.apple.com/documentation/swiftdata">SwiftData</a>, suponen un <strong>cambio profundo</strong> en la forma de construir aplicaciones. Pese a las bondades de <strong>SwiftUI</strong> y <strong><a href="https://developer.apple.com/documentation/coredata/">CoreData</a></strong> hab&#237;a <strong>problemas inherentes a las capacidades del lenguaje</strong> que han quedado solucionadas con el uso de las <a href="https://docs.swift.org/swift-book/documentation/the-swift-programming-language/macros/">macros</a> y el paradigma de observaci&#243;n.</p><h3>Lo que necesitas es SwiftUI</h3><p>En esta edici&#243;n os traemos una serie de art&#237;culos sobre el framework para la <strong>creaci&#243;n de aplicaciones</strong> para dispositivos y sistemas de Apple. Aunque seguramente veamos <strong>cambios y mejoras en la WWDC</strong>, la versi&#243;n actual el capaz de hacer mucho y muy bien. Toda una app completa, desde 0 y al 99% libre de UIKit.</p><p>Para el aperitivo, cortes&#237;a de la casa, una pareja de lujo: crea tu propio <a href="https://swiftwithmajid.com/2024/04/02/trigger-value-pattern-in-swiftui/">patr&#243;n Trigger</a> usado por algunas <strong>APIs del propio framework</strong>, y un <a href="https://swiftwithmajid.com/2024/03/26/building-async-button-in-swiftui/">bot&#243;n as&#237;ncrono</a> con <strong>cancelaci&#243;n de tareas</strong>. Como entrante tenemos un art&#237;culo con una serie de consejos para <a href="https://tanaschita.com/swiftui-how-to-avoid-using-anyview/">evitar el contenedor AnyView.</a> No nos van a meter en la c&#225;rcel si lo usamos, pero para el <strong>funcionamiento interno de SwiftUI</strong>, hay una penalizaci&#243;n en el rendimiento.</p><p>De primero os traemos <a href="https://www.avanderlee.com/swiftui/key-press-events-detection/">una de teclas</a>. La API para <strong>detecci&#243;n de teclas</strong> es bastante <strong>sencilla y completa</strong> pero esconde <strong>algunas sombras</strong> con las que debemos tener cuidado. Como plato principal proponemos algo m&#225;s contundente. Esta pieza nos explica c&#243;mo funcionan los <a href="https://fatbobman.com/en/posts/tips-and-considerations-for-using-lazy-containers-in-swiftui/">contenedores din&#225;micos</a>, as&#237; como los <strong>posibles problemas</strong> a los que nos enfrentamos y <strong>algunos trucos</strong> para solucionarlos.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tJ8H!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad8a8562-a669-4577-845d-73077bcfa3d3.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tJ8H!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad8a8562-a669-4577-845d-73077bcfa3d3.heic 424w, https://substackcdn.com/image/fetch/$s_!tJ8H!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad8a8562-a669-4577-845d-73077bcfa3d3.heic 848w, https://substackcdn.com/image/fetch/$s_!tJ8H!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad8a8562-a669-4577-845d-73077bcfa3d3.heic 1272w, https://substackcdn.com/image/fetch/$s_!tJ8H!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad8a8562-a669-4577-845d-73077bcfa3d3.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tJ8H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad8a8562-a669-4577-845d-73077bcfa3d3.heic" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ad8a8562-a669-4577-845d-73077bcfa3d3.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:165428,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tJ8H!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad8a8562-a669-4577-845d-73077bcfa3d3.heic 424w, https://substackcdn.com/image/fetch/$s_!tJ8H!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad8a8562-a669-4577-845d-73077bcfa3d3.heic 848w, https://substackcdn.com/image/fetch/$s_!tJ8H!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad8a8562-a669-4577-845d-73077bcfa3d3.heic 1272w, https://substackcdn.com/image/fetch/$s_!tJ8H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad8a8562-a669-4577-845d-73077bcfa3d3.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Caf&#233; concurrente y as&#237;ncrono pero perfectamente aislado</h3><p>La secci&#243;n cafetera est&#225; dedicada a nuestro querido <strong>nuevo modelo de concurrencia y asincron&#237;a</strong> en general y a la forma en la que <strong>gestiona los hilos</strong> y la <strong>protecci&#243;n de acceso</strong> a variables en particular. Antes de nada, vamos a refrescar c&#243;mo <a href="https://swiftonserver.com/getting-started-with-structured-concurrency-in-swift/">funciona la concurrencia estructurada</a> con varios detalles, y una comparaci&#243;n con el ahora vetusto <a href="https://www.swiftbeta.com/grand-central-dispatch/">Grand Central Dispatch</a>, que aunque es parte de Swift, no puede evitar deberle mucho a estar concebida como una API en C que resulta poco &#8220;swifty&#8221;.</p><p>Conectando con la secci&#243;n anterior tenemos <a href="https://fatbobman.com/en/posts/swiftui-views-and-mainactor/">esta pieza</a> dedicada a c&#243;mo usan el <strong>MainActor</strong> las vistas de <strong>SwiftUI</strong>. Y <a href="https://swiftwithmajid.com/2024/03/20/where-swift-concurrency-will-run-your-function/">otro art&#237;culo muy curioso</a> que intenta arrojar sobre d&#243;nde se ejecutan las funciones concurrentes. Lectura 100% recomendada porque aunque la <strong>intenci&#243;n de la API es abstraernos de hilos y colas</strong>, podemos tener comportamientos inesperados si no tenemos claros algunos conceptos.</p><p>Por &#250;ltimo traemos dos art&#237;culos para <strong>proteger el acceso a recursos compartidos</strong>.  <a href="https://massicotte.org/isolation-intuition">Una pieza</a> pone foco en c&#243;mo funciona el <strong>aislamiento en Swift</strong> y <a href="https://swiftonserver.com/structured-concurrency-and-shared-state-in-swift/">otra entrada</a> en c&#243;mo <strong>compartir el estado</strong>.</p><h3>Y poco m&#225;s</h3><p>Huele a WWDC y pronto os informaremos con m&#225;s detalle del seguimiento que realizaremos del mismo. Mientras tanto, muchas gracias como siempre por el tiempo que dedicas a leernos. Por cierto: a partir de ahora tendr&#225;s la <em>newsletter</em> en tu email, Jobs mediante, los lunes en vez de los mi&#233;rcoles. Los comentarios y el <em>feedback</em> son m&#225;s que bienvenidos, puedes hacerlo en nuestros canales habituales: correo electr&#243;nico caffeswift@gmail.com y la cuenta de X <a href="https://x.com/caffeswift">@caffeswift</a>.</p><p><strong>Nos leemos pronto, si Jobs quiere, y hasta entonces: un saludo y Good Apple Coding.</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://applecoding.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer Caff&#232; Swift Newsletter! Suscr&#237;bete gratis para recibir nuevas publicaciones y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Oro parece, sideloading no es]]></title><description><![CDATA[Tambi&#233;n un repaso a las novedades actuales y futuras de Swift, herramientas y trucos para facilitar el desarrollo de aplicaciones, y creaci&#243;n de mini juegos]]></description><link>https://applecoding.substack.com/p/oro-parece-sideloading-no-es</link><guid isPermaLink="false">https://applecoding.substack.com/p/oro-parece-sideloading-no-es</guid><dc:creator><![CDATA[Apple Coding]]></dc:creator><pubDate>Thu, 21 Mar 2024 11:30:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_s2U!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60c4cda3-aca8-4b6c-995d-88390fbc7b77.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_s2U!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60c4cda3-aca8-4b6c-995d-88390fbc7b77.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_s2U!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60c4cda3-aca8-4b6c-995d-88390fbc7b77.heic 424w, https://substackcdn.com/image/fetch/$s_!_s2U!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60c4cda3-aca8-4b6c-995d-88390fbc7b77.heic 848w, https://substackcdn.com/image/fetch/$s_!_s2U!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60c4cda3-aca8-4b6c-995d-88390fbc7b77.heic 1272w, https://substackcdn.com/image/fetch/$s_!_s2U!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60c4cda3-aca8-4b6c-995d-88390fbc7b77.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_s2U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60c4cda3-aca8-4b6c-995d-88390fbc7b77.heic" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/60c4cda3-aca8-4b6c-995d-88390fbc7b77.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:188050,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_s2U!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60c4cda3-aca8-4b6c-995d-88390fbc7b77.heic 424w, https://substackcdn.com/image/fetch/$s_!_s2U!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60c4cda3-aca8-4b6c-995d-88390fbc7b77.heic 848w, https://substackcdn.com/image/fetch/$s_!_s2U!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60c4cda3-aca8-4b6c-995d-88390fbc7b77.heic 1272w, https://substackcdn.com/image/fetch/$s_!_s2U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60c4cda3-aca8-4b6c-995d-88390fbc7b77.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Ya os ven&#237;amos avisando en ediciones anteriores que la DMA, o Ley de Mercados Digitales, de la Uni&#243;n Europa iba a traer cola. Se han anunciado nuevos <a href="https://developer.apple.com/news/?id=8c1m8hqt">cambios en la distribuci&#243;n de aplicaciones</a> para iOS que realizan los de Cupertino. Lo m&#225;s importante, y la novedad en este caso, es la nueva forma de<a href="https://developer.apple.com/support/web-distribution-eu/"> distribuci&#243;n mediante una p&#225;gina web</a>. Ya no hace falta adherirse a una tienda de aplicaciones de terceros, pero algunas de las condiciones pasan por tener una aplicaci&#243;n con m&#225;s de <strong>un mill&#243;n de instalaciones</strong> en el &#250;ltimo a&#241;o. En resumidas cuentas, que no ser&#225; una selva, y que se necesita la <strong>aprobaci&#243;n y notarizaci&#243;n</strong> de la propia Apple. &#161;Ah! Y por supuesto, no est&#225; exentas del <a href="https://developer.apple.com/support/core-technology-fee/">Core Technology Fee</a>.</p><p>No hay confirmaci&#243;n oficial, pero el anuncio repentino parece estar motivado por las <strong>voces discordantes</strong> acerca del cumplimiento de la nueva ley, pues no parec&#237;an suficientes los cambios anunciados anteriormente. <strong>La multa puede ser muy alta</strong> y la compa&#241;&#237;a ha preferido poner ya la venda, ante la gravedad de la posible herida. No sabemos si este ser&#225; el &#250;ltimo cambio, pero lo que si esperamos es seguir aqu&#237; para cont&#225;roslo.</p><h3>Saludo a developers, lo que no puedes perderte de Swift 5.10 y lo que vendr&#225; en Swift 6</h3><p>Los de la manzana han publicado una <a href="https://developer.apple.com/news/?id=x4g6c2ao">nueva edici&#243;n</a> de su suerte de <strong>newsletter mensual</strong> a modo de carta abierta a los desarrolladores. En ella aglutinan noticias y novedades, as&#237; como algunos art&#237;culos destacados sobre las herramientas y frameworks de <strong>creaci&#243;n de software</strong> para sus plataformas. Pese a que s&#243;lo referencia contenido de la propia empresa, es un <em>must</em> para <strong>mantenerse al d&#237;a</strong> y para descubrir alg&#250;n que otro <strong>truco o documentaci&#243;n</strong> que a lo mejor no ten&#237;amos en nuestro arsenal.</p><p>Si sois lectores habituales, ya sabr&#233;is que vamos por la <strong>versi&#243;n 5.10 del lenguaje Swift</strong>. Es cierto que ya no hicimos eco de la noticia en la pasada edici&#243;n, pero es m&#225;s cierto a&#250;n que el compa&#241;ero Donny Walls ha preparado una <a href="https://www.donnywals.com/everything-you-need-to-know-about-swift-5-10/">recopilaci&#243;n de los cambios m&#225;s importantes</a> que es canela fina.</p><p>Una caracter&#237;stica de las &#250;ltima versiones de Swift que a&#250;n no hemos tocado son los <strong>paquetes de par&#225;metros</strong>. Entre las mejoras m&#225;s plausibles est&#225;n la mejora en la implementaci&#243;n de vistas compuestas de SwiftUI como <strong>VStack</strong> y <strong>HStack</strong>, cuyo inicializador era distinto por cada n&#250;mero de par&#225;metros que puede soportar, con un m&#225;ximo de 10. Con esta caracter&#237;stica <strong>se dotaba al lenguaje de sintaxis</strong> para crear este tipo de <a href="https://github.com/apple/swift-evolution/blob/main/proposals/0393-parameter-packs.md">implementaciones mediante l&#243;gica</a>. Para mejorar la implementaci&#243;n y soportar m&#225;s casos de usos, <strong>Swift 6 prepara un cambio</strong> en c&#243;mo se construye esta caracter&#237;stica del lenguaje. Sus desarrolladores nos cuentan <a href="https://swift.org/blog/pack-iteration/">los detalles en el blog de Swift</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7-VS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a266573-18b6-41c2-b1a0-2245a8b39df2.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7-VS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a266573-18b6-41c2-b1a0-2245a8b39df2.heic 424w, https://substackcdn.com/image/fetch/$s_!7-VS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a266573-18b6-41c2-b1a0-2245a8b39df2.heic 848w, https://substackcdn.com/image/fetch/$s_!7-VS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a266573-18b6-41c2-b1a0-2245a8b39df2.heic 1272w, https://substackcdn.com/image/fetch/$s_!7-VS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a266573-18b6-41c2-b1a0-2245a8b39df2.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7-VS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a266573-18b6-41c2-b1a0-2245a8b39df2.heic" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1a266573-18b6-41c2-b1a0-2245a8b39df2.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:194316,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7-VS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a266573-18b6-41c2-b1a0-2245a8b39df2.heic 424w, https://substackcdn.com/image/fetch/$s_!7-VS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a266573-18b6-41c2-b1a0-2245a8b39df2.heic 848w, https://substackcdn.com/image/fetch/$s_!7-VS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a266573-18b6-41c2-b1a0-2245a8b39df2.heic 1272w, https://substackcdn.com/image/fetch/$s_!7-VS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a266573-18b6-41c2-b1a0-2245a8b39df2.heic 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Opcionales, TDD y visualizaci&#243;n de datos</h3><p>Ciertamente pecamos muchas veces de meternos demasiado en harina, as&#237; que hoy dedicamos una de las piezas a una caracter&#237;stica b&#225;sica y que define el lenguaje: los tipos opcionales. Desde SwiftLee nos muestran <a href="https://www.avanderlee.com/swift/optionals-in-swift-explained-5-things-you-should-know/">5 cosas que deber&#237;amos saber</a> sobre ese misterioso interrogante que plaga nuestros c&#243;digos.</p><p>En el mismo blog <a href="https://www.avanderlee.com/workflow/test-driven-development-tdd-for-bug-fixes-in-swift/">nos encontramos otro art&#237;culo</a> pero esta vez sobre algo muy distinto, el <em>Test-Driven Development</em>, o es cristiano, el <strong>desarrollo orientado a pruebas</strong>. Empezando por explicarnos que el primer paso del TDD es <strong>crear un test que falle</strong>, y luego crear el c&#243;digo para que &#233;ste se ejecute con &#233;xito. Y concluyendo que no es todo blanco o negro, y que una buena estrategia es utilizarlo donde realmente suponga una ventaja, como en la <strong>resoluci&#243;n de bugs</strong>.</p><p>Al hilo de la resoluci&#243;n de errores, veamos una forma muy &#250;til para <strong>depurar el trabajo con bases de datos</strong>. C&#243;mo no, en el mundo Swift y Apple estamos hablando de nuestra querida, y a veces tambi&#233;n odiada, librer&#237;a <strong>CoreData</strong>. Os dejamos un estupendo art&#237;culo de AsynLearn sobre <a href="https://asynclearn.com/blog/accediendo-base-de-datos-sqlite-de-core-data/">c&#243;mo visualizar la base de datos de nuestra aplicaci&#243;n</a> cuando est&#225; instalada en uno de los simuladores de <strong>Xcode</strong>. Spoiler: una vez localizado, no es m&#225;s que un archivo <strong>SQLite</strong>.</p><h3>Actores y variables de entorno</h3><p>Pese a que siempre me chirr&#237;a castellanizar el t&#233;rmino, qu&#233; juego dan los <strong>actores</strong> (el tipo <em>actor</em>). Parece magia que nuestro c&#243;digo as&#237;ncrono adem&#225;s de <strong>no bloqueante</strong>, sea <strong>seguro</strong> pero ojo, <a href="https://useyourloaf.com/blog/swiftui-tasks-blocking-the-mainactor/">podemos bloquear el hilo principal en SwiftUI</a> si no tenemos cuidado. Recordad que un gran poder, conlleva una gran responsabilidad.</p><p>Por un lado tenemos el <strong>MainActor</strong>, que asegura la ejecuci&#243;n en el hilo principal, y por ende la actualizaci&#243;n de la interfaz. Pero por otro, tambi&#233;n podemos crear actores globales para aislar y proteger la ejecuci&#243;n de nuestros tipos. <a href="https://swiftwithmajid.com/2024/03/12/global-actors-in-swift/">En esta pieza</a> tenemos una basta explicaci&#243;n y alg&#250;n que otro ejemplo de c&#243;mo implementarlo.</p><p>Todas la aplicaciones, aunque no seas consciente de ello, utilizan <strong>variables de entorno</strong> para modificar el comportamiento en compilaci&#243;n y ejecuci&#243;n, seg&#250;n <strong>el sistema y la configuraci&#243;n</strong> sobre la que se ejecuten. Existen varias formas de uso seg&#250;n el lenguaje y las plataformas, pero en lo que a Swift se refiere, <a href="https://swiftonserver.com/using-environment-variables-in-swift/">aqu&#237; tienes las formas m&#225;s extendidas</a> de gestionar este tipo de datos dentro de tus aplicaciones.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Vj79!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f02a7a6-caa4-4a38-a959-92414f6558ed.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Vj79!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f02a7a6-caa4-4a38-a959-92414f6558ed.heic 424w, https://substackcdn.com/image/fetch/$s_!Vj79!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f02a7a6-caa4-4a38-a959-92414f6558ed.heic 848w, https://substackcdn.com/image/fetch/$s_!Vj79!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f02a7a6-caa4-4a38-a959-92414f6558ed.heic 1272w, https://substackcdn.com/image/fetch/$s_!Vj79!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f02a7a6-caa4-4a38-a959-92414f6558ed.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Vj79!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f02a7a6-caa4-4a38-a959-92414f6558ed.heic" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1f02a7a6-caa4-4a38-a959-92414f6558ed.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:70972,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Vj79!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f02a7a6-caa4-4a38-a959-92414f6558ed.heic 424w, https://substackcdn.com/image/fetch/$s_!Vj79!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f02a7a6-caa4-4a38-a959-92414f6558ed.heic 848w, https://substackcdn.com/image/fetch/$s_!Vj79!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f02a7a6-caa4-4a38-a959-92414f6558ed.heic 1272w, https://substackcdn.com/image/fetch/$s_!Vj79!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f02a7a6-caa4-4a38-a959-92414f6558ed.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Minijuegos y pruebas de velocidad</h3><p>Dos breves para terminar. La primera es la <a href="https://swift.org/blog/byte-sized-swift-tiny-games-playdate/">adaptaci&#243;n de Playdate a Swift</a>. Se trata de una especie de <a href="https://play.date/">motor de creaci&#243;n de videojuegos</a> orientado a <strong>plataformas con muy bajos requisitos</strong>, que ha sido portado a Swift gracias al proyecto <a href="https://github.com/apple/swift-evolution/blob/main/visions/embedded-swift.md">Embedded Swift</a>. </p><p>En segundo t&#233;rmino hablamos de la <a href="https://webkit.org/blog/15131/speedometer-3-0-the-best-way-yet-to-measure-browser-performance/">tercera versi&#243;n de Speedometer</a>, el medidor de rendimiento de los navegadores web m&#225;s completo, desarrollado por el equipo de <a href="https://webkit.org">WebKit</a> y abalado por los <strong>principales motores de renderizado web</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!79m0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2035739-c9d7-4b5e-acf7-6c4a9dbd1ef0.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!79m0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2035739-c9d7-4b5e-acf7-6c4a9dbd1ef0.heic 424w, https://substackcdn.com/image/fetch/$s_!79m0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2035739-c9d7-4b5e-acf7-6c4a9dbd1ef0.heic 848w, https://substackcdn.com/image/fetch/$s_!79m0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2035739-c9d7-4b5e-acf7-6c4a9dbd1ef0.heic 1272w, https://substackcdn.com/image/fetch/$s_!79m0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2035739-c9d7-4b5e-acf7-6c4a9dbd1ef0.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!79m0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2035739-c9d7-4b5e-acf7-6c4a9dbd1ef0.heic" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f2035739-c9d7-4b5e-acf7-6c4a9dbd1ef0.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:177848,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!79m0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2035739-c9d7-4b5e-acf7-6c4a9dbd1ef0.heic 424w, https://substackcdn.com/image/fetch/$s_!79m0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2035739-c9d7-4b5e-acf7-6c4a9dbd1ef0.heic 848w, https://substackcdn.com/image/fetch/$s_!79m0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2035739-c9d7-4b5e-acf7-6c4a9dbd1ef0.heic 1272w, https://substackcdn.com/image/fetch/$s_!79m0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2035739-c9d7-4b5e-acf7-6c4a9dbd1ef0.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Nuevo Caff&#232; Swift, IA generativa</h3><p>&#191;Qu&#233; prepara Apple para los nuevos sistemas con la llegada de la IA generativa? En el &#250;ltimo programa, que ya ten&#233;is para escuchar como <a href="https://cuonda.com/caffe-swift/la-nueva-ia-generativa-de-apple-a-traves-de-swift">podcast en Cuonda</a> o ver c&#243;mo <a href="https://www.youtube.com/watch?v=1GMlWGAIvqw">v&#237;deo en Youtube</a>.</p><p>Arturo y Julio nos cuentan que han estado haciendo desde la &#250;ltima vez que grabaron, hace m&#225;s de un mes, y descubrimos cosas muy interesantes sobre <strong>notificaciones del kernel Darwin o el protocolo Transferable de Swift</strong>. </p><p>Luego nos comentan las noticias m&#225;s destacadas como la llegada de Swift 6 y luego se remangan para meterse en faena. &#191;C&#243;mo ser&#225;n las herramientas de IA generativa que Apple lanzar&#225; el pr&#243;ximo junio en la WWDC? &#191;Qu&#233; enfoque tendr&#225; Apple? &#191;C&#243;mo funcionan las distintas capas de IA para optimizar los resultados lo mejor posible? </p><p>Una charla cafetera sobre el futuro del desarrollo en entornos Apple a trav&#233;s de los pr&#243;ximos asistentes de IA generativa de tipo MMLLM.</p><h3>Y poco m&#225;s</h3><p>Os informamos de que ya van quedado menos plazas para la <strong>nueva edici&#243;n de nuestra formaci&#243;n intensiva <a href="https://acoding.academy/sdp24">Swift Developer Program</a></strong>. Ser&#225; impartido por Arturo Rivas y el pasado jueves pudimos ver <a href="https://www.youtube.com/watch?v=r7rUPRmirqE&amp;pp=ygUXbWFzdGVyY2xhc3MgYXBwbGVjb2Rpbmc%3D">un anticipo a modo de masterclass</a>. La formaci&#243;n empieza el d&#237;a 1 de Abril, pod&#233;is encontrar toda la informaci&#243;n en <a href="http://acoding.academy">nuestra web</a>. <strong>Debido a la alta demanda hemos tenido que realizar 2 convocatorias del formato para este a&#241;o.</strong></p><p>Aqu&#237; cerramos la persiana una semana m&#225;s. Esperamos vuestros comentarios, preguntas, y otras hierbas y matujos en nuestros canales habituales: correo electr&#243;nico caffeswift@gmail.com y la cuenta de X <a href="https://x.com/caffeswift">@caffeswift</a>.</p><p><strong>Nos leemos pronto, si Jobs quiere, y hasta entonces: un saludo y Good Apple Coding.</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://applecoding.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer Caff&#232; Swift Newsletter! Suscr&#237;bete gratis para recibir nuevas publicaciones y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Tú me multas, yo actualizo mi ordenador más mainstream]]></title><description><![CDATA[Tambi&#233;n el debut de Swift 5.10, fechas l&#237;mite para declarar la pol&#237;tica de privacidad, c&#243;mo es que a&#250;n no has adaptado tu aplicaci&#243;n a visionOS y algunos consejos para mejorar tus habilidades]]></description><link>https://applecoding.substack.com/p/tu-me-multas-yo-actualizo-mi-ordenador</link><guid isPermaLink="false">https://applecoding.substack.com/p/tu-me-multas-yo-actualizo-mi-ordenador</guid><dc:creator><![CDATA[Apple Coding]]></dc:creator><pubDate>Thu, 07 Mar 2024 08:00:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!tFGb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be79767-8dd9-4540-b529-8a19e19069cf.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tFGb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be79767-8dd9-4540-b529-8a19e19069cf.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tFGb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be79767-8dd9-4540-b529-8a19e19069cf.heic 424w, https://substackcdn.com/image/fetch/$s_!tFGb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be79767-8dd9-4540-b529-8a19e19069cf.heic 848w, https://substackcdn.com/image/fetch/$s_!tFGb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be79767-8dd9-4540-b529-8a19e19069cf.heic 1272w, https://substackcdn.com/image/fetch/$s_!tFGb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be79767-8dd9-4540-b529-8a19e19069cf.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tFGb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be79767-8dd9-4540-b529-8a19e19069cf.heic" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4be79767-8dd9-4540-b529-8a19e19069cf.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:152609,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tFGb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be79767-8dd9-4540-b529-8a19e19069cf.heic 424w, https://substackcdn.com/image/fetch/$s_!tFGb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be79767-8dd9-4540-b529-8a19e19069cf.heic 848w, https://substackcdn.com/image/fetch/$s_!tFGb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be79767-8dd9-4540-b529-8a19e19069cf.heic 1272w, https://substackcdn.com/image/fetch/$s_!tFGb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be79767-8dd9-4540-b529-8a19e19069cf.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Creo que no hemos tenido una semana medianamente tranquila desde que comenzamos con la newsletter, y por supuesto esta no lo va a ser. La <strong>Uni&#243;n Europea</strong> ya se ha pronunciado sobre el <strong>caso Spotify</strong> y <a href="https://www.xataka.com/legislacion-y-derechos/multa-historica-ue-a-apple-1-800-millones-euros-demanda-spotify">Apple tendr&#225; que pagar una multa de 1.800 millones de euros</a>. Los de la manzana por supuesto que, no s&#243;lo han recurrido la sentencia, si no que tambi&#233;n han lanzado una <a href="https://www.apple.com/newsroom/2024/03/the-app-store-spotify-and-europes-thriving-digital-music-market/">nota de prensa</a> con un tono bastante m&#225;s serio de lo acostumbrado. &#191;Venganza por el gol en la implementaci&#243;n de la <strong>DMA</strong>? Preparen las palomitas porque nos esperan varios a&#241;os con este tipo de disputas.</p><p>De vuelta en Cupertino, ellos siguen a lo suyo. Esta semana se ha lanzado la actualizaci&#243;n del ordenador m&#225;s vendido de la marca, el ligero pero mat&#243;n, <strong>MacBook Air</strong>. Ahora en dos sabores, de 13 y 15 pulgadas, y un flamante M3 que har&#225; las delicias del p&#250;blico general y de alg&#250;n que otro profesional. Ya conoc&#237;amos el factor forma y las bondades del nuevo procesador, pero rascando en la web nos encontramos con un dato curioso: Apple deja de lado los t&#233;rminos <em>Machine Learning</em> y <em>Aprendizaje Autom&#225;tico</em>&#8230; y para mencionar por primera vez la <strong>IA</strong>. </p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pqmJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1e2f11e-e9fa-4c5e-91be-b51fe4c1a98a.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pqmJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1e2f11e-e9fa-4c5e-91be-b51fe4c1a98a.heic 424w, https://substackcdn.com/image/fetch/$s_!pqmJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1e2f11e-e9fa-4c5e-91be-b51fe4c1a98a.heic 848w, https://substackcdn.com/image/fetch/$s_!pqmJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1e2f11e-e9fa-4c5e-91be-b51fe4c1a98a.heic 1272w, https://substackcdn.com/image/fetch/$s_!pqmJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1e2f11e-e9fa-4c5e-91be-b51fe4c1a98a.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pqmJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1e2f11e-e9fa-4c5e-91be-b51fe4c1a98a.heic" width="1456" height="339" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d1e2f11e-e9fa-4c5e-91be-b51fe4c1a98a.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:339,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Imagen.heic&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Imagen.heic" title="Imagen.heic" srcset="https://substackcdn.com/image/fetch/$s_!pqmJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1e2f11e-e9fa-4c5e-91be-b51fe4c1a98a.heic 424w, https://substackcdn.com/image/fetch/$s_!pqmJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1e2f11e-e9fa-4c5e-91be-b51fe4c1a98a.heic 848w, https://substackcdn.com/image/fetch/$s_!pqmJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1e2f11e-e9fa-4c5e-91be-b51fe4c1a98a.heic 1272w, https://substackcdn.com/image/fetch/$s_!pqmJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1e2f11e-e9fa-4c5e-91be-b51fe4c1a98a.heic 1456w" sizes="100vw"></picture><div></div></div></a><figcaption class="image-caption">Apple habla de equipos para ejecutar AI por primera vez</figcaption></figure></div><h3>Xcode 15.3 con Swift 5.10 como escudero</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5u3F!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10d890c7-be99-4695-bf58-788ca535b49b.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5u3F!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10d890c7-be99-4695-bf58-788ca535b49b.heic 424w, https://substackcdn.com/image/fetch/$s_!5u3F!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10d890c7-be99-4695-bf58-788ca535b49b.heic 848w, https://substackcdn.com/image/fetch/$s_!5u3F!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10d890c7-be99-4695-bf58-788ca535b49b.heic 1272w, https://substackcdn.com/image/fetch/$s_!5u3F!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10d890c7-be99-4695-bf58-788ca535b49b.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5u3F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10d890c7-be99-4695-bf58-788ca535b49b.heic" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/10d890c7-be99-4695-bf58-788ca535b49b.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:143413,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5u3F!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10d890c7-be99-4695-bf58-788ca535b49b.heic 424w, https://substackcdn.com/image/fetch/$s_!5u3F!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10d890c7-be99-4695-bf58-788ca535b49b.heic 848w, https://substackcdn.com/image/fetch/$s_!5u3F!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10d890c7-be99-4695-bf58-788ca535b49b.heic 1272w, https://substackcdn.com/image/fetch/$s_!5u3F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10d890c7-be99-4695-bf58-788ca535b49b.heic 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Ya se encuentra disponible la nueva versi&#243;n del <strong>IDE</strong> de desarrollo para sistemas de Apple. M&#225;s all&#225; de la correcci&#243;n de algunos errores y la compatibilidad con los <strong>SDKs</strong> de las &#250;ltimas versiones de los sistemas, las novedades y cambios est&#225;n en la versi&#243;n de <strong>Swift</strong> que lo acompa&#241;a. Una larga <a href="https://www.swift.org/blog/swift-5.10-released/">entrada en el blog del proyecto</a> subraya como principal mejora, aunque <strong>de momento opcional</strong>, un conjunto de comprobaciones de concurrencia para evitar <strong>condiciones de carrera</strong>. Adem&#225;s vuelven a hacer hincapi&#233; en que no habr&#225; m&#225;s versiones hasta <strong>Swift 6</strong>, y nos instan a activar dichas comprobaciones para estar preparados. La versi&#243;n est&#225; disponible desde hoy para <strong>macOS, Windows, y Linux</strong>.</p><h3>El barco de Vapor viene con fecha l&#237;mite para indicar qu&#233; datos recopilan las aplicaciones</h3><p>Continuamos con uno de los anuncios primaverales de Apple. Aunque este a&#241;o las versiones <strong>.4</strong> de los sistemas se ha adelantado debido a la <a href="https://commission.europa.eu/strategy-and-policy/priorities-2019-2024/europe-fit-digital-age/digital-markets-act-ensuring-fair-and-open-digital-markets_es">DMA</a>, ya tenemos <a href="https://developer.apple.com/news/?id=3d8a9yyh">fechas definitivas de alguno de los cambios anunciados</a> en la <strong>WWDC</strong> de 2023. Este es el periodo de margen que suelen dar a los desarrolladores para adaptarse. Hablamos pues de la <strong>privacidad de los datos que recogen las aplicaciones</strong>. Desde el <strong>13 de Marzo</strong> comenzar&#225;n los avisos a desarrollares que utilicen alguna de las <a href="https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api">APIs se&#241;aladas</a>, y no hayan sido declaradas en el <strong>manifiesto de privacidad</strong>. Ser&#225; a partir del <strong>1 de Mayo</strong> que cualquier aplicaci&#243;n que se intente subir al Store sin cumplir esta pol&#237;tica, ser&#225; rechazada. Toca remangarse y comprobar si nuestras aplicaciones necesitan alguna modificaci&#243;n.</p><p>Si no has entendido el t&#237;tulo, la siguiente noticia te lo puede aclarar. Y es que el framework para Swift de lado servidor por excelencia, conocido como <strong>Vapor</strong>, ha publicado <a href="https://blog.vapor.codes/posts/jwtkit-v5/">una actualizaci&#243;n en su blog</a>. En ella nos anuncian que el paquete <strong>JWTKit</strong> para trabajo con los <a href="https://jwt.io">JSON Web-Token</a> ha alcanzado la versi&#243;n 5. Los cambios son bastante notables porque, en aras de adaptarse a <strong>Swift 6</strong>, se han eliminado dependencias de librer&#237;as que usaban <strong>lenguaje C</strong>. Esto, adem&#225;s de incrementar la seguridad de la que dicho lenguaje carece, preparan los tipos para ser <a href="https://developer.apple.com/documentation/swift/sendable">seguros en acceso as&#237;ncrono</a> y mejorar la API haci&#233;ndola m&#225;s <em>Swifty</em>.</p><h3>visionOS tiene muchas posibilidades pero lo mejor es la facilidad para adaptar aplicaciones</h3><p>Durante los &#250;ltimos d&#237;as nos hemos encontrado con un aluvi&#243;n de art&#237;culos sobre creaci&#243;n y adaptaci&#243;n de aplicaciones a <strong>visionOS</strong>. Desde desarrolladores que cuentan en profundidad, y en v&#237;deo, c&#243;mo migraron una app en <a href="https://www.fline.dev/migrating-my-swiftui-app-to-visionos/">SwiftUI a visionOS en apenas 2 horas</a>, hasta los que van m&#225;s all&#225; al <a href="https://www.createwithswift.com/mastering-model3d-view/">insertar modelos 3D en sus desarrollos</a>. Estamos totalmente de acuerdo en que Apple ha puesto muchos esfuerzos en hacer de <strong>SwiftUI</strong> el framework de desarrollo de primer nivel para visionOS. Aunque ojo, conviene revisar <a href="https://blog.overdesigned.net/posts/2024-02-29-visionos-window-basics">los fondos y la posici&#243;n de las ventanas</a> para este <strong>nuevo interfaz</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HtvZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92b157cd-828a-403b-98a4-4341e85f1628_1600x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HtvZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92b157cd-828a-403b-98a4-4341e85f1628_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!HtvZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92b157cd-828a-403b-98a4-4341e85f1628_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!HtvZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92b157cd-828a-403b-98a4-4341e85f1628_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!HtvZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92b157cd-828a-403b-98a4-4341e85f1628_1600x900.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HtvZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92b157cd-828a-403b-98a4-4341e85f1628_1600x900.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/92b157cd-828a-403b-98a4-4341e85f1628_1600x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Screenshot of my Clocks app on Apple Vision Pro&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Screenshot of my Clocks app on Apple Vision Pro" title="Screenshot of my Clocks app on Apple Vision Pro" srcset="https://substackcdn.com/image/fetch/$s_!HtvZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92b157cd-828a-403b-98a4-4341e85f1628_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!HtvZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92b157cd-828a-403b-98a4-4341e85f1628_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!HtvZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92b157cd-828a-403b-98a4-4341e85f1628_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!HtvZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92b157cd-828a-403b-98a4-4341e85f1628_1600x900.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Las ventanas de visionOS est&#225;n a caballo entre iPadOS y macOS pero incluyen transparencia</figcaption></figure></div><p>La &#250;ltima de las piezas sobre esta tem&#225;tica nos lleva a una reflexi&#243;n. La nueva vista de <strong>ornaments</strong> es una de las nuevas caracter&#237;sticas de la interfaz m&#225;s notables. Tanto la implementaci&#243;n como su resultado, est&#225;n cuidados al detalle para convertirse en uno de los elementos clave. Pues bien, ya os adelant&#225;bamos hace unas semanas, que quiz&#225;s visionOS sea la <a href="https://applecoding.substack.com/i/141614689/rumores-y-avisos-a-navegantes">piedra de toque para unificar interfaces</a>. La similitud de la barra de reproducci&#243;n de <strong>M&#250;sica</strong> (y de <strong>Podcast</strong> en la &#250;ltima versi&#243;n de <strong>iOS</strong>), con este nuevo elemento, nos hace tenerlo un poco m&#225;s claro. Hasta aqu&#237; nuestra predicci&#243;n: &#161;tiembla <a href="https://www.google.com/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=&amp;cad=rja&amp;uact=8&amp;ved=2ahUKEwjP-N7bu92EAxWWV6QEHWROAyIQ9zB6BAg7EAM&amp;url=https%3A%2F%2Ftwitter.com%2Fmarkgurman%3F&amp;usg=AOvVaw2wIrBhUiOr_x0oOAAmTUNc&amp;opi=89978449">Mark Gurman</a>!</p><h3>Modulariza, empaqueta y no me toques los pipelines</h3><p>Una de las fortalezas de <strong>SwiftUI</strong> es que combinaba el propio framework reactivo de dise&#241;o de interfaces con otra pieza clave de software conocida como <strong>Combine</strong>. La cuesti&#243;n est&#225; en que luego lleg&#243; el nuevo modelo de concurrencia y asincron&#237;a y el uso de este &#250;ltimo qued&#243; relegado, precisamente, a esas ocasiones donde necesitamos <strong>reactividad</strong>. <em>&#191;Qu&#233; hizo Apple?</em> Unir los puntos. Mediante las <strong>AsyncSequence</strong> nos permiten crear una suerte de pipelines para observar cambios, pero se perd&#237;a el control del flujo. <em>&#191;Qu&#233; hizo Apple? </em>Unir de nuevo los puntos, pero esta vez liberando la librer&#237;a <a href="https://www.google.com/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=&amp;cad=rja&amp;uact=8&amp;ved=2ahUKEwi9go249N2EAxUhTKQEHR_bDs8QFnoECB0QAQ&amp;url=https%3A%2F%2Fgithub.com%2Fapple%2Fswift-async-algorithms&amp;usg=AOvVaw2ofM276M_LoN17atMqHc-x&amp;opi=89978449">Swift Async Algorithms</a>, que ya hemos mencionado alguna vez, pero hoy te traemos <a href="https://swiftwithmajid.com/2024/02/26/discovering-swift-async-algorithms-package/">un estupendo art&#237;culo con casos de uso</a>.</p><p>Continuamos con uno de esos campos de la programaci&#243;n donde normalmente s&#243;lo te adentras cuando surge alg&#250;n problema. Pongamos el caso de que tienes un proyecto grande, en el que el <strong>tiempo de compilaci&#243;n</strong> se te ha ido de las manos. O peor a&#250;n, has pasado horas montando un sistema de integraci&#243;n continua y ves que los costes se disparan porque el tiempo de construcci&#243;n se alarga en el tiempo. <a href="https://www.runway.team/blog/how-to-improve-ios-build-times-with-modularization">Esta pieza</a> nos da pistas sobre c&#243;mo, utilizando <strong>modularizaci&#243;n</strong> y una correcta <strong>gesti&#243;n de dependencias</strong>, podemos minimizar estos tiempos.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZZxK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d630d15-47f7-4a5a-b3f8-8397235f48c7.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZZxK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d630d15-47f7-4a5a-b3f8-8397235f48c7.heic 424w, https://substackcdn.com/image/fetch/$s_!ZZxK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d630d15-47f7-4a5a-b3f8-8397235f48c7.heic 848w, https://substackcdn.com/image/fetch/$s_!ZZxK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d630d15-47f7-4a5a-b3f8-8397235f48c7.heic 1272w, https://substackcdn.com/image/fetch/$s_!ZZxK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d630d15-47f7-4a5a-b3f8-8397235f48c7.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZZxK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d630d15-47f7-4a5a-b3f8-8397235f48c7.heic" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5d630d15-47f7-4a5a-b3f8-8397235f48c7.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:355431,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZZxK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d630d15-47f7-4a5a-b3f8-8397235f48c7.heic 424w, https://substackcdn.com/image/fetch/$s_!ZZxK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d630d15-47f7-4a5a-b3f8-8397235f48c7.heic 848w, https://substackcdn.com/image/fetch/$s_!ZZxK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d630d15-47f7-4a5a-b3f8-8397235f48c7.heic 1272w, https://substackcdn.com/image/fetch/$s_!ZZxK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d630d15-47f7-4a5a-b3f8-8397235f48c7.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Mockeando la concurrencia</h3><p>Siempre nos hemos mostrado reacios a utilizar librer&#237;as de terceros, pero en el caso de librer&#237;as para crear <strong>llamadas de red</strong>, directamente estamos en contra. <strong>URLSession</strong> tiene todo lo que un desarrollador necesita, es altamente personalizable, permite crear tipos de dominio sobre ella y algo que mucha gente no sabe: es perfectamente <strong>testable</strong>. Si se&#241;orito, es s&#250;per sencillo crear <em>mocks</em> sin tener que recurrir a un protocolo espec&#237;fico ni hechizos semejantes. El amigo <a href="https://twitter.com/v_pradeilles">Vincent Pradeilles</a> nos cuenta c&#243;mo hacerlo <a href="https://www.swiftwithvincent.com/blog/how-to-mock-any-network-call-with-urlprotocol">en este fant&#225;stico art&#237;culo</a>.</p><p>Y cerramos edici&#243;n, c&#243;mo no, con un art&#237;culo muy cafetero. En p&#225;rrafos anteriores, ya os contamos c&#243;mo <strong>async/wait</strong> introdujo la figura de los <strong>actor</strong>. De todos es sabido, y si no ahora ya lo sabes, que frente a la virtud de la <strong>asincron&#237;a</strong> est&#225; el pecado de las <strong>condiciones de carrera</strong>. Al crear procesos en paralelo, puede producirse la escritura de una variable a la vez que otra lectura o escritura, provocando un comportamiento inesperado del c&#243;digo. Seguro que te has preguntado alguna vez sobre magia detr&#225;s de este <em>aislamiento</em> de los actores. Pues <a href="https://www.massicotte.org/intro-to-isolation">deja de pregunt&#225;rtelo y descubre la verdad</a>.</p><h3>Y poco m&#225;s</h3><p>Recordad que tenemos en marcha <strong>nueva edici&#243;n de nuestra formaci&#243;n intensiva <a href="https://acoding.academy/sdp24">Swift Developer Program</a></strong>, que impartir&#225; nuestro compa&#241;ero Arturo Rivas y que ser&#225; vuestra puerta de entrada al desarrollo en Swift, SwiftUI y uso de red. Y que cerrar&#225; con una masterclass de desarrollo en Apple Vision Pro. Echadle un ojo a la informaci&#243;n en <a href="http://acoding.academy">nuestra web</a> pues empezamos el 1 de abril. <strong>La primera ocasi&#243;n en que convocamos 2 formaciones en un a&#241;o, dada la alta demanda de esta formaci&#243;n intensiva</strong>.</p><p>Cerramos otra nueva edici&#243;n que esperamos sea de vuestro agrado. Haznos saber lo que te gusta, y lo que no, en nuestros canales habituales: correo electr&#243;nico caffeswift@gmail.com y la cuenta de X <a href="https://x.com/caffeswift">@caffeswift</a>.</p><p><strong>Nos leemos pronto, si Jobs quiere, y hasta entonces: un saludo y Good Apple Coding.</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://applecoding.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer Caff&#232; Swift Newsletter! Suscr&#237;bete gratis para recibir nuevas publicaciones y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Swift 6 y la encriptación post cuántica]]></title><description><![CDATA[Tambi&#233;n recomendaciones sobre c&#243;mo mostrar tu aplicaci&#243;n al mundo, desierta tu lado servidor 2.0, el poder de SwiftUI y no faltamos a nuestra secci&#243;n final para muy cafeteros]]></description><link>https://applecoding.substack.com/p/swift-6-y-la-encriptacion-post-cuantica</link><guid isPermaLink="false">https://applecoding.substack.com/p/swift-6-y-la-encriptacion-post-cuantica</guid><dc:creator><![CDATA[Apple Coding]]></dc:creator><pubDate>Thu, 29 Feb 2024 11:26:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Eqrc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F215b3978-4d09-4f4f-b49a-02055b222ca1.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Eqrc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F215b3978-4d09-4f4f-b49a-02055b222ca1.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Eqrc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F215b3978-4d09-4f4f-b49a-02055b222ca1.heic 424w, https://substackcdn.com/image/fetch/$s_!Eqrc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F215b3978-4d09-4f4f-b49a-02055b222ca1.heic 848w, https://substackcdn.com/image/fetch/$s_!Eqrc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F215b3978-4d09-4f4f-b49a-02055b222ca1.heic 1272w, https://substackcdn.com/image/fetch/$s_!Eqrc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F215b3978-4d09-4f4f-b49a-02055b222ca1.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Eqrc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F215b3978-4d09-4f4f-b49a-02055b222ca1.heic" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/215b3978-4d09-4f4f-b49a-02055b222ca1.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:178573,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Eqrc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F215b3978-4d09-4f4f-b49a-02055b222ca1.heic 424w, https://substackcdn.com/image/fetch/$s_!Eqrc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F215b3978-4d09-4f4f-b49a-02055b222ca1.heic 848w, https://substackcdn.com/image/fetch/$s_!Eqrc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F215b3978-4d09-4f4f-b49a-02055b222ca1.heic 1272w, https://substackcdn.com/image/fetch/$s_!Eqrc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F215b3978-4d09-4f4f-b49a-02055b222ca1.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Esta semana no pasar&#225; a la historia, al menos a la que a esta newsletter ata&#241;e, por haber sido generosa en noticias y contenido. Pero conviene recordar que estamos a las puertas de la entrada en vigor de la <a href="https://www.larazon.es/tecnologia/estos-son-cambios-que-google-introducir-sus-servicios-ley-mercados-digitales_2024011765a82fcf160b5e00013dd5ab.html">Ley de Mercados Digitales</a>, y la puesta por tanto en producci&#243;n, de los <a href="https://www.xatakamovil.com/apple/ios-17-4-esta-a-vuelta-esquina-todas-novedades-que-llegaran-a-tu-iphone-muy-pronto">cambios que Apple ha realizado para iOS 17.4</a>. Despu&#233;s de varias betas y con el <strong>6 marzo como fecha l&#237;mite</strong> no se esperan cambios significativos.</p><h3>Un cambio tect&#243;nico en Swift</h3><p>Lo que si va a suponer un cambio significativo es la <strong>versi&#243;n 6 de Swift</strong>. A&#250;n hay varias caracter&#237;sticas en discusi&#243;n, y otras varias por cerrar a nivel implementaci&#243;n, pero ya tenemos el <strong>roadmap</strong> a seguir por parte del equipo al cargo. El <a href="https://forums.swift.org/t/swift-6-0-release-process/70220">proceso de lanzamiento</a> comenzar&#225; el <strong>15 de Marzo</strong> con la creaci&#243;n de la rama de desarrollo en el repositorio. Esta contendr&#225; los cambios a implementar en la versi&#243;n 6.0 y ser&#225;n incluidos mediante proceso de <a href="https://aprendegit.com/que-es-un-pull-request/">pull request</a> tras su discusi&#243;n en el <a href="https://github.com/apple/swift-evolution">foro de evoluci&#243;n de Swift</a>. Todo apunta a que incluir&#225; novedades como la <a href="https://useyourloaf.com/blog/strict-concurrency-checking-in-swift-packages/">comprobaci&#243;n estricta de concurrencia</a>, aunque no es seguro que se implementen otras caracter&#237;sticas como un modelo de memoria que <strong>remplace</strong> a <a href="https://docs.swift.org/swift-book/documentation/the-swift-programming-language/automaticreferencecounting/">ARC</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Cvcf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8cad395-cc4f-4b18-b12b-e551c8413b26.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Cvcf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8cad395-cc4f-4b18-b12b-e551c8413b26.heic 424w, https://substackcdn.com/image/fetch/$s_!Cvcf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8cad395-cc4f-4b18-b12b-e551c8413b26.heic 848w, https://substackcdn.com/image/fetch/$s_!Cvcf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8cad395-cc4f-4b18-b12b-e551c8413b26.heic 1272w, https://substackcdn.com/image/fetch/$s_!Cvcf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8cad395-cc4f-4b18-b12b-e551c8413b26.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Cvcf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8cad395-cc4f-4b18-b12b-e551c8413b26.heic" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f8cad395-cc4f-4b18-b12b-e551c8413b26.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:186667,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Cvcf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8cad395-cc4f-4b18-b12b-e551c8413b26.heic 424w, https://substackcdn.com/image/fetch/$s_!Cvcf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8cad395-cc4f-4b18-b12b-e551c8413b26.heic 848w, https://substackcdn.com/image/fetch/$s_!Cvcf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8cad395-cc4f-4b18-b12b-e551c8413b26.heic 1272w, https://substackcdn.com/image/fetch/$s_!Cvcf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8cad395-cc4f-4b18-b12b-e551c8413b26.heic 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Swift 6 va a llegar&#8230; en septiembre de 2024 junto a las nuevas versiones de iOS y resto de sistemas.</figcaption></figure></div><p>Veremos como se desarrolla el proceso, pero lo m&#225;s seguro es que veamos ya charlas en la <strong>WWDC</strong> de este mes de Junio y que la versi&#243;n final se libere en Septiembre, junto con la llegada de <strong>nuevas versiones de los sistemas operativos</strong> de Apple. En el hemisferio norte a&#250;n es invierno pero ya avistamos un verano movidito para los desarrolladores.</p><h3>Despierta tu lado servidor: Hummingbird 2.0</h3><p>Uno de los mejores frameworks para desarrollo de aplicaciones de <strong>lado servidor</strong>, y un f&#233;rreo competidor de <a href="https://vapor.codes">Vapor</a>, anuncia <a href="https://swiftonserver.com/whats-new-in-hummingbird-2/">su segunda versi&#243;n</a> y viene cargada de novedades. <a href="https://github.com/hummingbird-project/hummingbird">Hummingbird</a> es una herramienta de desarrollo en lenguaje Swift para aplicaciones de <strong>servidor HTTP</strong>. Naci&#243; con el foco en la simplicidad para aquellos desarrolladores que no quisieran complicaciones. Entre las novedades principales se encuentran la migraci&#243;n pr&#225;cticamente completa al nuevo modelo de asincron&#237;a y concurrencia <strong>async/await</strong>,<strong> </strong>o la adopci&#243;n de la versi&#243;n 2 de la librer&#237;a para dar <a href="https://github.com/swift-server/swift-service-lifecycle">servicio al ciclo de vida</a> de aplicaciones Swift. Tambi&#233;n hacen uso de la reci&#233;n liberada librer&#237;a de <a href="https://github.com/apple/swift-http-types">tipos HTTP</a> de Apple, implementan los <em>Jobs</em> mediante <strong>TaskGroup </strong>y han fusionado la librer&#237;a <a href="https://github.com/hummingbird-project/hummingbird-core">Core</a> con la rama principal a la espera de la aparici&#243;n de la nueva implementaci&#243;n de <strong>Foundation</strong>, <a href="https://www.infoq.com/news/2022/12/apple-swift-foundation-rewrite/">modular y reescrita en Swift</a>.</p><p>Sin duda una noticia estupenda, hayas o no desarrollado aplicaciones de lado servidor previamente. Si alg&#250;n d&#237;a lo necesitas o si utilizas alternativas como <strong>Vapor</strong>, no est&#225; de m&#225;s darle una oportunidad. Incluso si ya has hecho tu pinitos, l&#225;nzate a la adopci&#243;n de la nueva versi&#243;n porque supone sin duda un <strong>salto en cuanto a simplicidad y robustez</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kehi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd09a4519-f0cd-48ff-ab79-74e7b88c0693.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kehi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd09a4519-f0cd-48ff-ab79-74e7b88c0693.heic 424w, https://substackcdn.com/image/fetch/$s_!kehi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd09a4519-f0cd-48ff-ab79-74e7b88c0693.heic 848w, https://substackcdn.com/image/fetch/$s_!kehi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd09a4519-f0cd-48ff-ab79-74e7b88c0693.heic 1272w, https://substackcdn.com/image/fetch/$s_!kehi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd09a4519-f0cd-48ff-ab79-74e7b88c0693.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kehi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd09a4519-f0cd-48ff-ab79-74e7b88c0693.heic" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d09a4519-f0cd-48ff-ab79-74e7b88c0693.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:195421,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kehi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd09a4519-f0cd-48ff-ab79-74e7b88c0693.heic 424w, https://substackcdn.com/image/fetch/$s_!kehi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd09a4519-f0cd-48ff-ab79-74e7b88c0693.heic 848w, https://substackcdn.com/image/fetch/$s_!kehi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd09a4519-f0cd-48ff-ab79-74e7b88c0693.heic 1272w, https://substackcdn.com/image/fetch/$s_!kehi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd09a4519-f0cd-48ff-ab79-74e7b88c0693.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>&#191;No quer&#237;as cifrado? Pues toma dos tazas</h3><p>Otro de los anuncios importantes de la semana, ha sido la inclusi&#243;n del <a href="https://security.apple.com/blog/imessage-pq3/">est&#225;ndar PQ3 de cifrado</a> para iMessage. Empezando <strong>desde iOS 17.4</strong> y equivalentes, Apple migrar&#225; a este nuevo sistema de cifrado todas las conversaciones en las que se pueda aplicar. Esto quiere decir, aquellas cuyos integrantes tengas instaladas estas versiones, o una mayor, en todos sus dispositivos. &#191;Qu&#233; aporta esta nueva tecnolog&#237;a? <strong>Seguridad frente a los </strong><em><strong>temidos</strong></em><strong> procesadores cu&#225;nticos</strong> que est&#225;n por venir.  La velocidad de proceso que podr&#237;an alcanzar, pone en tela de juicio muchos de los sistema de encriptaci&#243;n de datos actuales. El problema es que podr&#237;an generar secuencias de claves tan r&#225;pido que comprometer&#237;an el cifrado por una suerte de ataque de fuerza bruta.</p><p>El art&#237;culo del blog de Apple entra en detalle sobre los distintos niveles de encriptaci&#243;n y qu&#233; algoritmos a&#241;ade cada uno de ellos. Tenemos el m&#225;s b&#225;sico de clave &#250;nica, luego estar&#237;a el <strong>punto a punto</strong> (donde cada uno tiene su llave) y por encima de estos, tendr&#237;amos a <a href="https://en.wikipedia.org/wiki/Signal_Protocol">Signal Protocol</a>. Este a&#241;ade una capa m&#225;s de seguridad al establecer tanto sesiones como <strong>rotaci&#243;n de claves</strong>, e incluso aleatorizaci&#243;n en puntos intermedios para que, si se compromete un mensaje, no puedan leerse ni los anteriores, ni los siguientes. En la actualidad, las empresas que presumen de cifrado punto a punto, utilizan principalmente Signal o alguna variante. Apple quiere ir <strong>un paso m&#225;s all&#225;</strong> a&#241;adiendo nuevas rotaciones dentro de la cadena de cifrado para hacerla a&#250;n m&#225;s robusta.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LUcR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbf0512c-3c5e-484c-9a69-1bcacc6aa834_645x316.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LUcR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbf0512c-3c5e-484c-9a69-1bcacc6aa834_645x316.jpeg 424w, https://substackcdn.com/image/fetch/$s_!LUcR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbf0512c-3c5e-484c-9a69-1bcacc6aa834_645x316.jpeg 848w, https://substackcdn.com/image/fetch/$s_!LUcR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbf0512c-3c5e-484c-9a69-1bcacc6aa834_645x316.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!LUcR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbf0512c-3c5e-484c-9a69-1bcacc6aa834_645x316.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LUcR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbf0512c-3c5e-484c-9a69-1bcacc6aa834_645x316.jpeg" width="645" height="316" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fbf0512c-3c5e-484c-9a69-1bcacc6aa834_645x316.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:316,&quot;width&quot;:645,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Imagen para el art&#237;culo titulado Apple actualiza iMessage con un nuevo protocolo de cifrado &#8216;post-cu&#225;ntico&#8217;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Imagen para el art&#237;culo titulado Apple actualiza iMessage con un nuevo protocolo de cifrado &#8216;post-cu&#225;ntico&#8217;" title="Imagen para el art&#237;culo titulado Apple actualiza iMessage con un nuevo protocolo de cifrado &#8216;post-cu&#225;ntico&#8217;" srcset="https://substackcdn.com/image/fetch/$s_!LUcR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbf0512c-3c5e-484c-9a69-1bcacc6aa834_645x316.jpeg 424w, https://substackcdn.com/image/fetch/$s_!LUcR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbf0512c-3c5e-484c-9a69-1bcacc6aa834_645x316.jpeg 848w, https://substackcdn.com/image/fetch/$s_!LUcR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbf0512c-3c5e-484c-9a69-1bcacc6aa834_645x316.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!LUcR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbf0512c-3c5e-484c-9a69-1bcacc6aa834_645x316.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Captura de pantalla: Blog de Apple</figcaption></figure></div><h3>Lo primero que se ve de una app y los mapas de SwiftUI</h3><p>Ya hemos <a href="https://applecoding.substack.com/i/140897741/asi-es-tu-icono-asi-es-tu-app">hablado de los iconos</a> y de c&#243;mo mejorar la presencia de nuestras aplicaciones en al <strong>App Store</strong>. Pero una vez que el usuario se ha descargado el software, es muy probable que lo primero que vea sea el m&#237;tico <em>onboarding</em>. Este puede consistir en <strong>una o varias pantallas</strong> que presentan ya no s&#243;lo la aplicaci&#243;n, si no en muchas ocasiones adem&#225;s, un peque&#241;o tutorial sobre c&#243;mo usarla. Os traemos <a href="https://www.javiertorne.com/blog/como-hacer-buen-onboarding">esta pieza</a> de <a href="https://www.javiertorne.com/sobre-mi">Javier Torn&#233;</a> donde nos muestra las claves y la importancia de que el usuario empiece a su usar nuestra aplicaci&#243;n con bien pie.</p><p>Continuando con la obra y milagros de <strong>SwiftUI</strong>, hoy tenemos un art&#237;culo sobre lo f&#225;cil que es trabajar con los <a href="https://asynclearn.com/blog/mapkit-mapfeature-selection-swiftui/">puntos de inter&#233;s en los mapas</a>. Podemos decidir cu&#225;les mostramos, gestionar la selecci&#243;n, personalizar c&#243;mo se muestran&#8230; y todo con <strong>una API muy sencilla</strong>. Ninguna edici&#243;n de esta newsletter sin mostraros todo de lo que SwiftUI es capaz.</p><h3>Swift para cafeteros: Librer&#237;as y extensiones</h3><p>Una de las caracter&#237;sticas m&#225;s celebradas de Swift son las <strong>extensiones</strong>. La <a href="https://scotteg.github.io/protocol-oriented-programming">programaci&#243;n orientada a protocolos</a> no ser&#237;an ni de lejos tan potente sin el uso de las mismas. Nos permiten dos cosas: extender (valga la redundancia) la funcionalidad de tipos importados de otros m&#243;dulos, pero tambi&#233;n implementar un <strong>comportamiento por defecto</strong> para m&#233;todos de los protocolos. Es una especie de herencia basada en la composici&#243;n, es decir, aportando <strong>funcionalidad modular en lugar de jer&#225;rquica</strong>. Tanto si dominas las extensiones como si has desconectado hace un par de frases, te recomendamos echar un ojo a <a href="https://www.avanderlee.com/swift/extensions/">esta pieza</a>.</p><p>Y aqu&#237; est&#225;n nuestras amigas las <strong>librer&#237;as de terceros</strong>. Me ahorrar&#233; los juicios de valor para ir directo al grano: os traemos una <a href="https://scottsmithdev.com/encapsulate-and-generalize-in-swift">forma de mantenerlas a raya</a>. El truco consiste en dos fases. La primera es <strong>encapsular el c&#243;digo</strong> dentro de entidades propias. As&#237; evitamos hacer  un <em>import</em> en cada fichero que lo necesite. Y la segunda es generalizar sus tipos. Con una suerte de traducci&#243;n a <strong>tipos de dominio</strong>, lograremos una interfaz desacoplada, de forma que podamos sustituir dicha librer&#237;a en el futuro sin cambiar el contrato de nuestras API.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NvJ_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41de117a-ec57-4cce-b449-d8bb4933da91.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NvJ_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41de117a-ec57-4cce-b449-d8bb4933da91.heic 424w, https://substackcdn.com/image/fetch/$s_!NvJ_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41de117a-ec57-4cce-b449-d8bb4933da91.heic 848w, https://substackcdn.com/image/fetch/$s_!NvJ_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41de117a-ec57-4cce-b449-d8bb4933da91.heic 1272w, https://substackcdn.com/image/fetch/$s_!NvJ_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41de117a-ec57-4cce-b449-d8bb4933da91.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NvJ_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41de117a-ec57-4cce-b449-d8bb4933da91.heic" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/41de117a-ec57-4cce-b449-d8bb4933da91.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:129475,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NvJ_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41de117a-ec57-4cce-b449-d8bb4933da91.heic 424w, https://substackcdn.com/image/fetch/$s_!NvJ_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41de117a-ec57-4cce-b449-d8bb4933da91.heic 848w, https://substackcdn.com/image/fetch/$s_!NvJ_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41de117a-ec57-4cce-b449-d8bb4933da91.heic 1272w, https://substackcdn.com/image/fetch/$s_!NvJ_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41de117a-ec57-4cce-b449-d8bb4933da91.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Y poco m&#225;s</h3><p>Cerramos no sin antes dejar constancia que Tim Cook coment&#243; el otro d&#237;a en una reuni&#243;n de accionistas, que las pr&#243;ximas versiones de los sistemas de Apple <em><a href="https://www.applesfera.com/apple-1/abriremos-nuevos-caminos-tim-cook-promete-que-apple-sorprendera-ia-generativa-este-ano">&#8220;abrir&#225;n nuevos caminos&#8221;</a></em><a href="https://www.applesfera.com/apple-1/abriremos-nuevos-caminos-tim-cook-promete-que-apple-sorprendera-ia-generativa-este-ano"> en cuanto a IA generativa</a>. </p><p>Por nuestra parte, abrimos desde ya nuevos caminos, pues el <strong>1 de marzo se lanza una nueva edici&#243;n de nuestra formaci&#243;n intensiva <a href="https://acoding.academy/sdp24">Swift Developer Program</a></strong>, que impartir&#225; nuestro compa&#241;ero Arturo Rivas y que ser&#225; vuestra puerta de entrada al desarrollo en Swift, SwiftUI y uso de red. Y que cerrar&#225; con una masterclass de desarrollo en Apple Vision Pro. Echadle un ojo a la informaci&#243;n en <a href="http://acoding.academy">nuestra web</a> pues empezamos el 1 de abril. <strong>La primera ocasi&#243;n en que convocamos 2 formaciones en un a&#241;o, dada la alta demanda de esta formaci&#243;n intensiva</strong>.</p><p>Hemos empezado sin muchas pretensiones pero creo que ha quedado un edici&#243;n bastante redonda. &#191;Opinas lo mismo? Esperamos que si porque no queremos perder el honor del tiempo que dedicas a leernos. Si quieres contactar con nosotros puedes hacerlo en nuestro correo caffeswift@gmail.com o en la cuenta de X <a href="https://x.com/caffeswift">@caffeswift</a>.</p><p><strong>Nos leemos pronto, si Jobs quiere, y hasta entonces: un saludo y Good Apple Coding.</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://applecoding.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer Caff&#232; Swift Newsletter! Suscr&#237;bete gratis para recibir nuevas publicaciones y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Ladran, señal de que cabalgamos]]></title><description><![CDATA[Aunque las Vision Pro siguen dando que hablar, tambi&#233;n traemos herramientas de desarrollo con propuestas diferentes, os hablamos del presente, futuro y el papel de la IA en Swift]]></description><link>https://applecoding.substack.com/p/ladran-senal-de-que-cabalgamos</link><guid isPermaLink="false">https://applecoding.substack.com/p/ladran-senal-de-que-cabalgamos</guid><dc:creator><![CDATA[Apple Coding]]></dc:creator><pubDate>Wed, 21 Feb 2024 16:33:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!HRWh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316d7f2e-f610-4bf6-a13d-e47086a1b3cb.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HRWh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316d7f2e-f610-4bf6-a13d-e47086a1b3cb.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HRWh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316d7f2e-f610-4bf6-a13d-e47086a1b3cb.heic 424w, https://substackcdn.com/image/fetch/$s_!HRWh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316d7f2e-f610-4bf6-a13d-e47086a1b3cb.heic 848w, https://substackcdn.com/image/fetch/$s_!HRWh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316d7f2e-f610-4bf6-a13d-e47086a1b3cb.heic 1272w, https://substackcdn.com/image/fetch/$s_!HRWh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316d7f2e-f610-4bf6-a13d-e47086a1b3cb.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HRWh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316d7f2e-f610-4bf6-a13d-e47086a1b3cb.heic" width="1456" height="832" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/316d7f2e-f610-4bf6-a13d-e47086a1b3cb.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:832,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:330161,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!HRWh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316d7f2e-f610-4bf6-a13d-e47086a1b3cb.heic 424w, https://substackcdn.com/image/fetch/$s_!HRWh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316d7f2e-f610-4bf6-a13d-e47086a1b3cb.heic 848w, https://substackcdn.com/image/fetch/$s_!HRWh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316d7f2e-f610-4bf6-a13d-e47086a1b3cb.heic 1272w, https://substackcdn.com/image/fetch/$s_!HRWh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316d7f2e-f610-4bf6-a13d-e47086a1b3cb.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Bienvenidos una semana m&#225;s a esta nuestra <em>newsletter</em>. Lo primero: la frase del t&#237;tulo <a href="https://www.clarin.com/sociedad/ladran-sancho-senal-que-cabalgamos-origen-y-significado-de-la-frase-de-don-quijote_0_SntFR0QMB.html">NO pertenece al Quijote</a>. Y lo segundo: s&#237; amigos, hoy tambi&#233;n tenemos raci&#243;n y media de <strong>Apple Vision Pro</strong>. Sin duda la noticia m&#225;s destacada sobre el nuevo visor, o como queramos llamarle, de la marca de la manzana, ha venido de la mano de uno de sus competidores. El <strong>CEO de Meta</strong>, que adem&#225;s de Facebook e Instagram, tiene otros productos como el visor <a href="https://www.xataka.com/realidad-virtual-aumentada/meta-quest-3-caracteristicas-precio-ficha-tecnica">Meta Quest</a>, ha publicado una <a href="https://www.instagram.com/p/C3TkhmivNzt/?hl=es">rajada monumental</a> en sus redes sobre el nuevo producto de Apple.</p><p>No estamos aqu&#237; para hablar si este tipo de declaraciones, en forma y modo, vertidas por el mism&#237;simo CEO de una compa&#241;&#237;a es el <strong>nuevo modelo de relaciones p&#250;blicas</strong> pero s&#237; que nos interesa el calado que pueda tener en el mundo tecnol&#243;gico. Sobre todo, porque a nuestros ojos, tiene unas cuantas incorrecciones como <strong>llamar plataforma abierta a Meta y cerrado a Vision Pro. Cuando precisamente su tienda es cerrada y de la Apple abierta</strong>. Es bastante ir&#243;nico.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://applecoding.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer Caff&#232; Swift Newsletter! Suscr&#237;bete gratis para recibir nuevas publicaciones y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!J9Q5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fead82fde-4371-4ef3-9e43-fc20de00c89d_1179x885.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!J9Q5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fead82fde-4371-4ef3-9e43-fc20de00c89d_1179x885.jpeg 424w, https://substackcdn.com/image/fetch/$s_!J9Q5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fead82fde-4371-4ef3-9e43-fc20de00c89d_1179x885.jpeg 848w, https://substackcdn.com/image/fetch/$s_!J9Q5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fead82fde-4371-4ef3-9e43-fc20de00c89d_1179x885.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!J9Q5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fead82fde-4371-4ef3-9e43-fc20de00c89d_1179x885.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!J9Q5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fead82fde-4371-4ef3-9e43-fc20de00c89d_1179x885.jpeg" width="1179" height="885" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ead82fde-4371-4ef3-9e43-fc20de00c89d_1179x885.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:885,&quot;width&quot;:1179,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:128765,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!J9Q5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fead82fde-4371-4ef3-9e43-fc20de00c89d_1179x885.jpeg 424w, https://substackcdn.com/image/fetch/$s_!J9Q5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fead82fde-4371-4ef3-9e43-fc20de00c89d_1179x885.jpeg 848w, https://substackcdn.com/image/fetch/$s_!J9Q5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fead82fde-4371-4ef3-9e43-fc20de00c89d_1179x885.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!J9Q5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fead82fde-4371-4ef3-9e43-fc20de00c89d_1179x885.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Charla en la Facultad de Ciencias de la Informaci&#243;n de la UCM, donde participaron Spatial Voyagers y Apple Coding Academy.</figcaption></figure></div><p>Uniendo este punto con el <a href="https://www.youtube.com/watch?v=XLvhlZv8-vw&amp;pp=ygUQc3BhdGlhbCB2b3lhZ2Vycw%3D%3D">evento sobre Computaci&#243;n Espacial</a> que compartimos con <a href="https://spatialvoyagers.com">Spatial Voyagers</a> me he dado cuenta del significado de la propuesta de las Vision Pro. Adem&#225;s de para confirmar que <a href="https://www.linkedin.com/in/eduardoherranz?miniProfileUrn=urn%3Ali%3Afs_miniProfile%3AACoAAAMcJdsBmdMok6hOSCupQSo6D2OmH0nlBlw&amp;lipi=urn%3Ali%3Apage%3Ad_flagship3_feed%3BqsIb0eHGSe6Q51y1bIB%2BkQ%3D%3D">Edu</a>, <a href="https://www.linkedin.com/in/edgarmartinblas?miniProfileUrn=urn%3Ali%3Afs_miniProfile%3AACoAAAJCBYEB27PL6hh60kda8HgK_n1NvUkZVJ4&amp;lipi=urn%3Ali%3Apage%3Ad_flagship3_search_srp_all%3BQe6jB1TUQZSI%2FnvUpeYEMw%3D%3D">Edgar</a> y <a href="https://www.linkedin.com/in/jotamaza?miniProfileUrn=urn%3Ali%3Afs_miniProfile%3AACoAAAJTk-oBXXkB6hVq_ch7XcXo3BG4Jus0IpA&amp;lipi=urn%3Ali%3Apage%3Ad_flagship3_search_srp_all%3BQe6jB1TUQZSI%2FnvUpeYEMw%3D%3D">Jota</a> son una gente espectacular y que sabe un mont&#243;n sobre realidad mixta, aumentada y virtual , ese d&#237;a comprend&#237; que es normal que <strong>Mark Zuckerberg</strong> tenga miedo. No se trata de un mont&#243;n de fanboys de Apple flipados con un nuevo producto, si no que realmente es el producto que el sector lleva esperando <strong>m&#225;s de 10 a&#241;os</strong>.</p><p>Despu&#233;s de tomar unas cervezas y comernos una hamburguesa, bastante buena por cierto, hablamos no s&#243;lo del casco en s&#237;, tambi&#233;n de lo que supone dentro del <strong>ecosistema de desarrollo Apple.</strong> Muchos de nosotros, y yo el primero, nos vemos con ganas de entrar en el mundo 3D sin ese <strong>miedo a lo desconocido</strong>. No es s&#243;lo el producto, si no que con las herramientas que Apple ha puesto a nuestra disposici&#243;n, nos hacen sentir como en casa. &#161;Esto se pone emocionante amigos!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iUy3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406d5912-f9d1-4fb4-9d5c-5784eee1a753.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iUy3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406d5912-f9d1-4fb4-9d5c-5784eee1a753.heic 424w, https://substackcdn.com/image/fetch/$s_!iUy3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406d5912-f9d1-4fb4-9d5c-5784eee1a753.heic 848w, https://substackcdn.com/image/fetch/$s_!iUy3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406d5912-f9d1-4fb4-9d5c-5784eee1a753.heic 1272w, https://substackcdn.com/image/fetch/$s_!iUy3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406d5912-f9d1-4fb4-9d5c-5784eee1a753.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iUy3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406d5912-f9d1-4fb4-9d5c-5784eee1a753.heic" width="500" height="280" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/406d5912-f9d1-4fb4-9d5c-5784eee1a753.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:280,&quot;width&quot;:500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:30146,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!iUy3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406d5912-f9d1-4fb4-9d5c-5784eee1a753.heic 424w, https://substackcdn.com/image/fetch/$s_!iUy3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406d5912-f9d1-4fb4-9d5c-5784eee1a753.heic 848w, https://substackcdn.com/image/fetch/$s_!iUy3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406d5912-f9d1-4fb4-9d5c-5784eee1a753.heic 1272w, https://substackcdn.com/image/fetch/$s_!iUy3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F406d5912-f9d1-4fb4-9d5c-5784eee1a753.heic 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Si quieres ver la charla, donde tambi&#233;n estuvo nuestro compa&#241;ero Julio C&#233;sar Fern&#225;ndez, hablando sobre las posibilidades de desarrollo de Vision Pro, aqu&#237; tienes el <a href="https://www.youtube.com/watch?v=XLvhlZv8-vw">enlace en Youtube</a>. Y por cierto, si lleg&#225;is a tiempo, Julio dar&#225; un taller durante dos d&#237;as en la Universidad Europea de Madrid sobre c&#243;mo construir una app en Swift para entornos Apple, incluyendo Apple Vision Pro. <a href="https://universidadeuropea.com/eventos/swift-construye-una-app/">Pod&#233;is apuntaros aqu&#237;</a>.</p><h3>Nuevas herramientas para desarrolladores</h3><p>Enlazando con la premisa de &#8220;sentirse como en casa&#8221;, tambi&#233;n os traemos un nuevo editor de c&#243;digo llamado <a href="https://www.codeedit.app">CodeEdit</a>. No es uno m&#225;s, si no que este trata de imitar a nuestro <s>querido </s><strong>Xcode</strong> y servir de base <em>para proyectos no destinados a plataformas de Apple</em>. <strong>100%</strong> <strong>nativo para macOS</strong>, integraci&#243;n con Git, una interfaz exquisita&#8230; al instalarlo me he quedado sin palabras. Y es a&#250;n una versi&#243;n alpha. Esperemos que la iniciativa tenga tracci&#243;n y llegue pronto a su versi&#243;n estable. Si tambi&#233;n te mueres de ganas por hacerlo tu editor de referencia <a href="https://github.com/CodeEditApp/CodeEdit">puedes incluso ayudarles a lograrlo</a> porque es <strong>open source</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YBTX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf9cffa2-a9bd-4429-8ec7-964ec2251fe6_2048x1205.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YBTX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf9cffa2-a9bd-4429-8ec7-964ec2251fe6_2048x1205.webp 424w, https://substackcdn.com/image/fetch/$s_!YBTX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf9cffa2-a9bd-4429-8ec7-964ec2251fe6_2048x1205.webp 848w, https://substackcdn.com/image/fetch/$s_!YBTX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf9cffa2-a9bd-4429-8ec7-964ec2251fe6_2048x1205.webp 1272w, https://substackcdn.com/image/fetch/$s_!YBTX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf9cffa2-a9bd-4429-8ec7-964ec2251fe6_2048x1205.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YBTX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf9cffa2-a9bd-4429-8ec7-964ec2251fe6_2048x1205.webp" width="1456" height="857" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cf9cffa2-a9bd-4429-8ec7-964ec2251fe6_2048x1205.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:857,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:234508,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YBTX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf9cffa2-a9bd-4429-8ec7-964ec2251fe6_2048x1205.webp 424w, https://substackcdn.com/image/fetch/$s_!YBTX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf9cffa2-a9bd-4429-8ec7-964ec2251fe6_2048x1205.webp 848w, https://substackcdn.com/image/fetch/$s_!YBTX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf9cffa2-a9bd-4429-8ec7-964ec2251fe6_2048x1205.webp 1272w, https://substackcdn.com/image/fetch/$s_!YBTX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf9cffa2-a9bd-4429-8ec7-964ec2251fe6_2048x1205.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Proyecto de c&#243;digo abierto con CodeEdit</figcaption></figure></div><p>Aunque este no ha sido el &#250;nico lanzamiento innovador de esta semana. Os traemos otra propuesta, que pretende en este caso mejorar el anteriormente comentado sistema <strong>Git</strong> para repositorios de c&#243;digo. Su nombre es <strong>GitButler</strong> y aboga por crear <strong>ramas virtuales</strong> que cuando estemos trabajando en algo nuevo o aislado, pero detectamos un error o una peque&#241;a mejora a incorporar en la rama principal, no tengamos que guardar los cambios, cambiar de rama, volver a la anterior&#8230; si no que lo hagamos en esta rama virtual. &#191;Suena bien verdad? Pues no s&#243;lo eso, gracias a <strong>uso de IA</strong>, tambi&#233;n escribe el mensaje de los commit autom&#225;ticamente en base a los cambios que detecte. <strong>Disclaimer:</strong> de momento no se lleva muy bien con Xcode y puede destrozarte las ramas de tu proyecto, usar con cuidado.</p><h3>Un vistazo al futuro y un paquete muy apa&#241;ado</h3><p>Ya en otras ocasiones que la futura <strong>versi&#243;n mayor de Swift</strong> tendr&#225; cambios de bastante calado. Uno de los principios b&#225;sicos desde la creaci&#243;n del lenguaje, fue centrarse en la <strong>detecci&#243;n de errores en tiempo de compilaci&#243;n</strong>. O lo que es lo mismo, tratar de eliminar en el medida de lo posible la incertidumbre de que aparezcan errores que provoquen que la app <strong>se cierre repentinamente.</strong> <strong>Swift 6</strong> quiere ir un paso m&#225;s all&#225; detectando no s&#243;lo errores de tipos, nulos y otros sospechosos habituales, si no tambi&#233;n advirtiendo de <strong>problemas de concurrencia</strong>. Estos pueden crear las temidas <a href="https://es.wikipedia.org/wiki/Condici&#243;n_de_carrera">condiciones de carrera</a>. Existe un <em>flag</em> de configuraci&#243;n para poder activarlo y probar tu c&#243;digo en las versiones actuales, pero <a href="https://massicotte.org/complete-checking">no siempre parece ser una buena idea</a>.</p><p>Hablemos ahora de librer&#237;as. Normalmente somos reacios a la utilizaci&#243;n de ellas sin una causa justificada. A&#241;adir una dependencia para hacer lo mismo que otra API del sistema no me parece algo que aporte nada a nuestro proyecto, m&#225;s all&#225; de complejidad, tanto en el c&#243;digo como en su mantenimiento. Pero librer&#237;as buenas <em>haylas</em>. En esta pieza tenemos una <a href="https://swiftwithmajid.com/2024/02/13/discovering-swift-algorithms-package/">introducci&#243;n a Swift Algorithms</a>, un paquete de la propia Apple que nos facilita enormemente el <strong>trabajo con secuencias y colecciones</strong>. Adem&#225;s puede ver todos los detalles de la misma en <a href="https://github.com/apple/swift-algorithms">GitHub</a> as&#237; como su amplia documentaci&#243;n. Si necesitas <strong>descomponer un array</strong> por una de sus propiedades, o crear agrupaciones de distinta naturaleza en base a sus componentes, est&#225;s a un <em>import Algorithms</em> de poder hacerlo.</p><h3>Accesibilidad y logs</h3><p>Una de las caracter&#237;sticas que muchos desconocen de los sistemas de Apple, son las fuentes de tama&#241;o din&#225;mico. Me explico, hay una opci&#243;n dentro de los <strong>Ajustes</strong> que permite configurar el tama&#241;o de la fuente a trav&#233;s de todo el sistema y que, si hacemos bien las cosas, nuestra app puede detectar y adaptarse. En UIKit era necesario activarlo, pero con <strong>SwiftUI</strong> la activaci&#243;n viene por defecto. Esto hace que las fuentes se escalen de acuerdo con la configuraci&#243;n del usuario, y que personas con problemas visuales, sean capaces de leer textos utilizando una fuente de un tama&#241;o mayor. Pero esto no acaba aqu&#237;, porque en SwiftUI existe el <em>property wrapper</em> <strong>@ScaledMetric</strong> que nos permite <a href="https://www.avanderlee.com/swiftui/scaledmetric-dynamic-type-support/">escalar tambi&#233;n im&#225;genes, m&#225;rgenes y otros componentes</a>, de formar proporcional a las fuentes.</p><p>No os voy a enga&#241;ar: antes de iOS 14 el <strong>log de Apple</strong> era una aut&#233;ntica pesadilla. Hab&#237;a varias APIs que no se hablaban entre ellas y el desarrollador acababa por utilizar <em>prints</em> y a correr. Hasta que apareci&#243; el <a href="https://useyourloaf.com/blog/xcode-console-and-unified-logging/">logging unificado</a> que utilizaba un s&#243;lo framework para <strong>unirlos a todos</strong>. Desde entonces es posible no s&#243;lo ver las anotaciones en la consola de Xcode, si no tambi&#233;n en la consola de log del propio dispositivo. Posteriormente, en <strong>iOS 15</strong> a&#241;adieron la posibilidad de <a href="https://developer.apple.com/documentation/oslog/oslogstore">consultarlo mediante c&#243;digo</a> por lo que se puede filtrar por nuestro inter&#233;s y generar un archivo que el usuario nos env&#237;e como feedback o que mostremos en alg&#250;n men&#250; de depuraci&#243;n dentro de la app. Tambi&#233;n es posible formatear los datos, ocultarlos cuando sean privados&#8230; y por supuesto, con <strong>Xcode 15</strong> el log da gloria verlo categorizado y con los metadatos pertinentes. Incluso podemos pulsarlo para que nos lleve al c&#243;digo que lo ha generado. &#161;Ya est&#225;s tardando en incorporarlo a tu flujo de trabajo!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RnmL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cddda2f-9906-4728-a725-bd3abe99d808_640x620.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RnmL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cddda2f-9906-4728-a725-bd3abe99d808_640x620.png 424w, https://substackcdn.com/image/fetch/$s_!RnmL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cddda2f-9906-4728-a725-bd3abe99d808_640x620.png 848w, https://substackcdn.com/image/fetch/$s_!RnmL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cddda2f-9906-4728-a725-bd3abe99d808_640x620.png 1272w, https://substackcdn.com/image/fetch/$s_!RnmL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cddda2f-9906-4728-a725-bd3abe99d808_640x620.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RnmL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cddda2f-9906-4728-a725-bd3abe99d808_640x620.png" width="640" height="620" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7cddda2f-9906-4728-a725-bd3abe99d808_640x620.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:620,&quot;width&quot;:640,&quot;resizeWidth&quot;:640,&quot;bytes&quot;:65992,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RnmL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cddda2f-9906-4728-a725-bd3abe99d808_640x620.png 424w, https://substackcdn.com/image/fetch/$s_!RnmL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cddda2f-9906-4728-a725-bd3abe99d808_640x620.png 848w, https://substackcdn.com/image/fetch/$s_!RnmL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cddda2f-9906-4728-a725-bd3abe99d808_640x620.png 1272w, https://substackcdn.com/image/fetch/$s_!RnmL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cddda2f-9906-4728-a725-bd3abe99d808_640x620.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Visualizaci&#243;n de log en la consola de Xcode 15</figcaption></figure></div><h3>D&#243;nde est&#225; esa IA que yo la vea</h3><p>&#161;Paren las rotativas! Con la edici&#243;n casi cerrada no podemos no hacernos eco de la <a href="https://github.com/ml-explore/mlx-swift/?tab=readme-ov-file">nueva librer&#237;a para Swift presentada por Apple</a>. Se trata de una API para <a href="https://ml-explore.github.io/mlx/build/html/index.html">MLX</a>. Si se te acaban de dar vuelta los ojos, tranquilo. MLX es un framework dise&#241;ado para trabajar el <em>machine learning</em> sobre los procesadores <strong>Apple Silicon</strong>. En <a href="https://www.swift.org/blog/mlx-swift/">esta entrada del blog</a> de Swift, no s&#243;lo nos introducen esta nueva librer&#237;a, si no que tambi&#233;n nos hablan de los planes presentes y futuros, as&#237; como el porqu&#233; de usar <strong>Swift como lenguaje de investigaci&#243;n</strong> para <em>machine learning</em>. Spoiler: la facilidad de uso como <strong>lenguaje de alto nivel</strong> y el <strong>rendimiento al ser compilado</strong> es la dupla perfecta para este tipo de trabajos. Amigos, ahora si que tenemos el poder.</p><h3>Y poco m&#225;s</h3><p>En esta edici&#243;n nos hemos centrado m&#225;s en el propio lenguaje y las herramientas de desarrollo que en las noticias (exceptuando la &#250;ltima secci&#243;n claro). Esperamos que haya sido igualmente interesante. Nos lo puedes hacer saber escribiendo a nuestro correo caffeswift@gmail.com o a trav&#233;s de nuestra cuenta en X como <a href="https://x.com/caffeswift">@caffeswift</a>.</p><p><strong>Nos leemos pronto, si Jobs quiere, y hasta entonces: un saludo y Good Apple Coding.</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://applecoding.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer Caff&#232; Swift Newsletter! Suscr&#237;bete gratis para recibir nuevas publicaciones y apoyar mi trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Los auriculares para vídeo son el futuro de la tecnología]]></title><description><![CDATA[Steve Jobs ya lo pronostic&#243; en 2007 y hay patentes al respecto.]]></description><link>https://applecoding.substack.com/p/los-auriculares-para-video-son-el</link><guid isPermaLink="false">https://applecoding.substack.com/p/los-auriculares-para-video-son-el</guid><dc:creator><![CDATA[Apple Coding]]></dc:creator><pubDate>Thu, 15 Feb 2024 12:44:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!-xNa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53237a53-cdf6-4e08-b76a-bda750a0706c.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-xNa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53237a53-cdf6-4e08-b76a-bda750a0706c.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-xNa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53237a53-cdf6-4e08-b76a-bda750a0706c.heic 424w, https://substackcdn.com/image/fetch/$s_!-xNa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53237a53-cdf6-4e08-b76a-bda750a0706c.heic 848w, https://substackcdn.com/image/fetch/$s_!-xNa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53237a53-cdf6-4e08-b76a-bda750a0706c.heic 1272w, https://substackcdn.com/image/fetch/$s_!-xNa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53237a53-cdf6-4e08-b76a-bda750a0706c.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-xNa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53237a53-cdf6-4e08-b76a-bda750a0706c.heic" width="1076" height="634" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/53237a53-cdf6-4e08-b76a-bda750a0706c.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:634,&quot;width&quot;:1076,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:76254,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-xNa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53237a53-cdf6-4e08-b76a-bda750a0706c.heic 424w, https://substackcdn.com/image/fetch/$s_!-xNa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53237a53-cdf6-4e08-b76a-bda750a0706c.heic 848w, https://substackcdn.com/image/fetch/$s_!-xNa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53237a53-cdf6-4e08-b76a-bda750a0706c.heic 1272w, https://substackcdn.com/image/fetch/$s_!-xNa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53237a53-cdf6-4e08-b76a-bda750a0706c.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Las <a href="https://www.twitch.tv/applecoding/video/2058944588">reviews, ya m&#225;s reposadas</a>, del <strong>Vision Pro</strong> han comenzado ha llegar. Tambi&#233;n lo ha hecho el <a href="http://pic.twitter.com/Jj5fsBfkcZ">unboxing con la producci&#243;n m&#225;s &#233;pica ever</a>. Pero por fin hemos comprendido que el nuevo casco, perd&#243;n por banalizar as&#237; su nombre, de Apple, es entre otras cosas unos <a href="http://pic.twitter.com/iK4gMi0j4S">auriculares para video</a>. Os prometo que con esto me ha explotado la cabeza, <strong>porque es verdad</strong>. </p><p>Los primeros auriculares ten&#237;an no ten&#237;a gran calidad de sonido, en cambio, ten&#237;a un cable que se enredaba con absolutamente todo lo que se le pon&#237;a a tiro y eran demasiado grandes e inc&#243;modos. Hasta que llegaron los <strong>AirPods</strong>. De repente pasamos a tener un dispositivo que nos permit&#237;a escuchar, y a la vez interactuar mediante la voz, de una forma en la que <strong>el dispositivo pasaba totalmente inadvertido</strong> para el que lo llevaba puesto. Y eso <s>es</s> ser&#225; el Vision Pro al v&#237;deo. </p><p>Adem&#225;s, podr&#225;s ver e interactuar con pantallas de informaci&#243;n y con el propio entorno f&#237;sico, mediante un dispositivo que <strong>no tengas que sostener en la mano, y cuya pantalla es pr&#225;cticamente infinita</strong>. <em>&#191;Smarphone? &#161;A d&#243;nde vamos no necesitamos &#8230; smartphone!</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!x2pO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5664e9a-4363-45c8-b64f-faf59c9f47b5.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!x2pO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5664e9a-4363-45c8-b64f-faf59c9f47b5.heic 424w, https://substackcdn.com/image/fetch/$s_!x2pO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5664e9a-4363-45c8-b64f-faf59c9f47b5.heic 848w, https://substackcdn.com/image/fetch/$s_!x2pO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5664e9a-4363-45c8-b64f-faf59c9f47b5.heic 1272w, https://substackcdn.com/image/fetch/$s_!x2pO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5664e9a-4363-45c8-b64f-faf59c9f47b5.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!x2pO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5664e9a-4363-45c8-b64f-faf59c9f47b5.heic" width="1368" height="764" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c5664e9a-4363-45c8-b64f-faf59c9f47b5.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:764,&quot;width&quot;:1368,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:91935,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!x2pO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5664e9a-4363-45c8-b64f-faf59c9f47b5.heic 424w, https://substackcdn.com/image/fetch/$s_!x2pO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5664e9a-4363-45c8-b64f-faf59c9f47b5.heic 848w, https://substackcdn.com/image/fetch/$s_!x2pO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5664e9a-4363-45c8-b64f-faf59c9f47b5.heic 1272w, https://substackcdn.com/image/fetch/$s_!x2pO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5664e9a-4363-45c8-b64f-faf59c9f47b5.heic 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Si quereis saber m&#225;s sobre Vision Pro basada en la experiencia que hemos tenido y descubrir <strong>el lado &#8220;m&#225;s espiritual&#8221; de Julio C&#233;sar Fern&#225;ndez</strong>, os invitamos a ver (que no escuchar) su &#250;ltimo <a href="http://cuonda.com/apple-coding-daily">Apple Coding Daily</a> en nuestro canal de <a href="http://youtube.com/@applecoding">Youtube</a>. Porque ah&#237; os contar&#225; todo lo que es y no es Vision Pro a d&#237;a de hoy, pero lo har&#225; en Persona. Pod&#233;is verlo <a href="https://www.youtube.com/watch?v=3XPexd25yHY">aqu&#237; mismo</a>.</p><h3>Rumores y avisos a navegantes</h3><p>Enlazando con las Vision Pro, el sistema que lo gobierna, <strong>visionOS</strong>, ha supuesto todo un reto a la hora del dise&#241;o de interfaces. El <strong>juego de transparencias</strong> para hacer que las ventanas se integren con el fondo (ya sea real o virtual) mediante <strong>distintas capas</strong>, es una obra digna de los mejores orfebres de Cupertino. En <a href="https://9to5mac.com/2024/02/09/rumor-ios-18-interface-visionos/">9to5mac se hac&#237;an eco</a> esta semana, de un posible redise&#241;o para las futuras versiones de los dem&#225;s sistemas operativos de Apple. Quiz&#225;s sea el momento de la <strong>unificaci&#243;n total</strong>, porque visionOS tiene un poco de experiencia de escritorio y tambi&#233;n de tablet. A lo mejor los de la manzana han encontrado el <strong>anillo &#250;nico</strong> para unirlos a todos.</p><p>Como no pod&#237;a ser menos, para Apple, <strong>la privacidad es fundamental</strong> y podemos descubrir c&#243;mo un dispositivo, que por sus c&#225;maras y sensores podr&#237;a parecer que es una herramienta de espionaje en s&#237; mismo, sin embargo, <strong>tiene un buen n&#250;mero de medidas para proteger nuestra privacidad</strong>, incluso de los desarrolladores poco &#233;ticos que quisieran sacar provecho del mismo. Ten&#233;is un extenso informe en un PDF para leerlo publicado por la propia Apple <a href="https://www.apple.com/privacy/docs/Apple_Vision_Pro_Privacy_Overview.pdf">en este enlace</a>.</p><p>Siguiendo con las noticias, <a href="https://developer.apple.com/news/?id=fxu2qp7b">Apple ha publicado</a> la fecha en la que las aplicaciones que se suban al App Store, deben utilizar las &#250;ltimas tecnolog&#237;as liberadas el pasado oto&#241;o. A saber: <strong>Xcode&nbsp;15 para iOS&nbsp;17, iPadOS&nbsp;17, tvOS&nbsp;17, y watchOS&nbsp;10</strong>. Y el d&#237;a elegido es el <strong>29 de Abril</strong>. A partir de esa fecha, cualquier actualizaci&#243;n o nueva aplicaci&#243;n que <strong>no se haya construido</strong> con esas versiones de Xcode y de los SDK, ser&#225; rechazada autom&#225;ticamente.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qczR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1caf33-85b1-4e09-8b4f-b718c932ab8a.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qczR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1caf33-85b1-4e09-8b4f-b718c932ab8a.heic 424w, https://substackcdn.com/image/fetch/$s_!qczR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1caf33-85b1-4e09-8b4f-b718c932ab8a.heic 848w, https://substackcdn.com/image/fetch/$s_!qczR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1caf33-85b1-4e09-8b4f-b718c932ab8a.heic 1272w, https://substackcdn.com/image/fetch/$s_!qczR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1caf33-85b1-4e09-8b4f-b718c932ab8a.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qczR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1caf33-85b1-4e09-8b4f-b718c932ab8a.heic" width="1456" height="890" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ba1caf33-85b1-4e09-8b4f-b718c932ab8a.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:890,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:171948,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qczR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1caf33-85b1-4e09-8b4f-b718c932ab8a.heic 424w, https://substackcdn.com/image/fetch/$s_!qczR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1caf33-85b1-4e09-8b4f-b718c932ab8a.heic 848w, https://substackcdn.com/image/fetch/$s_!qczR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1caf33-85b1-4e09-8b4f-b718c932ab8a.heic 1272w, https://substackcdn.com/image/fetch/$s_!qczR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1caf33-85b1-4e09-8b4f-b718c932ab8a.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Novedades: Un poquito de ML y otro poquito de Swift</h3><p>De todos es sabido que la <strong>investigaci&#243;n y el desarrollo de modelos de lenguaje</strong> para <em>Machine Learning </em>viene muy ligado al mundo cient&#237;fico. En el gremio, la reputaci&#243;n de los investigadores est&#225; basada en el n&#250;mero de publicaciones cient&#237;ficas en las que participan. Aunque otra forma de dar a conocer el trabajo es <strong>hacer p&#250;blicos los modelos</strong> generados y los <em>papers </em>de investigaci&#243;n. Si Apple ya jugaba a este juego desde hace a&#241;os, ahora ha entrado de lleno con lanzamientos casi semanales. Esta vez con el modelo <a href="https://github.com/apple/ml-mgie">MGIE</a>, que permite la edici&#243;n de im&#225;genes utilizando comandos de texto mediante lenguaje natural. Y tambi&#233;n <a href="https://huggingface.co/papers/2402.06071">Keyframer</a>, un modelo que permite animar gr&#225;ficos vectoriales SVG mediante modelos de lenguaje. </p><p>El <em>hype</em> de cara a la <strong>WWDC</strong> est&#225; servido. Si quer&#233;is estar al d&#237;a de todo lo que Apple presenta en el campo de la IA generativa, no dej&#233;is de vigilar la web de <em>Machine Learning</em> de la compa&#241;&#237;a en <a href="http://machinelearning.apple.com">machinelearning.apple.com</a>.</p><p>Otra novedad peque&#241;a, pero no por ello menos importante, es la liberaci&#243;n de la <strong>versi&#243;n 1.1.0</strong> del paquete <a href="https://github.com/apple/swift-collections/releases/tag/1.1.0">Swift Collections</a>. Desde sus primeras iteraciones, fue concebido para facilitar el trabajo con <strong>estructuras de datos</strong> y en esta &#250;ltima <em>release</em>, adem&#225;s de nuevas estructuras, ha a&#241;adido funciones para el filtrado y la ordenaci&#243;n. &#191;Lo has utilizado? &#161;Te leemos!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Zwru!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc258c945-fffe-4840-a82d-724027148843.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Zwru!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc258c945-fffe-4840-a82d-724027148843.heic 424w, https://substackcdn.com/image/fetch/$s_!Zwru!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc258c945-fffe-4840-a82d-724027148843.heic 848w, https://substackcdn.com/image/fetch/$s_!Zwru!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc258c945-fffe-4840-a82d-724027148843.heic 1272w, https://substackcdn.com/image/fetch/$s_!Zwru!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc258c945-fffe-4840-a82d-724027148843.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Zwru!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc258c945-fffe-4840-a82d-724027148843.heic" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c258c945-fffe-4840-a82d-724027148843.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:128612,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Zwru!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc258c945-fffe-4840-a82d-724027148843.heic 424w, https://substackcdn.com/image/fetch/$s_!Zwru!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc258c945-fffe-4840-a82d-724027148843.heic 848w, https://substackcdn.com/image/fetch/$s_!Zwru!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc258c945-fffe-4840-a82d-724027148843.heic 1272w, https://substackcdn.com/image/fetch/$s_!Zwru!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc258c945-fffe-4840-a82d-724027148843.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Offtopic: Otro corte de mangas a la Uni&#243;n Europea</h3><p>Por si no fuese poco el <strong>troleo de Apple</strong> a la UE con los cambios para cumplir con la Ley de Mercados Digitales, <a href="https://www.xataka.com/aplicaciones/whatsapp-confirma-mayor-cambio-su-historia-sera-compatible-telegram-otras-apps-mensajeria">WhatsApp tambi&#233;n lo ha hecho de forma ostensible</a>. Otras aplicaciones, como la propia <strong>iMessage</strong> de Apple, han optado por adoptar el servicio RCS como forma de interoperabilidad. Pero la <strong>subsidiaria de Meta</strong> ha anunciado que implementar&#225; una suerte de API para integrarse con sus sistema de forma que se siga respetando el <a href="https://en.wikipedia.org/wiki/Signal_Protocol">cifrado extremo a extremo del protocolo Signal</a>. </p><p>Esto que a priori parece un movimiento en pos de los usuarios, est&#225; muy lejos de serlo. Me explico. Implementando una plataforma de terceros, como RCS, WhatsApp s&#243;lo ver&#237;a el <strong>tr&#225;fico que sus usuarios</strong> lanzan hacia ese servicio cuando se comunique, siguiendo con el ejemplo, con iMessage. Pero si utilizan una API, y por tanto una plataforma propia, los de Meta tendr&#237;an acceso a los <strong>metadatos completos</strong> de todas la conversaciones. Una jugada maestra por su parte, sin duda alguna.</p><p>Aunque ojo al dato, <strong>Apple ha conseguido convencer a la UE que el uso de iMessage en Europa es tan residual, que finalmente no tendr&#225; que implementar otras apps en conversaciones de terceros</strong> como s&#237; tendr&#225; que hacer WhatsApp. As&#237; que la integraci&#243;n de RCS, estar&#225;, pero seguir&#225; permitiendo que iMessage funcione como hasta ahora.</p><h3>Observando los any</h3><p>Lo s&#233;, he ido a lo f&#225;cil. Y hablando de f&#225;cil (lo he vuelto a hacer&#8230;), iOS 17 con el nuevo patr&#243;n <strong>Observable</strong>, ha simplificado la sintaxis para obtener <strong>reactivadad en SwiftUI</strong>. Pero lo realmente importante est&#225; baj&#243; el cap&#243;, porque la mejora de rendimiento es muy grande. <a href="https://www.donnywals.com/comparing-observable-to-observableobjects/">Esta pieza de Donny Wals</a> nos muestra c&#243;mo hacer saltar desde el <em>vetusto</em> <strong>ObservableObject</strong>, y algunas consideraciones como que ya no es necesario el framework <strong>Combine</strong>.</p><p>Si has llegado hasta aqu&#237; ahora viene el l&#237;o. El art&#237;culo cafetero es obra del compa&#241;ero <strong>Antoine van der Lee</strong> y trata sobre <a href="https://www.avanderlee.com/swift/anyobject-any/">todos los any que implementa el lenguaje Swift</a>. El tr&#237;o calavera <strong>AnyObject</strong>, <strong>Any</strong> y <strong>any</strong> al desnudo para rematar una edici&#243;n m&#225;s de nuestra newsletter.</p><h3>Y poco m&#225;s</h3><p>Se acercan las <strong>versiones .4 de primavera</strong>, este a&#241;o movidas por la irrupci&#243;n de la Ley de Mercados Digitales y el Vision Pro, as&#237; que no hay tregua. Si lo que lees te gusta o piensas que podemos mejorar algo puedes contactarnos en caffeswift@gmail.com o a trav&#233;s de nuestra cuenta en X como <a href="https://x.com/caffeswift">@caffeswift</a>.</p><p><strong>Nos leemos pronto, si Jobs quiere, y hasta entonces: un saludo y Good Apple Coding.</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://applecoding.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">&#161;Gracias por leer Caff&#232; Swift Newsletter! Suscr&#237;bete gratis para recibir nuevas publicaciones y apoyar nuestro trabajo.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>