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:
- Você deve estar usando a versão 17.3 ou superior do Visual Studio 2022.
- Você deve ter o iTunes (Microsoft Store ou versão de 64 bits) instalado em sua máquina de desenvolvimento.
- Você deve ter uma conta de Desenvolvedor da Apple e inscrição paga no Programa de Desenvolvedores da Apple.
Instalação
Para configurar a reinicialização dinâmia, execute as seguintes etapas:
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:
Na barra de ferramentas do Visual Studio, selecione Dispositivo local:
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.
No assistente de instalação Configuração da reinicialização dinâmica, clique em Avançar:
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:
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.
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:
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.
No assistente de instalação Configuração da reinicialização dinâmica, clique em Avançar quando seu dispositivo iOS local for detectado:
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.
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.
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.
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.
Na caixa de diálogo Conta individual, insira os dados da chave de API do App Store Connect:
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:
Na caixa de diálogo Conta individual, clique no botão Adicionar. A caixa de diálogo Conta individual será fechada.
No assistente de instalação da Configuração da inicialização dinâmica, clique no botão Encerrar:
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.
No Gerenciador de Soluções, clique com o botão direito do mouse no seu projeto e selecione Propriedades.
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:
A caixa de diálogo Configurar Provisionamento Automático será exibida.
Na caixa de diálogo Configurar Provisionamento Automático, selecione a equipe da chave de API do Connect:
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:
Certifique-se de que seu dispositivo iOS conectado local esteja desbloqueado.
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:
Depois de implantar seu aplicativo, o Visual Studio exibirá a caixa de diálogo Conectando Depurador:
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:
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:
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.