View in English

  • Global Nav Open Menu Global Nav Close Menu
  • Apple Developer
Search
Cancel
  • Apple Developer
  • News
  • Discover
  • Design
  • Develop
  • Distribute
  • Support
  • Account
Only search within “”

Quick Links

5 Quick Links

Vídeos

Abrir menu Fechar menu
  • Coleções
  • Tópicos
  • Todos os vídeos
  • Sobre

Mais vídeos

  • Sobre
  • Resumo
  • Transcrição
  • Código
  • Novidades do SwiftUI

    Conheça as novidades do SwiftUI para criar ótimos apps para qualquer plataforma Apple. Vamos explorar como dar uma nova aparência ao seu app com o Liquid Glass. Descubra como aumentar o desempenho com melhorias no framework e novos instrumentos e como integrar recursos avançados, como conteúdo da web e edição de texto avançado. Também mostraremos como o SwiftUI está expandindo para mais lugares, incluindo a disposição das visualizações em três dimensões.

    Capítulos

    • 0:00 - Introdução
    • 1:22 - Fazer o novo design brilhar
    • 6:59 - Fundamentos do framework
    • 14:33 - SwiftUI em todo o sistema
    • 20:04 - Expandir visualizações do SwiftUI
    • 25:01 - Próximas etapas

    Recursos

    • Adopting Liquid Glass
    • Applying Liquid Glass to custom views
    • Human Interface Guidelines
    • Populating SwiftUI menus with adaptive controls
      • Vídeo HD
      • Vídeo SD

    Vídeos relacionados

    WWDC25

    • Adote os recursos de concorrência do Swift
    • Aprimore o design do seu app para iPad
    • Conheça o layout espacial do SwiftUI
    • Conheça o WebKit para SwiftUI
    • Crie um app em SwiftUI com o novo design
    • Explore a concorrência no SwiftUI
    • Leve o Swift Charts para a terceira dimensão
    • Melhor juntos: SwiftUI e RealityKit
    • Novidades do visionOS 26
    • Novidades dos widgets
    • Novidades na renderização no Metal para apps imersivos
    • Otimize o desempenho do SwiftUI com o Instruments
    • Personalize seu app para Acesso Assistivo
    • Prepare o ambiente com o SwiftUI no visionOS
    • Sessão prática de codificação: crie uma experiência com texto avançado no SwiftUI com o AttributedString
    • Sessão prática de codificação: explore recursos de localização no Xcode
  • Buscar neste vídeo...

    Olá, eu sou a Anna. Eu sou o Peter. Somos engineers na equipe SwiftUI. Queremos mostrar para você as novidades da SwiftUI. Temos melhorias incríveis para compartilhar, desde melhorias de desempenho de baixo nível até botões na sua interface. Ficou mais fácil interagir com texto e conteúdo online, e a SwiftUI agora está em mais lugares. Um dos meus recursos favoritos na SwiftUI, e da Anna também, é tirar fotos em trilhas. Peter e eu criamos um app para ajudar a planejar e compartilhar nossas viagens. Ele usa diversas melhorias da SwiftUI para torná-la ainda mais interessante. Primeiro, vou mostrar os novos recursos do sistema e como eles ajudaram a aprimorar nosso app. Vou mostrar melhorias no desempenho, nas animações e no layout. Peter vai compartilhar os novos lugares onde você encontra a SwiftUI nas plataformas Apple. Por fim, ele apresentará os recursos expandidos nas visualizações da SwiftUI, incluindo compatibilidade com conteúdo da Web e texto com formatação. Vamos começar mostrando como você pode turbinar seu app com um novo design. O novo sistema de design oferece uma experiência vibrante, fácil de usar e consistente em todas as plataformas Apple.

    Peter e eu recompilamos nosso app, que ganhou uma nova aparência. A estrutura não mudou, mas os contêineres de navegação foram atualizados com um novo estilo.

    No iPad e no macOS, a barra lateral do app tem uma aparência translúcida que reflete o conteúdo ao redor. As barras de abas também foram atualizadas. No iPhone, o design também mudou e está mais compacto.

    Além das barras de abas, a maioria dos itens da barra de ferramentas usa o Liquid Glass. Durante as transições de navegação, esses itens podem até se transformar. Confira.

    Nosso app usa a nova API ToolbarSpacer para ajustar as seções dos itens da barra de ferramentas. Usamos um espaçador fixo para separar os botões para cima e para baixo nos ajustes.

    Para destacar itens, é possível incluir cor no Liquid Glass nas barras de ferramentas.

    Peter e eu aplicamos um estilo de botão em destaque com bordas tonalizadas para conseguir esse efeito. Ao rolar a tela do app para baixo, a barra de ferramentas agora aplica um efeito de desfoque ao conteúdo da barra na borda. Esse efeito de borda de rolagem mantém o conteúdo da barra legível, não importa o que está embaixo.

    Para decidir a próxima viagem, as pessoas costumam fazer pesquisas. A busca agora está alinhada na parte inferior do iPhone, tornando a navegação mais ergonômica. No nosso código, o modificador pesquisável fica na parte externa do NavigationSplitView. Peter e eu não precisamos alterar o código para alinhar a busca na parte inferior.

    O posicionamento é o mesmo no iPad, e o app agora mostra a busca reformulada no canto superior direito.

    Com a pesquisa, nunca foi tão rápido encontrar o que você procura. Para apps com abas onde a busca é uma seção específica, a aba Buscar agora aparece separada das outras na barra de abas e se transforma no campo de busca. Defina uma função de busca para sua aba se quiser uma nova aparência. Controles do sistema, como botões, controles segmentados e controles deslizantes, também estão com um novo visual. E as visualizações personalizadas não ficam de fora. Existem APIs para mudar o design delas também. Aplicamos um efeito translúcido na nossa visualização personalizada para que reflita o conteúdo ao redor, como mostramos nas fotos anteriores. Essas atualizações são apenas o começo do que você pode fazer com o novo design. Para saber como aproveitar essas melhorias, desde práticas recomendadas de adoção até personalizações avançadas, confira Criar um app da SwiftUI com o novo design. No iPadOS 26, também foram feitas mudanças interessantes na navegação do seu app. Ao deslizar a tela para baixo, os apps agora exibem uma barra de menus para acesso mais rápido a ações comuns.

    A API de comandos usada para projetar a barra de menus no macOS agora gera o mesmo resultado no iPad. Adicionei alguns comandos de edição de texto, já que nosso app permite fazer anotações para a próxima viagem. Ao planejar uma viagem, as pessoas costumam abrir vários apps ao mesmo tempo. As janelas do iPad ficaram ainda mais flexíveis. Agora é fácil redimensionar seu app.

    Para apps como o nosso, que usam a navegação Split View, o sistema mostra e oculta colunas automaticamente com base no espaço disponível. Para permitir o redimensionamento do app, pare de usar as APIs que fixam a tela cheia, como UIRequiresFullscreen. Essa chave de lista de propriedades foi descontinuada no iPadOS 26. Para saber como permitir as janelas redimensionáveis e a nova barra de menus no seu app para iPad, confira "Aprimorar o design do seu app para iPad". O redimensionamento de janelas no macOS também ficou mais simples. Para redimensionamentos causados por alterações no tamanho da exibição de conteúdo, a SwiftUI agora sincroniza a animação entre o conteúdo e a janela. Agora nosso app usa a âncora de redimensionamento de nova janela para personalizar a origem da animação.

    Isso preserva a continuidade entre diferentes partes do conteúdo, como alternar entre abas na visualização de ajustes. Nosso app ficou ainda mais eficiente com as melhorias nos elementos básicos da SwiftUI. Com desempenho impressionante, melhorias na usabilidade e novos layouts, esse é um ótimo ano para criar apps com a SwiftUI. As melhorias no desempenho do framework beneficiam apps em todas as plataformas Apple, seja o nosso ou o seu. Temos novidades para compartilhar em várias áreas importantes. Isso inclui listas, rolagem e criação de perfil. Estou muito feliz com as melhorias nas listas no macOS. No macOS, agora as listas com mais de 100 mil itens carregam seis vezes mais rápido. E são atualizadas até 16 vezes mais rápido também. Listas maiores têm ganhos de desempenho ainda maiores com melhorias em todas as plataformas.

    Isso melhora a experiência dos usuários do nosso app de planejamento de viagens, seja ao visualizar, filtrar ou atualizar as viagens. Também houve melhorias incríveis na rolagem.

    Ao rolar a tela no seu app, o sistema espera a SwiftUI renderizar o próximo quadro. Se isso não é feito dentro de um prazo específico, há queda de quadros. Ninguém quer isso. Isso pode fazer com que seu app falhe ou fique lento. O agendamento das atualizações de interface da SwiftUI está mais eficiente no iOS e no macOS. Isso melhora a capacidade de resposta e permite que a SwiftUI otimize o processamento dos quadros seguintes. Isso diminui a chance de queda de quadros no seu app durante uma rolagem rápida a uma taxa de quadros alta. Ao usar pilhas lentas, como a LazyVStack neste diagrama, nas visualizações de rolagem, a SwiftUI adia o carregamento das visualizações internas até estarem prestes a entrar na tela. Agora, as visualizações de rolagem aninhadas com pilhas lentas têm esse comportamento. Isso é ótimo para criar visualizações como carrosséis de fotos. Para entender quais problemas de desempenho ainda existem no nosso app, posso usar o novo instrumento de desempenho da SwiftUI no Xcode. Ele tem opções para inspecionar rapidamente vários problemas, como atualizações de corpo de visualização longa ou atualizações da visualização da plataforma. Parece que ainda temos trabalho a fazer se quisermos que o app acompanhe o ritmo de caminhada do Peter.

    Para entender melhor o novo instrumento, confira "Otimizar a performance da SwiftUI com instrumentos".

    A programação simultânea é outra parte fundamental do desenvolvimento do seu app. Com a simultaneidade estruturada, o Swift detecta condições de corrida durante a compilação com segurança. Isso nos ajudou a encontrar falhas no nosso código simultâneo antes que elas afetassem nosso app. Para saber como adicionar simultaneidade estruturada ao app, confira "Como usar a simultaneidade do Swift". Confira também "Explorar a simultaneidade na SwiftUI" para descobrir como a SwiftUI lida com a simultaneidade do Swift.

    Enquanto nosso app carrega simultaneamente seus dados, mostramos uma animação. Criamos a animação com o protocolo Animatable, no qual definimos uma propriedade personalizada de dados animáveis para todas as propriedades de formas, exceto a direção do desenho.

    Depois de adicionar essa declaração de dados animáveis completa, temos diversos códigos para apagar a direção do desenho. Usando a nova macro Animatable, posso apagar a propriedade personalizada de dados animáveis e esperar a SwiftUI sintetizá-la automaticamente. Uso a macro AnimatableIgnored para apagar as propriedades que não quero animar, como a direção do desenho. O layout tem três novas dimensões.

    A SwiftUI tem novos modificadores de profundidade que você já conhece, permitindo layouts mais volumétricos. No visionOS, nosso app permite planejar rotas de trilhas. Quero adicionar um recurso que mostre onde o Sol está em relação à minha posição no momento. Em vez de um alinhamento 2D normal, uso o novo tipo Alignment3D para alinhar o Sol. Adiciono o Sol usando o modificador de sobreposição espacial e ajusto o alinhamento da sobreposição com base na hora do dia.

    Isso é incrível. Agora nunca mais vou me queimar. Isso é só o começo do que você pode fazer com as melhorias no layout espacial no visionOS 26. Confira "Conhecer o layout espacial no SwiftUI" para saber mais sobre as novas ferramentas de criação de experiências espaciais. Peter e eu sempre carregamos mochilas muito cheias. Adicionamos um volume ao app para facilitar na hora de arrumar as mochilas. Com o novo modificador manipulable, as pessoas podem interagir com os objetos no app. Aqui, adicionamos um modelo de garrafa d'água para que as pessoas peguem e movam o objeto.

    Para definir quais itens ainda precisamos colocar na mochila, usamos as novas APIs de encaixe de cena para ler essas informações fora do ambiente.

    Com base nisso, adicionamos um pedestal aos itens que são encaixados na tabela.

    Usando as novas APIs volumétricas, é possível criar experiências bem especiais. Isso é incrível.

    A SwiftUI adiciona melhorias para janelas, volumes e cenas no visionOS, como restauração de janelas e novos tipos de cena. Saiba como usá-las na sessão "Definir a cena com a SwiftUI no visionOS". Confira "Novidades no visionOS" para saber tudo o que há de novo na plataforma. Que melhorias incríveis! Isso vai facilitar a preparação para nossa próxima trilha cheia de fotos. Eu sei. Olha só essa foto que tirei na minha última viagem.

    Foi uma jornada e tanto. Que incrível, Anna. Um bom local para conhecer melhor, assim como a SwiftUI este ano. Seu app pode aproveitar todo o potencial da SwiftUI no nível do sistema. Com as melhorias no cenário e novas APIs em Widgets e Controles, os apps podem ser mais integrados à plataforma. E a SwiftUI funciona ainda melhor em conjunto com outros frameworks. As cenas são os contêineres principais das visualizações no seu app. Elas representam partes discretas da sua interface. Você pode ter acesso às cenas declarando-as no corpo do seu app. Por exemplo, um WindowGroup. Este ano, você já pode incorporar cenas da SwiftUI nos apps com ciclo de vida UIKit e AppKit usando a nova ponte de cenas. Ponte de cenas é muito legal. Ela permite que seus apps do UIKit e AppKit interoperem com cenas da SwiftUI. Os apps podem usá-la para abrir tipos de cena somente da SwiftUI ou utilizar recursos exclusivos da SwiftUI no código do UIKit ou AppKit. Você pode usar tipos de cena como MenuBarExtra e ImmersiveSpace. Isso também funciona para modificadores de cena, como windowStyle e immersiveEnvironmentBehavior. Neste ano, a ponte de cenas funciona com os novos tipos de cena na SwiftUI. Como o RemoteImmersiveSpace, no macOS Tahoe e no visionOS 26, seu app para Mac renderiza conteúdo estéreo no Apple Vision Pro usando uma nova cena.

    O RemoteImmersiveSpace é uma cena do macOS para renderizar conteúdo estéreo no Apple Vision Pro. Você renderiza em um RemoteImmersiveSpace com CompositorServices. Seu app para Mac pode usar efeitos de foco e eventos de entrada. Para saber mais sobre o CompositorServices e o Metal e como usá-los com o RemoteImmersiveSpace, confira "Novidades na renderização do Metal para apps imersivos". Também há o AssistiveAccess, que é uma modalidade especial para usuários com deficiências cognitivas. Seu app também pode mostrar a interface quando alguém usa o iPhone nesse modo adotando o novo tipo de cena AssistiveAccess. Para saber mais sobre essa API e como implementar o AssistiveAccess no seu app no iOS 26, confira "Personalizar seu app para Assistive Access". A SwiftUI passou por grandes melhorias na operacionalização do AppKit este ano. Além da ponte de cenas, você pode exibir páginas com visualizações na SwiftUI. Esse é um bom jeito de adotar a SwiftUI incrementalmente no seu app. Você pode conectar seus gestos do AppKit com a SwiftUI usando o NSGestureRecognizerRepresentable e usar NSHostingView no Construtor de Interface. Este ano, a SwiftUI também oferecerá mais APIs para usar com o RealityKit com várias melhorias. Esses aprimoramentos simplificam a interação com o RealityKit no seu código da SwiftUI. As entidades do RealityKit agora aceitam o Observable, o que facilita observar as alterações nas suas visualizações da SwiftUI. A API de conversão de coordenadas foi aprimorada. E há compatibilidade avançada para apresentações direto do RealityKit. Com um novo componente, é possível apresentar popovers da SwiftUI como este diretamente de uma entidade do RealityKit. Isso é ótimo para marcar exatamente aonde queremos ir na nossa próxima caminhada fotográfica. Há mais recursos devido à integração entre a SwiftUI e o RealityKit, como componentes de anexo, sincronização de animações, vinculação a componentes e novos comportamentos de dimensionamento para o RealityView. Para saber mais sobre a integração contínua da SwiftUI e RealityKit, confira "Melhor juntos: SwiftUI e RealityKit". Adoro os controles na Central de Controle. Uso com frequência no celular para controlar minha casa e meu dispositivo usando atalhos, além das experiências com câmeras. Este ano, o watchOS 26 e o macOS Tahoe terão controles personalizados. Anna e eu estamos muito animados para usar controles nessas plataformas. No Mac, você pode acessar controles personalizados na Central de Controle. Quando saímos para caminhar, podemos marcar a localização das nossas fotos favoritas com um toque no relógio. Incrível! Também adoro widgets. Gosto de ver informações dos meus apps rapidamente. Este ano, eles chegarão ao visionOS e CarPlay. No visionOS, podemos personalizar a aparência dos widgets no espaço compartilhado. Adicionamos um widget de contagem regressiva ao nosso app e usamos o novo valor de ambiente levelOfDetail.

    Quando tocamos no widget, ele expande e mostra fotos que tiramos da última vez que estivemos lá. Essa é uma ótima maneira de conferir nossas fotos na próxima caminhada fotográfica. Faltam só sete dias! Este ano, haverá mais novidades nos widgets, como Atividades ao Vivo no CarPlay, API de atualização por push e novas APIs de relevância no watchOS. Para saber mais, confira "Novidades nos widgets". Neste ano, a SwiftUI expandiu o que as visualizações são capazes de fazer. Desde edição com texto com formatação à criação de gráficos em 3D, há novas visualizações e melhorias nas visualizações existentes na SwiftUI. Para incorporar conteúdo da Web diretamente no seu app, o WebKit agora tem um conjunto completo de APIs da SwiftUI, incluindo WebView. O WebView é uma nova visualização da SwiftUI para mostrar conteúdo da Web no seu app. Ele é viabilizado pelo WebKit, assim como o Safari. Seu app pode mostrar URLs inicializando um WebView. Para personalizar e interagir com a página, os WebViews podem mostrar WebPages, um novo tipo de modelo observável projetado para Swift. O WebPage permite interação avançada com a Web. Você pode navegar na página de forma programática e acessar as propriedades.

    A compatibilidade do WebKit com a SwiftUI permite personalizar agentes de usuário, chamar o JavaScript, criar esquemas de URL personalizados e muito mais. Para saber mais sobre todas essas novas APIs do WebKit, confira "Conhecer o WebKit para SwiftUI". Temos tentado convencer nossas famílias de que nossas caminhadas não são tão perigosas. Com a compatibilidade com 3D nos gráficos do Swift, podemos mostrar isso. Para exibir gráficos 3D, declaramos um Chart3D. O Chart3D mostra gráficos em três dimensões. Podemos usar os novos modificadores específicos de Z para especificar escalas no espaço 3D. Não é à toa que fiquei espirrando naquela última trilha. Fiquei com uma sinusite senoidal! Para saber como incluir gráficos 3D ao app, confira "Usar gráficos 3D no Swift". Para nos ajudar a compartilhar dados de viagens com outros apps, Anna e eu adotamos o recurso Arrastar e Soltar no nosso app para Mac. Neste ano, o recurso Arrastar e Soltar trará melhorias incríveis aos seus apps. Podemos arrastar vários itens usando a nova variante do modificador arrastável, além do novo modificador dragContainer. Isso transforma nossa visualização em um contêiner para itens arrastáveis. Voltamos os itens para transferência depois de selecionar.

    Isso é possibilitado pelo comportamento de seleção personalizado no nosso app. Ao usar esse modificador, a SwiftUI solicita os itens de arrastar sob demanda durante a ação de soltar.

    Com a nova API DragConfiguration, podemos personalizar as operações de soltar no nosso app. Aqui permitimos a exclusão. Para observar os eventos, usamos o novo modificador onDragSessionUpdated. Antes de apagar as fotos, verificamos se a fase foi finalizada com Apagar.

    Agora, as fotos são apagadas quando arrastadas para a lixeira no Dock.

    Para personalizar a aparência das prévias de arrastar durante a ação, podemos especificar uma formação.

    A formação da pilha posiciona os itens uns sobre os outros. Legal! Além de planejar e compartilhar nossas viagens, Anna e eu também queremos que nossos amigos possam acompanhar e participar. Estamos trabalhando em uma forma de eles poderem comentar nossas fotos. A compatibilidade com edição de texto com formatação da SwiftUI é ótima para experiências como essa.

    O TextView agora aceita a AttributedString. Ao integrar AttributedString ao TextEditor, nossos amigos podem usar os controles de formatação de texto do sistema para comentar fotos com rich text. Incrível!

    Sentiu isso? É o cheiro delicioso do texto com formatação na SwiftUI. Este ano, lançamos um menu de opções para texto com formatação e localização. Saiba mais em "Preparar uma experiência de rich text na SwiftUI com AttributedString". Você pode personalizar estilos de parágrafo, transformar atributos e até restringir os atributos que as pessoas podem usar no seu app. Aproveite a sobremesa na sessão "Explorar a localização com Xcode" para criar ótimas experiências em todos os idiomas. É incrível ver todos os novos lugares onde podemos usar a SwiftUI. Além das várias pontes para outros elementos. Veja esta foto da minha última trilha.

    Devemos ir lá da próxima vez. Bem, é hora de irmos tirar mais algumas fotos usando nossos novos apps. Confira a nova aparência e o novo design nos seus apps e use as novas APIs para melhorá-los ainda mais. Analise o desempenho do seu app com o novo instrumento de desempenho. Leve seu app a um novo patamar com as adições de volume e o novo layout espacial. Inclua experiências mais avançadas nos apps usando os aprimoramentos no texto com formatação e no WebKit. E aproveite os controles e widgets disponíveis em mais lugares. Esperamos que você aproveite suas aventuras neste ano com a SwiftUI. Quero descobrir como essas melhorias de desempenho vão me ajudar enfrentar os desafios na nossa próxima trilha. Tudo pronto para começar? Vamos lá!

    • 2:27 - Toolbar spacer

      import SwiftUI
      
      struct TripDetailView: View {
          var body: some View {
              NavigationStack {
                  TripList()
                      .toolbar {
                          ToolbarItemGroup(placement: .primaryAction) {
                              UpButton()
                              DownButton()
                          }
      
                          ToolbarSpacer(.fixed, placement: .primaryAction)
      
                          ToolbarItem(placement: .primaryAction) {
                              SettingsButton()
                          }
                      }
              }
          }
      }
      
      struct TripList: View {
          var body: some View {
              Text("TripList")
          }
      }
      
      struct UpButton: View {
          var body: some View {
              Button("Up", systemImage: "chevron.up") { }
          }
      }
      
      struct DownButton: View {
          var body: some View {
              Button("Down", systemImage: "chevron.down") { }
          }
      }
      
      struct SettingsButton: View {
          var body: some View {
              Button("List Settings", systemImage: "ellipsis") { }
          }
      }
    • 2:52 - Toolbar item tint

      import SwiftUI
      
      struct InspectorView: View {
          var body: some View {
              NavigationStack {
                  InspectorMap()
                      .toolbar {
                          ToolbarItem(placement: .primaryAction) {
                              SaveLocationButton()
                                  .buttonStyle(.borderedProminent)
                                  .tint(.pink)
                          }
                      }
              }
          }
      }
      
      struct InspectorMap: View {
          var body: some View {
              Text("InspectorMap")
          }
      }
      
      struct SaveLocationButton: View {
          var body: some View {
              Button("SaveLocationButton") { }
          }
      }
    • 3:30 - Searchable

      import SwiftUI
      
      struct PlannerSplitView: View {
          @State private var query: String = ""
      
          var body: some View {
              NavigationSplitView {
                  Text("Sidebar")
              } detail: {
                  Text("Detail")
              }
              .searchable(
                  text: $query,
                  prompt: "What are you looking for?"
              )
          }
      }
    • 4:12 - Search tab

      import SwiftUI
      
      struct HealthTabView: View {
          @State private var text: String = ""
          
          var body: some View {
              TabView {
                  Tab("Summary", systemImage: "heart") {
                      NavigationStack {
                          Text("Summary")
                      }
                  }
                  Tab("Sharing", systemImage: "person.2") {
                      NavigationStack {
                          Text("Sharing")
                      }
                  }
                  Tab(role: .search) {
                      NavigationStack {
                          Text("Search")
                      }
                  }
              }
              .searchable(text: $text)
          }
      }
    • 4:37 - Glass effect

      import SwiftUI
      
      struct ToTopButton: View {
          var body: some View {
              Button("To Top", systemImage: "chevron.up") {
                  scrollToTop()
              }
              .padding()
              .glassEffect()
          }
      
          func scrollToTop() {
              // Scroll to top of view
          }
      }
    • 5:20 - Menu bar commands

      import SwiftUI
      
      @main
      struct TravelPhotographyApp: App {
          var body: some Scene {
              WindowGroup {
                  RootView()
              }
              .commands {
                  TextEditingCommands()
              }
          }
      }
      
      struct RootView: View {
          var body: some View {
              Text("RootView")
          }
      }
    • 6:40 - Window resize anchor

      import SwiftUI
      
      struct SettingsTabView: View {
          @State private var selection: SectionTab = .general
          var body: some View {
              TabView(selection: $selection.animation()) {
                  Tab("General", systemImage: "gear", value: .general) {
                      Text("General")
                  }
                  Tab("Sections", systemImage: "list.bullet", value: .sections) {
                      Text("Sections")
                  }
              }
              .windowResizeAnchor(.top)
          }
      }
      
      enum SectionTab: Hashable {
          case general
          case sections
      }
    • 11:24 - @Animatable macro

      import SwiftUI
      
      @Animatable
      struct LoadingArc: Shape {
          var center: CGPoint
          var radius: CGFloat
          var startAngle: Angle
          var endAngle: Angle
          @AnimatableIgnored var drawPathClockwise: Bool
      
          func path(in rect: CGRect) -> Path {
              // Creates a `Path` arc using properties
              return Path()
          }
      }
    • 12:15 - Spatial overlay

      import RealityKit
      import SwiftUI
      
      struct Map: View {
          @Binding var timeAlignment: Alignment3D
      
          var body: some View {
              Model3D(named: "Map")
                  .spatialOverlay(
                      alignment: timeAlignment
                  ) {
                      Sun()
                  }
          }
      }
      
      struct Sun: View {
          var body: some View {
              Model3D(named: "Sun")
          }
      }
    • 13:04 - Manipulable and surface snapping

      import ARKit
      import RealityKit
      import SwiftUI
      
      struct BackpackWaterBottle: View {
          @Environment(\.surfaceSnappingInfo) var snappingInfo: SurfaceSnappingInfo
      
          var body: some View {
              VStackLayout().depthAlignment(.center) {
                  waterBottleView
                      .manipulable()
      
                  Pedestal()
                      .opacity(
                          snappingInfo.classification == .table ? 1.0 : 0.0)
              }
          }
      
          var waterBottleView: some View {
              Model3D(named: "waterBottle")
          }
      }
      
      struct WaterBottleView: View {
          var body: some View {
              Model3D(named: "waterBottle")
          }
      }
      
      struct Pedestal: View {
          var body: some View {
              Model3D(named: "pedestal")
          }
      }
    • 15:00 - SwiftUI scenes

      import SwiftUI
      
      @main
      struct PhotoWalk: App {
          var body: some Scene {
              WindowGroup(id: "AppContents") {
                  PhotoWalkContent()
              }
          }
      }
      
      struct PhotoWalkContent: View {
          var body: some View {
              Text("PhotoWalkContent")
          }
      }
    • 16:28 - Assistive Access scene

      import SwiftUI
      
      @main
      struct PhotoWalk: App {
        var body: some Scene {
          WindowGroup {
            ContentView()
          }
      
          AssistiveAccess {
            AssistiveAccessContentView()
          }
        }
      }
      
      struct ContentView: View {
        var body: some View {
          Text("ContentView")
        }
      }
      
      struct AssistiveAccessContentView: View {
        var body: some View {
          Text("AssistiveAccessContentView")
        }
      }
    • 17:52 - SwiftUI presentations from RealityKit

      import RealityKit
      import SwiftUI
      
      struct PopoverComponentView: View {
          @State private var popoverPresented: Bool = false
          var body: some View {
              RealityView { c in
                  let mapEntity = Entity()
      
                  let popover = Entity()
                  mapEntity.addChild(popover)
                  popover.components[PresentationComponent.self] = PresentationComponent(
                      isPresented: $popoverPresented,
                      configuration: .popover(arrowEdge: .bottom),
                      content: DetailsView()
                  )
              }
          }
      }
      
      struct DetailsView: View {
          var body: some View {
              Text("DetailsView")
          }
      }
    • 19:24 - Level of detail

      import SwiftUI
      import WidgetKit
      
      struct PhotoCountdownView: View {
          @Environment(\.levelOfDetail) var levelOfDetail: LevelOfDetail
          var body: some View {
              switch levelOfDetail {
              case .default:
                  RecentPhotosView()
              case .simplified:
                  CountdownView()
              default:
                  Text("Unknown level of detail")
              }
          }
      }
      
      struct RecentPhotosView: View {
          var body: some View {
              Text("RecentPhotosView")
          }
      }
      
      struct CountdownView: View {
          var body: some View {
              Text("CountdownView")
          }
      }
    • 20:28 - WebView

      import SwiftUI
      import WebKit
      
      struct HikeGuideWebView: View {
          var body: some View {
              WebView(url: sunshineMountainURL)
          }
      
          var sunshineMountainURL: URL {
              URL(string: "sunshineMountainURL")!
          }
      }
    • 20:44 - WebView with WebPage

      import SwiftUI
      import WebKit
      
      struct InAppBrowser: View {
          @State private var page = WebPage()
      
          var body: some View {
              WebView(page)
                  .ignoresSafeArea()
                  .onAppear {
                      page.load(URLRequest(url: sunshineMountainURL))
                  }
          }
      
          var sunshineMountainURL: URL {
              URL(string: "sunshineMountainURL")!
          }
      }
    • 21:35 - 3D charts

      import Charts
      import SwiftUI
      
      struct HikePlotView: View {
          var body: some View {
              Chart3D {
                  SurfacePlot(
                      x: "x", y: "y", z: "z") { x, y in
                          sin(x) * cos(y)
                      }
                      .foregroundStyle(Gradient(colors: [.orange, .pink]))
              }
              .chartXScale(domain: -3 ... 3)
              .chartYScale(domain: -3 ... 3)
              .chartZScale(domain: -3 ... 3)
          }
      }
    • 22:18 - macOS drag and drop

      import SwiftUI
      
      struct DragDropExample: View {
          @State private var selectedPhotos: [Photo.ID] = []
          var body: some View {
              ScrollView {
                  LazyVGrid(columns: gridColumns) {
                      ForEach(model.photos) { photo in
                          view(photo: photo)
                              .draggable(containerItemID: photo.id)
                      }
                  }
              }
              .dragContainer(for: Photo.self, selection: selectedPhotos) { draggedIDs in
                  photos(ids: draggedIDs)
              }
              .dragConfiguration(DragConfiguration(allowMove: false, allowDelete: true))
                  .onDragSessionUpdated { session in
                      let ids = session.draggedItemIDs(for: Photo.ID.self)
                          if session.phase == .ended(.delete) {
                              trash(ids)
                              deletePhotos(ids)
                          }
                  }
              .dragPreviewsFormation(.stack)
          }
      }
    • 23:55 - Rich text view

      import SwiftUI
      
      struct CommentEditor: View {
          @Binding var commentText: AttributedString
      
          var body: some View {
              TextEditor(text: $commentText)
          }
      }
    • 0:00 - Introdução
    • Anna e Peter apresentam a sessão, destacando os principais aprimoramentos no SwiftUI, que abrangem desde o desempenho até os elementos da interface. Eles demonstram essas melhorais no app de trilha que criaram. Também apresentam os novos recursos do sistema, o desempenho, as animações, o layout, as novas plataformas para o SwiftUI, o suporte a conteúdo da Web e texto com formatação.

    • 1:22 - Fazer o novo design brilhar
    • Esta seção destaca o novo sistema de design e como ele afeta a aparência dos apps. Ela aborda a nova aparência dos contêineres de navegação, das barras de abas e das barras de ferramentas. Também trata dos aprimoramentos na pesquisa e nos controles. A seção termina com as melhorias nas interações com o iPad, incluindo uma nova barra de menus e o redimensionamento flexível de janelas, e com o redimensionamento de janelas no macOS. APIs apresentadas/destacadas: API Toolbar Spacer: usada para ajustar as seções de itens da barra de ferramentas. Aplicação de cores do Liquid Glass em barras de ferramentas: possibilita adotar itens mais destacados na barra de ferramentas usando estilos de botão com bordas e coloridos em destaque. Efeito de borda de rolagem: aplica um efeito de desfoque ao conteúdo da barra de ferramentas durante a rolagem. Pesquisar funções nas barras de abas: permite que a aba de busca apareça separada do restante das abas na barra de abas. API Commands: usada para criar a barra de menus no macOS e agora também cria o mesmo resultado no iPad. Âncora de redimensionamento de janela: usada para personalizar o local de origem da animação de redimensionamento da janela. Descontinuidade de UIRequiresFullscreen: a chave da lista de propriedades foi descontinuada no iPadOS 26.

    • 6:59 - Fundamentos do framework
    • Esta seção aborda as melhorias nos fundamentos do SwiftUI, incluindo desempenho, facilidade de uso e layout. Ela detalha os ganhos de desempenho nas listas e na rolagem e apresenta o novo instrumento de desempenho do SwiftUI no Xcode. Além disso, explora a macro Animatable e as novas APIs de layout volumétrico, incluindo aquelas para o visionOS. APIs apresentadas/destacadas: Instrumento de desempenho do SwiftUI (Xcode): uma nova ferramenta para inspecionar as áreas problemáticas de desempenho. Macro Animatable: simplifica o uso do protocolo Animatable com a sintetização automática da propriedade de dados animáveis. Macro AnimatableIgnored: exclui as propriedades da animação quando a macro Animatable é utilizada. Alignment3D: um novo tipo para alinhar as visualizações no espaço 3D. Modificador spatialOverlay: usado para posicionar as visualizações no espaço 3D. Modificador Manipulable: permite que os usuários interajam com os objetos no app. APIs de encaixe de cena: usadas para ler as informações fora do ambiente.

    • 14:33 - SwiftUI em todo o sistema
    • Esta seção se concentra em expandir o alcance do SwiftUI nas diferentes plataformas da Apple. Ela discute a ponte de cenas, permitindo que os apps do UIKit e do AppKit interoperem com cenas SwiftUI. Também aborda a cena RemoteImmersiveSpace para renderizar conteúdo estéreo no Apple Vision Pro direto do macOS. Além disso, menciona o tipo de cena AssistiveAccess para modo especial voltado a usuários com deficiências cognitivas. A seção também aborda as melhorias no trabalho com AppKit, RealityKit, Controles e Widgets. APIs apresentadas/destacadas: Ponte de cenas: permite que os apps feitos com UIKit e AppKit usem cenas SwiftUI. Cena MenuBarExtra: um novo tipo de cena. Cena ImmersiveSpace: um novo tipo de cena. Cena RemoteImmersiveSpace: uma cena do macOS para renderizar conteúdo estéreo no Apple Vision Pro. Cena AssistiveAccess: um tipo de cena para mostrar a interface quando alguém estiver usando o iPhone no modo Acesso Assistivo. NSGestureRecognizerRepresentable: usada para transferir gestos do AppKit para o SwiftUI. Conformidade com Observable para entidades do RealityKit: facilita a observação de mudanças nas entidades do RealityKit direto de views do SwiftUI. Valor de ambiente LevelOfDetail: usado para personalizar a aparência dos widgets com base na proximidade.

    • 20:04 - Expandir visualizações do SwiftUI
    • Esta seção destaca os recursos expandidos de views do SwiftUI. Ela explora o novo WebView para incorporar o conteúdo da web, as melhorias no Swift Charts para gráficos 3D, os aprimoramentos no recurso Arrastar e Soltar e o novo suporte para editar texto com formatação usando AttributedString no TextView. APIs apresentadas/destacadas: WebView: uma nova view do SwiftUI para mostrar conteúdo da web no app. WebPage: um novo tipo de modelo observável criado para o Swift a fim de permitir interação avançada com conteúdo da web. Chart3D: usada para mostrar gráficos em três dimensões. Modificadores específicos de Z (Swift Charts): usados para especificar as escalas no espaço 3D. Modificador Draggable (vários itens): permite arrastar vários itens. Modificador DragContainer: cria uma view de um contêiner para itens arrastáveis. API DragConfiguration: usada para personalizar operações de arrastar. Modificador OnDragSessionUpdated: usado para observar eventos de arrastar. TextView com AttributedString: permite a edição de texto com formatação no SwiftUI.

    • 25:01 - Próximas etapas
    • Os apresentadores resumem os principais pontos da sessão, incentivando os desenvolvedores a explorar os novos recursos e as APIs. Também destacam o novo design, o novo instrumento de desempenho, o layout volumétrico, as melhorias no texto com formatação e o suporte ampliado da plataforma para controles e widgets.

Developer Footer

  • Vídeos
  • WWDC25
  • Novidades do SwiftUI
  • Open Menu Close Menu
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • Icon Composer
    • SF Symbols
    Open Menu Close Menu
    • Accessibility
    • Accessories
    • App Store
    • Audio & Video
    • Augmented Reality
    • Business
    • Design
    • Distribution
    • Education
    • Fonts
    • Games
    • Health & Fitness
    • In-App Purchase
    • Localization
    • Maps & Location
    • Machine Learning & AI
    • Open Source
    • Security
    • Safari & Web
    Open Menu Close Menu
    • Documentation
    • Sample Code
    • Tutorials
    • Downloads
    • Forums
    • Videos
    Open Menu Close Menu
    • Support Articles
    • Contact Us
    • Bug Reporting
    • System Status
    Open Menu Close Menu
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles
    • Feedback Assistant
    Open Menu Close Menu
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program
    • News Partner Program
    • Video Partner Program
    • Security Bounty Program
    • Security Research Device Program
    Open Menu Close Menu
    • Meet with Apple
    • Apple Developer Centers
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Academies
    • WWDC
    Get the Apple Developer app.
    Copyright © 2025 Apple Inc. All rights reserved.
    Terms of Use Privacy Policy Agreements and Guidelines