{"id":569,"date":"2026-06-08T10:00:00","date_gmt":"2026-06-08T10:00:00","guid":{"rendered":"https:\/\/zydeno.com\/?p=569"},"modified":"2026-10-14T16:43:19","modified_gmt":"2026-10-14T16:43:19","slug":"por-que-lancamos-o-swift-e-nao-o-swiftui","status":"publish","type":"post","link":"https:\/\/zydeno.com\/pt\/por-que-lancamos-o-swift-e-nao-o-swiftui\/","title":{"rendered":"Por que lan\u00e7amos o Swift e n\u00e3o o SwiftUI"},"content":{"rendered":"<p>Em todas as edi\u00e7\u00f5es da WWDC desde 2019, o SwiftUI tem vindo a ganhar cada vez mais destaque e, sempre que come\u00e7amos a desenvolver uma nova aplica\u00e7\u00e3o, reunimo-nos em equipa para fazer a mesma pergunta: <em>Ser\u00e1 que j\u00e1 merece um lugar nas nossas aplica\u00e7\u00f5es?<\/em> At\u00e9 agora, a resposta tem sido \u00abn\u00e3o\u00bb no que diz respeito aos aspetos importantes \u2014 e, provavelmente, \u00absim\u00bb no que diz respeito aos aspetos que n\u00e3o importam.<\/p>\n<p>Isto n\u00e3o \u00e9 um julgamento sobre o SwiftUI em geral. Muitas equipas lan\u00e7am aplica\u00e7\u00f5es excelentes com esta tecnologia. \u00c9 apenas uma descri\u00e7\u00e3o do contexto em que faz sentido para n\u00f3s: um pequeno est\u00fadio que mant\u00e9m v\u00e1rias aplica\u00e7\u00f5es iPhone e iPad em simult\u00e2neo, sem margem para surpresas em nenhuma delas.<\/p>\n<h2>O que funciona<\/h2>\n<p>O SwiftUI \u00e9 realmente excelente para ecr\u00e3s de configura\u00e7\u00f5es est\u00e1ticas, layouts de formul\u00e1rios e tudo aquilo em que a \u00e1rvore de visualiza\u00e7\u00e3o \u00e9 pequena e o fluxo de dados \u00e9 unidirecional. N\u00f3s utilizamo-lo. Tamb\u00e9m o utilizamos para pr\u00e9-visualiza\u00e7\u00f5es enquanto estamos a projetar \u2014 o ciclo de itera\u00e7\u00e3o \u00e9 mais r\u00e1pido do que o do UIKit.<\/p>\n<p>Na pr\u00e1tica, isso significa que o ecr\u00e3 onde se selecionam unidades ou se exportam dados \u00e9, muitas vezes, em SwiftUI, integrado numa aplica\u00e7\u00e3o cujos ecr\u00e3s principais s\u00e3o em UIKit. Os dois coexistem sem grande atrito, e a sua combina\u00e7\u00e3o permite-nos utilizar cada um deles onde se destaca, em vez de dedicarmos toda a aplica\u00e7\u00e3o a uma \u00fanica abordagem.<\/p>\n<h2>O que n\u00e3o funciona (para n\u00f3s)<\/h2>\n<p>Assim que um ecr\u00e3 necessita de gestos personalizados, listas sens\u00edveis ao desempenho, um estado de navega\u00e7\u00e3o complexo ou uma sincroniza\u00e7\u00e3o precisa das anima\u00e7\u00f5es, voltamos a recorrer ao UIKit. A raz\u00e3o n\u00e3o \u00e9 mera moda \u2014 \u00e9 o tipo de erros que encontramos quando n\u00e3o o fazemos. O SwiftUI melhorou significativamente nas suas vers\u00f5es mais recentes, mas ainda nos surpreende em tempo de execu\u00e7\u00e3o de formas que o UIKit raramente o faz.<\/p>\n<p>Os exemplos concretos ajudam. Um programa de treino de digita\u00e7\u00e3o precisa que cada tecla premida resulte no caractere certo, sem qualquer atraso vis\u00edvel, e que o ecr\u00e3 acompanhe o ritmo dos dedos do utilizador. Um hist\u00f3rico extenso de registos num aplicativo de acompanhamento precisa de rolar suavemente num telem\u00f3vel mais antigo. Um planeador com a funcionalidade \u00abarrastar e largar\u00bb precisa de gestos que n\u00e3o entrem em conflito com os do pr\u00f3prio sistema. \u00c9 neste tipo de ecr\u00e3s que consideramos o UIKit mais previs\u00edvel.<\/p>\n<h2>As vantagens e desvantagens<\/h2>\n<p>Manter-se fiel ao UIKit tem o seu pre\u00e7o. Significa mais c\u00f3digo para o mesmo ecr\u00e3 e implica que quem se junte \u00e0 equipa tenha de se sentir \u00e0 vontade com um framework mais antigo, que os tutoriais tendem cada vez mais a ignorar. Algumas novas funcionalidades do sistema chegam primeiro ao SwiftUI, e a sua ado\u00e7\u00e3o a partir do UIKit exige um trabalho adicional de adapta\u00e7\u00e3o. Temos tamb\u00e9m de ser honestos e admitir que parte da nossa cautela se deve \u00e0 familiaridade: conhecer um framework em profundidade tem o seu valor, mas tamb\u00e9m pode tornar-se uma desculpa.<\/p>\n<p>H\u00e1 tamb\u00e9m uma quest\u00e3o em aberto. As nossas aplica\u00e7\u00f5es iPhone e iPad j\u00e1 funcionam nos Mac com Apple Silicon, e temos em planos criar aplica\u00e7\u00f5es nativas para o Mac. Se o SwiftUI facilitar significativamente a partilha de c\u00f3digo de interface entre essas plataformas, a situa\u00e7\u00e3o poder\u00e1 mudar.<\/p>\n<h2>O que fizemos de errado<\/h2>\n<p>Uma vez utiliz\u00e1mos o SwiftUI para um ecr\u00e3 que parecia simples no papel, mas que acabou por n\u00e3o o ser: uma lista com a\u00e7\u00f5es de deslizar personalizadas e um estado que mudava \u00e0 medida que se percorria o ecr\u00e3. Funcionava bem nas pr\u00e9-visualiza\u00e7\u00f5es, mas de forma estranha nos dispositivos reais. Recri\u00e1-lo no UIKit demorou mais tempo do que teria demorado come\u00e7ar por a\u00ed. Agora decidimos caso a caso, logo \u00e0 partida, com base no que a tela tem realmente de fazer.<\/p>\n<p>Esse \u00e9 o \u00fanico teste verdadeiro: <em>Ser\u00e1 que isto nos vai surpreender na produ\u00e7\u00e3o?<\/em> No que diz respeito \u00e0 maior parte do que desenvolvemos, a resposta exclui o SwiftUI como plataforma principal. Voltaremos a analisar essa possibilidade no pr\u00f3ximo ano.<\/p>","protected":false},"excerpt":{"rendered":"<p>Argumentos convincentes para continuar a usar o UIKit quando o resto do setor j\u00e1 avan\u00e7ou.<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-569","post","type-post","status-publish","format-standard","hentry","category-journal"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v22.2 (Yoast SEO v22.2) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Why we ship Swift, not SwiftUI - Zydeno Studio<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/zydeno.com\/pt\/por-que-lancamos-o-swift-e-nao-o-swiftui\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Why we ship Swift, not SwiftUI\" \/>\n<meta property=\"og:description\" content=\"The honest case for sticking with UIKit when the rest of the industry has moved on.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/zydeno.com\/pt\/por-que-lancamos-o-swift-e-nao-o-swiftui\/\" \/>\n<meta property=\"og:site_name\" content=\"Zydeno Studio\" \/>\n<meta property=\"article:published_time\" content=\"2026-06-08T10:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-14T16:43:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/zydeno.com\/wp-content\/uploads\/2026\/10\/zydeno-social.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Andrii Matiushev\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andrii Matiushev\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\/\/zydeno.com\/why-we-ship-swift-not-swiftui\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/zydeno.com\/why-we-ship-swift-not-swiftui\/\"},\"author\":{\"name\":\"Andrii Matiushev\",\"@id\":\"https:\/\/zydeno.com\/#\/schema\/person\/1af4d0e254f05b407f306ede28252259\"},\"headline\":\"Why we ship Swift, not SwiftUI\",\"datePublished\":\"2026-06-08T10:00:00+00:00\",\"dateModified\":\"2026-10-14T16:43:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/zydeno.com\/why-we-ship-swift-not-swiftui\/\"},\"wordCount\":588,\"publisher\":{\"@id\":\"https:\/\/zydeno.com\/#organization\"},\"articleSection\":[\"Journal\"],\"inLanguage\":\"pt-PT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/zydeno.com\/why-we-ship-swift-not-swiftui\/\",\"url\":\"https:\/\/zydeno.com\/why-we-ship-swift-not-swiftui\/\",\"name\":\"Why we ship Swift, not SwiftUI - Zydeno Studio\",\"isPartOf\":{\"@id\":\"https:\/\/zydeno.com\/#website\"},\"datePublished\":\"2026-06-08T10:00:00+00:00\",\"dateModified\":\"2026-10-14T16:43:19+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/zydeno.com\/why-we-ship-swift-not-swiftui\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/zydeno.com\/why-we-ship-swift-not-swiftui\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/zydeno.com\/why-we-ship-swift-not-swiftui\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/zydeno.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Why we ship Swift, not SwiftUI\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/zydeno.com\/#website\",\"url\":\"https:\/\/zydeno.com\/\",\"name\":\"Zydeno Studio\",\"description\":\"Zydeno is an indie studio designing apps across many categories \u2014 united by a shared obsession with craft and detail. Fast, opinionated, independent apps for iPhone, Android, Windows and Mac, plus extensions for Chrome, Edge and Firefox. Built slowly, shipped carefully.\",\"publisher\":{\"@id\":\"https:\/\/zydeno.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/zydeno.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/zydeno.com\/#organization\",\"name\":\"Zydeno Studio\",\"url\":\"https:\/\/zydeno.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/zydeno.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/zydeno.com\/wp-content\/uploads\/2026\/04\/cropped-icon-512-1.png\",\"contentUrl\":\"https:\/\/zydeno.com\/wp-content\/uploads\/2026\/04\/cropped-icon-512-1.png\",\"width\":512,\"height\":512,\"caption\":\"Zydeno Studio\"},\"image\":{\"@id\":\"https:\/\/zydeno.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/zydeno.com\/#\/schema\/person\/1af4d0e254f05b407f306ede28252259\",\"name\":\"Andrii Matiushev\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/zydeno.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/4df57b6b4737601c798e728e7d4d209a9a9513422db2b613ff707286cb1ea58a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/4df57b6b4737601c798e728e7d4d209a9a9513422db2b613ff707286cb1ea58a?s=96&d=mm&r=g\",\"caption\":\"Andrii Matiushev\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Por que lan\u00e7amos o Swift e n\u00e3o o SwiftUI - Zydeno Studio","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/zydeno.com\/pt\/por-que-lancamos-o-swift-e-nao-o-swiftui\/","og_locale":"pt_PT","og_type":"article","og_title":"Why we ship Swift, not SwiftUI","og_description":"The honest case for sticking with UIKit when the rest of the industry has moved on.","og_url":"https:\/\/zydeno.com\/pt\/por-que-lancamos-o-swift-e-nao-o-swiftui\/","og_site_name":"Zydeno Studio","article_published_time":"2026-06-08T10:00:00+00:00","article_modified_time":"2026-10-14T16:43:19+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/zydeno.com\/wp-content\/uploads\/2026\/10\/zydeno-social.png","type":"image\/png"}],"author":"Andrii Matiushev","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Andrii Matiushev","Tempo estimado de leitura":"3 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/zydeno.com\/why-we-ship-swift-not-swiftui\/#article","isPartOf":{"@id":"https:\/\/zydeno.com\/why-we-ship-swift-not-swiftui\/"},"author":{"name":"Andrii Matiushev","@id":"https:\/\/zydeno.com\/#\/schema\/person\/1af4d0e254f05b407f306ede28252259"},"headline":"Why we ship Swift, not SwiftUI","datePublished":"2026-06-08T10:00:00+00:00","dateModified":"2026-10-14T16:43:19+00:00","mainEntityOfPage":{"@id":"https:\/\/zydeno.com\/why-we-ship-swift-not-swiftui\/"},"wordCount":588,"publisher":{"@id":"https:\/\/zydeno.com\/#organization"},"articleSection":["Journal"],"inLanguage":"pt-PT"},{"@type":"WebPage","@id":"https:\/\/zydeno.com\/why-we-ship-swift-not-swiftui\/","url":"https:\/\/zydeno.com\/why-we-ship-swift-not-swiftui\/","name":"Por que lan\u00e7amos o Swift e n\u00e3o o SwiftUI - Zydeno Studio","isPartOf":{"@id":"https:\/\/zydeno.com\/#website"},"datePublished":"2026-06-08T10:00:00+00:00","dateModified":"2026-10-14T16:43:19+00:00","breadcrumb":{"@id":"https:\/\/zydeno.com\/why-we-ship-swift-not-swiftui\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zydeno.com\/why-we-ship-swift-not-swiftui\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/zydeno.com\/why-we-ship-swift-not-swiftui\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/zydeno.com\/"},{"@type":"ListItem","position":2,"name":"Why we ship Swift, not SwiftUI"}]},{"@type":"WebSite","@id":"https:\/\/zydeno.com\/#website","url":"https:\/\/zydeno.com\/","name":"Zydeno Studio","description":"A Zydeno \u00e9 um est\u00fadio independente que desenvolve aplica\u00e7\u00f5es em diversas categorias \u2014 todas unidas por uma obsess\u00e3o comum pelo trabalho artesanal e pelo detalhe. Aplica\u00e7\u00f5es r\u00e1pidas, com personalidade pr\u00f3pria e independentes para iPhone, Android, Windows e Mac, al\u00e9m de extens\u00f5es para o Chrome, o Edge e o Firefox. Desenvolvidas com calma, lan\u00e7adas com cuidado.","publisher":{"@id":"https:\/\/zydeno.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/zydeno.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/zydeno.com\/#organization","name":"Zydeno Studio","url":"https:\/\/zydeno.com\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/zydeno.com\/#\/schema\/logo\/image\/","url":"https:\/\/zydeno.com\/wp-content\/uploads\/2026\/04\/cropped-icon-512-1.png","contentUrl":"https:\/\/zydeno.com\/wp-content\/uploads\/2026\/04\/cropped-icon-512-1.png","width":512,"height":512,"caption":"Zydeno Studio"},"image":{"@id":"https:\/\/zydeno.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/zydeno.com\/#\/schema\/person\/1af4d0e254f05b407f306ede28252259","name":"Andrii Matiushev","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/zydeno.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/4df57b6b4737601c798e728e7d4d209a9a9513422db2b613ff707286cb1ea58a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4df57b6b4737601c798e728e7d4d209a9a9513422db2b613ff707286cb1ea58a?s=96&d=mm&r=g","caption":"Andrii Matiushev"}}]}},"_links":{"self":[{"href":"https:\/\/zydeno.com\/pt\/wp-json\/wp\/v2\/posts\/569","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zydeno.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zydeno.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zydeno.com\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zydeno.com\/pt\/wp-json\/wp\/v2\/comments?post=569"}],"version-history":[{"count":2,"href":"https:\/\/zydeno.com\/pt\/wp-json\/wp\/v2\/posts\/569\/revisions"}],"predecessor-version":[{"id":774,"href":"https:\/\/zydeno.com\/pt\/wp-json\/wp\/v2\/posts\/569\/revisions\/774"}],"wp:attachment":[{"href":"https:\/\/zydeno.com\/pt\/wp-json\/wp\/v2\/media?parent=569"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zydeno.com\/pt\/wp-json\/wp\/v2\/categories?post=569"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zydeno.com\/pt\/wp-json\/wp\/v2\/tags?post=569"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}