Implantar um aplicativo iOS usando a reinicialização dinâmica

Normalmente, ao criar um aplicativo, o código é compilado e combinado com outros recursos do projeto para criar um pacote de aplicativos que é implantado em seu simulador ou dispositivo. Com esse modelo, ao fazer uma alteração no aplicativo, um novo pacote de aplicativos precisa ser criado e implantado. Embora as compilações incrementais possam ajudar a reduzir o tempo de compilação, as implantações geralmente levam o mesmo tempo, independentemente do tamanho da alteração.

A reinicialização dinâmica da .NET MAUI (.NET Multi-platform App UI) permite que você implante um aplicativo .NET MAUI em um dispositivo iOS local de 64 bits pelo Visual Studio 2022, sem necessidade de um host de build do Mac. Também remove a necessidade de uma recompilação completa do pacote do aplicativo ao enviar por push as novas alterações para o pacote de aplicativos existente que já está presente no seu dispositivo iOS conectado localmente. A funcionalidade dá suporte a alterações em arquivos de código, recursos e referências de projeto, permitindo que você teste as alterações em seus aplicativos de forma rápida durante o desenvolvimento.

Importante

A reinicialização dinâmica não é uma substituição para a experiência de build completa fornecida por um host de build do Mac. Por exemplo, ela só pode implantar aplicativos que usam a configuração de build de depuração e não dá suporte a bibliotecas e estruturas estáticas, XCFrameworks ou pacotes de recursos de associação. Para obter mais informações, confira Limitações.

Há vários requisitos que devem ser atendidos para usar a reinicialização dinâmica para implantar um aplicativo .NET MAUI em um dispositivo iOS conectado localmente:

Instalação

Para configurar a reinicialização dinâmia, execute as seguintes etapas:

  1. Na barra de ferramentas do Visual Studio, use a lista suspensa Destino de depuração para selecionar Dispositivos remotos iOS e, em seguida, a entrada Dispositivo local:

    Captura de tela da escolha do destino de depuração inicial para reinicialização dinâmica.

  2. Na barra de ferramentas do Visual Studio, selecione Dispositivo local:

    Captura de tela do destino de depuração inicial escolhido para reinicialização dinâmica.

    O assistente de instalação da Configuração da reinicialização dinâmica será exibido para guiar você na configuração de um dispositivo iOS local para implantação da reinicialização dinâmica.

  3. No assistente de instalação Configuração da reinicialização dinâmica, clique em Avançar:

    Captura de tela da primeira etapa do assistente de instalação da configuração da reinicialização dinâmica.

  4. Se você não tiver o iTunes instalado, o assistente de instalação solicitará que você o instale. No assistente de instalação Configuração da reinicialização dinâmica, clique em Baixar iTunes:

    Captura de tela da segunda etapa do assistente de instalação da configuração da reinicialização dinâmica.

    Observação

    O iTunes pode ser instalado na Microsoft Store ou baixando-o na Apple.

    Aguarde o download do iTunes e instale-o. Se você for instalá-lo pela Microsoft Store, assim que a instalação for concluída, abra-o e siga as instruções adicionais para permitir que ele descubra dispositivos conectados localmente.

  5. No assistente de instalação Configuração da reinicialização dinâmica, clique em Avançar para passar para a próxima etapa do assistente que solicitará que você conecte um dispositivo iOS local:

    Captura de tela da terceira etapa inicial no assistente de instalação da configuração da reinicialização dinâmica.

  6. Conecte seu dispositivo iOS à máquina de desenvolvimento com um cabo USB. Um prompt poderá aparecer no dispositivo solicitando que você confie no computador de desenvolvimento. No dispositivo, clique em Confiar e siga as instruções adicionais do dispositivo.

  7. No assistente de instalação Configuração da reinicialização dinâmica, clique em Avançar quando seu dispositivo iOS local for detectado:

    Captura de tela da terceira etapa concluída no assistente de instalação da reinicialização dinâmica.

    Observação

    Se o assistente de instalação não conseguir detectar seu dispositivo iOS local, desconecte e reconecte o dispositivo iOS local do computador de desenvolvimento. Além disso, certifique-se de que o iTunes reconheça seu dispositivo iOS local.

  8. No assistente de instalação da Configuração da reinicialização dinâmica, clique no hiperlink Iniciar sessão com uma conta individual para configurar a reinicialização dinâmica para usar sua conta individual do Programa de Desenvolvedor da Apple.

    Captura de tela da quarta etapa inicial no assistente de instalação da configuração da reinicialização dinâmica.

    A caixa de diálogo Conta individual será exibida.

    Observação

    Como alternativa, para configurar a reinicialização dinâmica para usar uma conta corporativa de desenvolvedor da Apple, clique no hiperlink Entrar com uma conta corporativa e insira suas credenciais na caixa de diálogo exibida. Em seguida, vá para a etapa 12.

  9. Crie uma chave de API do App Store Connect. Para isso, você precisará ter uma conta de desenvolvedor da Apple e inscrição paga no Programa de Desenvolvedor da Apple. Para informações sobre como criar uma chave de API do App Store Connect, consulte Criação de chaves de API para a API do App Store Connect em developer.apple.com.

  10. Na caixa de diálogo Conta individual, insira os dados da chave de API do App Store Connect:

    Captura de tela da caixa de diálogo concluída para adicionar uma conta individual da Apple.

    Os dados de Nome, ID do Emissor e ID da Chave podem ser encontrados no App Store Connect selecionando Usuários e Acesso e, em seguida, a guia Chaves. A Chave Privada também pode ser baixada deste local:

    Captura de tela dos detalhes da API do Apple App Store Connect.

  11. Na caixa de diálogo Conta individual, clique no botão Adicionar. A caixa de diálogo Conta individual será fechada.

  12. No assistente de instalação da Configuração da inicialização dinâmica, clique no botão Encerrar:

    Captura de tela da quarta etapa concluída no assistente de instalação da reinicialização dinâmica.

    Sua conta do Programa de Desenvolvedor da Apple será adicionada ao Visual Studio e o assistente de instação da Configuração da reinicialização dinâmica será fechado.

  13. No Gerenciador de Soluções, clique com o botão direito do mouse no seu projeto e selecione Propriedades.

  14. Nas propriedades do projeto, expanda iOS e clique em Assinatura do pacote. Use o menu suspenso Esquema para selecionar Provisionamento Automático e clique no hiperlink Configurar Provisionamento Automático:

    Captura de tela do Provisionamento Automático habilitado na página de propriedades do iOS no Visual Studio.

    A caixa de diálogo Configurar Provisionamento Automático será exibida.

  15. Na caixa de diálogo Configurar Provisionamento Automático, selecione a equipe da chave de API do Connect:

    Captura de tela da caixa de diálogo de provisionamento automático quando configurado corretamente.

    O Visual Studio concluirá o processo de provisionamento automático. Depois, clique no botão Ok para descartar a caixa de diálogo Configurar Provisionamento Automático.

    Observação

    É recomendado usar o provisionamento automático para que dispositivos iOS adicionais possam ser facilmente configurados para implantação. No entanto, você poderá usar o provisionamento manual se os perfis de provisionamento corretos estiverem presentes na máquina.

Implantar e depurar usando a reinicialização dinâmica

Após a configuração inicial, seu dispositivo iOS conectado local aparecerá no menu suspenso do destino de depuração. Para implantar e depurar o aplicativo:

  1. Certifique-se de que seu dispositivo iOS conectado local esteja desbloqueado.

  2. Na barra de ferramentas do Visual Studio, selecione seu dispositivo iOS local conectado na lista suspensa de destino de depuração e clique no botão Executar para criar seu aplicativo e implantá-lo no dispositivo iOS local:

    Captura de tela do destino de depuração escolhido para reinicialização dinâmica.

  3. Depois de implantar seu aplicativo, o Visual Studio exibirá a caixa de diálogo Conectando Depurador:

    Captura de tela da caixa de diálogo solicitando a inicialização do aplicativo no dispositivo.

    Inicie o aplicativo em seu dispositivo e o Visual Studio conectará o depurador ao aplicativo em execução, e a caixa de diálogo Conectando Depurador será descartada.

Enquanto estiver depurando o aplicativo, você pode editar o código C# e pressionar o botão reiniciar na barra de ferramentas do Visual Studio para reiniciar a sessão de depuração com as novas alterações aplicadas:

Captura de tela do botão

Impedir a execução do código

O símbolo do pré-processador HOTRESTART pode ser usado para impedir que o código seja executado durante a depuração com reinicialização dinâmica.

#if !HOTRESTART
  // Code here won't be executed when debugging with hot restart
#endif

Habilitar reinicialização dinâmica

A reinicialização dinâmica é habilitada por padrão no Visual Studio 2022. Se ela tiver sido desabilitada anteriormente, poderá ser habilitada selecionando Ferramentas > Opções na barra de menus do Visual Studio. Em seguida, na caixa de diálogo Opções, expanda Xamarin e selecione Configurações do iOS. Em seguida, certifique-se de que a opção Habilitar reinicialização dinâmica esteja marcada:

Captura de tela de como habilitar a reinicialização dinâmica no Visual Studio.

Limitações

Há limitações ao usar a reinicialização dinâmica:

  • Ela só pode ser usada para implantar aplicativos que usam a configuração de build de depuração. Você ainda precisará de um host de build do Mac para criar, assinar e implantar o aplicativo para fins de produção.
  • Não há suporte para arquivos Storyboard e XIB, e o aplicativo poderá falhar se tentar carregá-los no runtime.
  • Não há suporte para bibliotecas estáticas do iOS e estruturas que contêm bibliotecas estáticas e você poderá ver erros de runtime ou falhas se o aplicativo tentar carregá-las.
  • Há suporte para pacotes XCFrameworks e pacotes de recursos de associação, desde que não contenham bibliotecas estáticas do iOS ou estruturas com bibliotecas estáticas.
  • Não há suporte para catálogos de ativos. Ao usar a Reinicialização Dinâmica, seu aplicativo mostrará um ícone do .NET e uma tela de inicialização.

Solucionar problemas

O iOS usa um watchdog que monitora os tempos de inicialização e a capacidade de resposta do aplicativo e encerra os aplicativos que não respondem. Por exemplo, o watchdog encerra aplicativos que bloqueiam o thread principal por um tempo significativo. Em dispositivos iOS antigos, o watchdog pode encerrar um aplicativo que foi implantado usando a reinicialização dinâmica antes que o depurador se conecte a ele. A solução alternativa é reduzir a quantidade de processamento executada no caminho de inicialização do aplicativo e usar um dispositivo iOS mais recente.

Para relatar problemas adicionais, use a ferramenta de comentários em Ajuda > Enviar comentários > Relatar um problema.