Tutorial 4 - Atualizar a sua aplicação¶
No último tutorial, empacotamos a nossa aplicação como uma aplicação nativa. Se estiver a lidar com uma aplicação do mundo real, este não vai ser o fim da história - provavelmente fará alguns testes, descobrirá problemas e vai precisar de fazer algumas alterações. Mesmo que a sua aplicação seja perfeita, eventualmente desejará publicar a versão 2 da sua aplicação com melhorias.
Então - como é que se atualiza a aplicação instalada quando faz alterações no código?
Atualizar o código da aplicação¶
Atualmente, a nossa aplicação escreve na consola quando se pressiona o botão. No entanto, as aplicações de GUI não devem realmente usar a consola para os resultados. Elas precisam usar caixas de diálogo para comunicar com os utilizadores.
Vamos adicionar uma caixa de diálogo para dizer olá, em vez de escrever na
consola. Modifique chamada de retorno say_hello para que se pareça com isto:
async def say_hello(self, widget):
await self.main_window.dialog(
toga.InfoDialog(
f"Olá, {self.name_input.value}",
"Olá!",
)
)
Precisamos criar o método async para que quando mostrarmos a caixa de diálogo,
o resto da aplicação continue a ser executada. Não se preocupe muito com esse
detalhe neste momento - vamos dar uma explicação mais detalhada no Tutorial
8.
Isto dirige o Toga a abrir uma caixa de diálogo modal quando o botão é pressionado.
Se executar briefcase dev, digitar um nome e pressionar o botão, vai ver a
nova caixa de diálogo:



No entanto, se correr briefcase run, a caixa de diálogo não vai aparecer.
Porquêe isto? Bem, o briefcase dev opera executando o seu código no local -
ele tenta produzir um ambiente de tempo de execução o mais realista possível
para seu código, mas não fornece nem usa nada da infraestrutura da plataforma
para envolver o seu código como uma aplicação. Parte do processo de
empacotamento da aplicação envolve copiar o código para o bolo da aplicação -
e no momento, a sua aplicação ainda contém o código antigo.
Assim - precisamos dizer ao briefcase para atualizar a sua aplicação, copiando a nova versão do código. Nós podíamos fazer isso apagando o diretório da plataforma antiga e começando do zero. No entanto, o Briefcase oferece uma maneira mais fácil - pode atualizar o código do seu bolo de aplicação existente:
(beeware-venv) $ briefcase update
[helloworld] A atualizar o código da aplicação...
A instalar src/helloworld... concluído
[helloworld] A remover conteúdo desnecessário da aplicação...
A remover conteúdo desnecessário do pacote da aplicação... concluído
[helloworld] Aplicação atualizada.
(beeware-venv) $ briefcase update
[helloworld] A finalizar a configuração da aplicação...
A direcionar para ubuntu:jammy (base de fornecedor Debian)
A determinar a versão da glibc... concluído
A direcionar para glibc 2.35
A direcionar para Python 3.10
[helloworld] A atualizar o código da aplicação...
A instalar src/helloworld... concluído
[helloworld] A remover conteúdo desnecessário da aplicação...
A remover conteúdo desnecessário do pacote da aplicação... concluído
[helloworld] Aplicação atualizada.
(beeware-venv) C:\...>briefcase update
[helloworld] A atualizar o código da aplicação...
A instalar src/helloworld... concluído
[helloworld] A remover conteúdo desnecessário da aplicação...
A remover conteúdo desnecessário do pacote da aplicação... concluído
[helloworld] Aplicação atualizada.
Se o Briefcase não conseguir encontrar o modelo de andaime, ele vai invocar
automaticamente o create para gerar um novo andaime.
Agora que atualizamos o código do instalador, podemos executar o briefcase
build para recompilar a aplicação, o briefcase run para executar a aplicação
atualizada e o briefcase package para reempacotar a aplicação para
distribuição.
Nota
Utilizadores do macOS, lembrem-se de que, conforme observado no Tutorial
3, para o tutorial recomendamos executar o briefcase package
com a bandeira --adhoc-sign para evitar a complexidade da configurar uma
identidade de assinatura de código e manter o tutorial o mais simples possível.
Atualizar e executar num único passo¶
Se está a iterar rapidamente alterações de código, provavelmente vai querer
fazer uma mudança de código, atualizar a aplicação e imediatamente re-correr a
sua aplicação. Para a maioria dos propósitos, o modo de desenvolvedor
(briefcase dev) será a maneira mais fácil de fazer esse tipo de iteração
rápida; no entanto, se estiver a testar algo sobre como sua aplicação corre como
um binário nativo, ou caçando um bug que só se manifesta quando sua aplicação
está em formato empacotado, pode precisar de usar chamadas repetidas para
briefcase run. Para simplificar o processo de atualização e execução do bolo
dq aplicação, o Briefcase tem um atalho para suportar este padrão de uso - a
opção -u (ou -update) no comando run.
Vamos tentar fazer outra alteração. Deve ter notado que, se não escrever um nome
na caixa de entrada de texto, a caixa de diálogo vai dizer "Olá, ". Vamos
modificar a função say_hello novamente para lidar com esse caso extremo.
No topo do ficheiro, entre as importações e a definição da classe HelloWorld,
adicione um método utilitário para gerar uma saudação apropriada, dependendo do
valor do nome que foi fornecido:
def greeting(name):
if name:
return f"Olá, {name}"
else:
return "Olá, desconhecido"
Depois, modifique a chamada de retorno say_hello para usar esse novo método
utilitário:
async def say_hello(self, widget):
await self.main_window.dialog(
toga.InfoDialog(
greeting(self.name_input.value),
"Olá!",
)
)
Execute a sua aplicação no modo de desenvolvimento (com briefcase dev) para
confirmar que a nova lógica funciona; em seguida, atualize, crie e execute a
aplicação com um único comando:
(beeware-venv) $ briefcase run -u
[helloworld] A atualizar o código da aplicação...
A instalar src/helloworld... concluído
[helloworld] A remover conteúdo desnecessário da aplicação...
A remover conteúdo desnecessário do pacote da aplicação... concluído
[helloworld] Aplicação atualizada.
[helloworld] A compilar a aplicação...
...
[helloworld] Compilado build/helloworld/macos/app/Hello World.app
[helloworld] A iniciar a aplicação...
(beeware-venv) $ briefcase run -u
[helloworld] A finalizar a configuração da aplicação...
A direcionar para ubuntu:jammy (base de fornecedor: Debian)
A determinar a versão do glibc... concluído
A direcionar para glibc 2.35
A direcionar para Python 3.10
[helloworld] A atualizar o código da aplicação...
A instalar src/helloworld... concluído
[helloworld] A remover conteúdo desnecessário da aplicação...
A remover conteúdo desnecessário do pacote da aplicação... concluído
[helloworld] Aplicação atualizada.
[helloworld] A compilar a aplicação...
...
[helloworld] Compilado build/helloworld/linux/ubuntu/jammy/helloworld-0.0.1/usr/bin/helloworld
[helloworld] A iniciar a aplicação...
(beeware-venv) C:\...>briefcase run -u
[helloworld] A atualizar o código da aplicação...
A instalar src/helloworld... concluído
[helloworld] A remover conteúdo desnecessário da aplicação...
A remover conteúdo desnecessário do pacote da aplicação... concluído
[helloworld] Aplicação atualizada.
[helloworld] A iniciar a aplicação...
O comando package também aceita o argumento -u, assim se fizer uma alteração
no código da sua aplicação e quiser reempacotar imediatamente, poderá executar
briefcase package -u.
Próximos passos¶
Agora temos a nossa aplicação empacotada para distribuição em plataformas de ambiente de trabalho e conseguimos atualizar o código na nossa aplicação.
Mas e quanto aos dispositivos móveis? No Tutorial 5, vamos converter a nossa aplicação num aplicação móvel e vamos implantá-la num simulador de dispositivo, e num telemóvel.