Atualizações e notas para desenvolvedores .NET MAUI

Aqui está o que você pode ter perdido no .NET 10 para desenvolvedores .NET MAUI direcionados ao iOS.

Os novos recursos em .NET 10 para .NET MAUI não pare! 😎 Neste artigo, vamos nos aprofundar nas atualizações específicas do iOS introduzidas no .NET 10 — melhorias que impactam diretamente o desempenho, a confiabilidade e a experiência geral de desenvolvimento de aplicativos móveis.

Descreveremos o que mudou, o que foi otimizado e o que você, como desenvolvedor .NET MAUI direcionado ao iOS, deve ter em mente para aproveitar ao máximo esta versão.

🔧 Plataformas Suportadas

Uma das primeiras perguntas que recomendo fazer ao adotar uma nova versão — especificamente neste caso para .NET iOS (embora se aplique a tudo) — é saber quais versões são oficialmente suportadas.

Por que? Porque isso informa quais versões de dispositivo e/ou emulador seu ambiente deve corresponder para aproveitar ao máximo os novos recursos!

Para iOS, tvOS, Mac Catalyst e macOSas seguintes versões são suportadas:

  • iOS 18.2
  • tvOS 18.2
  • Mac Catalisador 18.2
  • macOS 15.2

Pré-visualização 7: Xcode 26 Beta 4

Por enquanto, o Preview 7 ainda não inclui compilações completas para .NET 10, mas introduz compatibilidade inicial com Xcode 26 Beta 4focado em Projetos .NET 9.

Colocando isso em prática, para utilizar as novas APIs/bindings do iOS 26 (Xcode 26), você deve adicionar dois elementos importantes dentro do seu marcação:

Adicione a tag TargetFramework:

Especifica a versão do ambiente de desenvolvimento, por exemplo:

<TargetFramework>net9.0-ios26TargetFramework>

Então você deve adicionar um NoWarn:

<NoWarn>$(NoWarn);XCODE_26_0_PREVIEWNoWarn>

⚠️ Isso NoWarn é necessário porque o Xcode 26 ainda está em Beta e evita que o projeto mostre avisos de compatibilidade.

Um exemplo completo ficaria assim:

 
     
	    net9.0-ios26 
	    $(NoWarn);XCODE_26_0_PREVIEW 
	     
     


Problemas de renderização do shell .NET MAUI

⚠️ Anteriormente, havia um problema com Concha .NET MAUI renderização no iOS 26. Agora você pode ter certeza de que esse problema foi resolvido em Versão de serviço .NET MAUI 9 11 e NET MAUI 10 RC1.

Para saber mais sobre o .NET 10 no iOS, tvOS, Mac Catalyst e macOS, a documentação oficial recomenda revisar o problemas conhecidos no .NET 10.

Você também pode explorar as notas de lançamento das versões prévias do .NET 10.0.1xx:

Aparador

O trimmer é uma ferramenta .NET que realiza uma espécie de “operação de limpeza” no código do seu aplicativo. Ele analisa seu projeto, detecta código não utilizado e o remove. Em outras palavras, ajuda seu aplicativo a ficar mais leve, mais eficiente e muito mais rápido de carregar.

No .NET 10, foram introduzidas duas melhorias importantes relacionadas ao seu comportamento.

1. Trimmer habilitado em mais configurações

Com o .NET 10, esse “limpador inteligente” — o Trimmer — agora pode ser habilitado por padrão em mais cenários, como:

  • Simulador iOS/arm64 (todas as configurações)
  • tvOS Simulator/arm64 (todas as configurações)
  • Mac Catalyst/arm64 (todas as configurações)

Quando você vê todas as configuraçõesisso significa que se aplica a diferentes configurações de compilação, como Depurar, Liberar e outros.

2. Avisos do aparador ativados por padrão

Anteriormente, os avisos do trimmer estavam desativados por padrão. Isso ocorreu porque a biblioteca de classes base produzia seus próprios avisos de corte, impossibilitando o desenvolvedor de corrigir todos os avisos detectados.

A boa notícia é que no .NET 9, todos os avisos de corte relacionados ao iOS foram resolvidos e, graças a isso, os avisos de corte agora estão habilitados por padrão.

No entanto, se por algum motivo você quiser desativá-los, poderá fazê-lo facilmente. Basta adicionar o SuprimirTrimAnalysisWarnings propriedade ao seu arquivo .csproj da seguinte forma:

  
    true 


Agrupando recursos originais em bibliotecas

Os projetos de biblioteca podem conter diferentes tipos de recursos, como:

  • Storyboards
  • XIBs
  • Listas de propriedades (plist)
  • Imagens
  • Modelos CoreML
  • E outros

Esses recursos exigem tarefas de processamento como compilação de storyboards ou XIBs, otimização de arquivos plist e muito mais. Esse processamento vem com algumas considerações importantes, como:

  • Executando em um Mac, porque a compilação de storyboards/XIBs só é possível no macOS.
  • Usando o conjunto de ferramentas da Apple (xcodebuild, ibtool, actool, etc.).

Todos esses requisitos podem complicar a construção de bibliotecas porque:

  • Você nem sempre tem acesso a um Mac.
  • Você não pode tomar decisões no aplicativo final com base nos recursos originais, porque eles já foram “processados”.
  • Você obtém apenas a versão processada.
  • E, portanto, isso limita a flexibilidade do projeto que consome a biblioteca.

Mas agora temos uma melhoria 😎

No .NET 9foi introduzido suporte opcional (opt-in) que permitiu incluir os recursos originais dentro da biblioteca sem processá-los.

No .NET 10as coisas ficam ainda melhores! 😍 Esse suporte agora é o comportamento padrão (opt-out).

Isso torna nossos aplicativos mais flexíveis, elimina a forte dependência de ter um Mac disponível e resulta em compilações de CI/CD muito mais consistentes.

Como faço para ativar ou desativar esta opção?

Se por algum motivo você quiser reverter esse comportamento padrão – o que significa que você não deseja incluir os recursos originais e prefere que a biblioteca contenha os processados ​​- você pode fazer isso adicionando a seguinte tag em seu arquivo de projeto:

 
    false 


Crie projetos vinculativos no Windows

Antes, os projetos de vinculação dependiam das ferramentas do ecossistema da Apple (o que significa que você precisava de um Mac para compilá-los).

😎 Com o .NET 10, isso mudou!

Projetos vinculativos agora podem ser construídos inteiramente no Windowssem exigir um Mac ou qualquer conexão remota. Isto resulta em compilações muito mais rápidas no Windows. Uau! 🎉

Este é um MUITO grande melhoria para quem trabalha em dispositivos Windows!

🔐 NSUrlSessionHandler não define mais o protocolo TLS mínimo automaticamente

Caso você não saiba, TLS (Segurança da Camada de Transporte) é um protocolo de segurança que protege a comunicação entre dois endpoints — por exemplo, seu aplicativo e o servidor.

Anteriormente, tínhamos um comportamento assim:

  • NSUrlSessionHandler confiou no valor de ServicePointManager.SecurityProtocol para determinar o protocolo TLS mínimo a ser usado.
  • Mas essa abordagem está agora obsoleta, porque ServicePointManager não é mais usado.

Portanto, a partir do .NET 10, se você quiser definir o protocolo TLS mínimo, deverá fazê-lo manualmente antes de criar o NSUrlSessionHandlerconforme mostrado abaixo:

var sessionConfiguration = NSUrlSessionConfiguration.DefaultSessionConfiguration;
    
sessionConfiguration.TlsMinimumSupportedProtocolVersion = TlsProtocolVersion.Tls13;
    
var handler = new NSUrlSessionHandler(sessionConfiguration);

🚫 A propriedade NSUrlSessionHandler.BypassBackgroundSessionCheck agora foi ignorada

Essa propriedade existia como solução alternativa para um problema antigo no tempo de execução do Mono. Como não é mais necessário, a propriedade agora é ignorada.

Conclusão

E é isso! 🎉 Neste artigo, você explorou as principais melhorias que o .NET 10 traz para o desenvolvimento de iOS, tvOS, macOS e Mac Catalyst. Desde o suporte expandido ao trimmer e o gerenciamento aprimorado de recursos até compilações de vinculação mais rápidas baseadas no Windows e padrões de rede atualizados, essas mudanças trabalham juntas para criar uma experiência de desenvolvimento mais eficiente, consistente e moderna.

Agora você tem uma compreensão mais clara de como essas atualizações afetam seu fluxo de trabalho, ajudando você a criar aplicativos mais leves, reduzir o atrito específico da plataforma e aproveitar ao máximo o que o .NET 10 oferece para plataformas Apple.

Se você tiver alguma dúvida ou quiser que eu aborde mais tópicos relacionados, fique à vontade para deixar um comentário – ficarei feliz em ajudá-lo! 💚

Vejo você no próximo artigo! 🙋‍♀️✨

Referências

A explicação foi baseada na documentação oficial:

Deixe um comentário