Tutorial 4 - Atualizando sua aplicação#

No último tutorial, empacotamos nosso aplicativo como um aplicativo nativo. Se estiver lidando com um aplicativo do mundo real, esse não será o fim da história - você provavelmente fará alguns testes, descobrirá problemas e precisará fazer algumas alterações. Mesmo que o seu aplicativo seja perfeito, você eventualmente desejará publicar a versão 2 do seu aplicativo com melhorias.

Então, como você atualiza o aplicativo instalado quando faz alterações no código?

Atualização do código do aplicativo#

Atualmente, nosso aplicativo imprime no console quando você pressiona o botão. No entanto, os aplicativos de GUI não devem realmente usar o console para saída. Eles precisam usar caixas de diálogo para se comunicar com os usuários.

Vamos adicionar uma caixa de diálogo para dizer olá, em vez de escrever no console. Modifique o retorno de chamada say_hello para que ele tenha a seguinte aparência:

def say_hello(self, widget):
    self.main_window.info_dialog(
        f"Hello, {self.name_input.value}",
        "Hi there!"
    )

Isso instrui o Toga a abrir uma caixa de diálogo modal quando o botão é pressionado.

Se você executar briefcase dev, digitar um nome e pressionar o botão, verá a nova caixa de diálogo:

Caixa de diálogo do Hello World Tutorial 4, no macOS

No entanto, se você executar o briefcase run, a caixa de diálogo não será exibida.

Por que isso acontece? Bem, o briefcase dev opera executando seu código no local - ele tenta produzir o ambiente de tempo de execução mais realista possível para seu código, mas não fornece nem usa nenhuma infraestrutura da plataforma para empacotar seu código como um aplicativo. Parte do processo de empacotamento do aplicativo envolve a cópia do código para o pacote de aplicativos e, no momento, o aplicativo ainda contém o código antigo.

Portanto, precisamos dizer ao briefcase para atualizar seu aplicativo, copiando a nova versão do código. Poderíamos fazer isso excluindo o diretório da plataforma antiga e começando do zero. No entanto, o Briefcase oferece uma maneira mais fácil: você pode atualizar o código do seu aplicativo empacotado existente:

(beeware-venv) $ briefcase update

[helloworld] Updating application code...
Installing src/helloworld... done

[helloworld] Removing unneeded app content...
Removing unneeded app bundle content... done

[helloworld] Application updated.

Se o Briefcase não conseguir encontrar o modelo de andaime, ele invocará automaticamente o create para gerar um novo andaime.

Agora que atualizamos o código do instalador, podemos executar o briefcase build para recompilar o aplicativo, o briefcase run para executar o aplicativo atualizado e o briefcase package para reembalar o aplicativo para distribuição.

(Usuários do macOS, lembrem-se de que, conforme observado em Tutorial 3, para o tutorial, recomendamos executar o briefcase package com o sinalizador --adhoc-sign para evitar a complexidade da configuração de uma identidade de assinatura de código e manter o tutorial o mais simples possível)

Atualize e execute em uma única etapa#

Se estiver iterando rapidamente as alterações no código, provavelmente desejará fazer uma alteração no código, atualizar o aplicativo e executá-lo novamente de imediato. Para a maioria das finalidades, 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 testando algo sobre como o aplicativo é executado como um binário nativo ou procurando um bug que só se manifesta quando o aplicativo está no formato empacotado, talvez seja necessário usar chamadas repetidas para briefcase run. Para simplificar o processo de atualização e execução do aplicativo empacotado, o Briefcase tem um atalho para suportar esse padrão de uso - a opção -u (ou --update) no comando run.

Vamos tentar fazer outra alteração. Você deve ter notado que, se não digitar um nome na caixa de entrada de texto, a caixa de diálogo dirá «Hello, «. Vamos modificar a função say_hello novamente para lidar com esse caso extremo.

Na parte superior do arquivo, 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"Hello, {name}"
    else:
        return "Hello, stranger"

Em seguida, modifique a chamada de retorno say_hello para usar esse novo método utilitário:

def say_hello(self, widget):
    self.main_window.info_dialog(
        greeting(self.name_input.value),
        "Hi there!",
    )

Execute seu aplicativo no modo de desenvolvimento (com briefcase dev) para confirmar que a nova lógica funciona; em seguida, atualize, crie e execute o aplicativo com um único comando:

(beeware-venv) $ briefcase run -u

[helloworld] Updating application code...
Installing src/helloworld... done

[helloworld] Removing unneeded app content...
Removing unneeded app bundle content... done

[helloworld] Application updated.

[helloworld] Building application...
...

[helloworld] Built build/helloworld/macos/app/Hello World.app

[helloworld] Starting app...

O comando package também aceita o argumento -u, portanto, se você fizer uma alteração no código do aplicativo e quiser reempacotar imediatamente, poderá executar briefcase package -u.

Próximos passos#

Agora temos nosso aplicativo empacotado para distribuição em plataformas de desktop e conseguimos atualizar o código em nosso aplicativo.

Mas e quanto ao celular? No Tutorial 5, converteremos nosso aplicativo em um aplicativo móvel e o implantaremos em um simulador de dispositivo e em um telefone.