Aplicativo de atualização de Beeware
Neste artigo, você explorará o processo de implementação de um aplicativo de atualização Beeware para manter seus aplicativos Python atualizados.
O Beeware fornece funcionalidade integrada para implementar mecanismos de atualização em seus aplicativos Python, permitindo que você distribua facilmente atualizações para seus usuários finais.
Em nosso artigo anterior , convertemos com sucesso nosso aplicativo em um aplicativo nativo. No entanto, para aplicações do mundo real, esta não é a etapa final. Você pode encontrar problemas durante o teste e exigir modificações. Mesmo que seu aplicativo seja perfeito, você pode eventualmente querer lançar uma segunda versão com melhorias.
Portanto, qual é o processo para atualizar seu aplicativo instalado depois de modificar o código?
Por que os mecanismos de atualização são importantes
As atualizações de software são cruciais para manter a qualidade e a segurança de seus aplicativos. As atualizações geralmente incluem novos recursos, melhorias de desempenho e correções de bugs que aprimoram a experiência do usuário e solucionam problemas conhecidos. Além disso, as atualizações podem corrigir vulnerabilidades de segurança, protegendo seu aplicativo e seus usuários contra possíveis ameaças à segurança. A implementação de um mecanismo de atualização eficaz em seus aplicativos Python garante que seus usuários sempre tenham acesso à versão mais recente de seu aplicativo, proporcionando uma experiência de usuário perfeita e confiável.
Atualizando o código do aplicativo
Seu aplicativo está atualmente configurado para imprimir a saída no console quando você pressiona o botão. No entanto, não é recomendado que aplicativos GUI usem o console para saída, pois eles devem usar diálogos para se comunicar com os usuários. Portanto, você precisa adicionar uma caixa de diálogo para exibir a saída em vez de imprimir no console. Para conseguir isso, você pode modificar a função de retorno de chamada de saída da seguinte maneira:
import toga from toga.style import Pack from toga.style.pack import COLUMN, ROW class HelloWorld(toga.App): def startup(self): main_box = toga.Box(style=Pack(direction=COLUMN)) name_label = toga.Label( "Client Name: ", style=Pack(padding=(0, 5)) ) self.name_input = toga.TextInput(style=Pack(flex=1)) name_box = toga.Box(style=Pack(direction=ROW, padding=5)) name_box.add(name_label) name_box.add(self.name_input) password_label = toga.Label( "Password: ", style=Pack(padding=(0, 5)) ) self.password_input = toga.PasswordInput(style=Pack(flex=1)) password_box = toga.Box(style=Pack(direction=ROW, padding=5)) password_box.add(password_label) password_box.add(self.password_input) button = toga.Button( "Login", on_press=self.output, style=Pack(padding=5) ) main_box.add(name_box) main_box.add(password_box) main_box.add(button) self.main_window = toga.MainWindow(title=self.formal_name) self.main_window.content = main_box self.main_window.show() def output(self, widget): self.main_window.info_dialog( f"Thank you {self.name_input.value}", "You are successfully logged in!" ) def main(): return HelloWorld()
Quando você pressiona o botão de login, o Toga abrirá uma caixa de diálogo modal conforme especificado. Portanto, se você inserir um nome e executar o briefcase dev, a caixa de diálogo recém-adicionada será exibida.
Saída do Programa
Quando você usa o briefcase dev para executar seu código, ele cria um ambiente de tempo de execução realista para seu aplicativo, mas não utiliza nenhuma infraestrutura de plataforma para empacotá-lo como um aplicativo. Portanto, ao executar o briefcase dev e pressionar o botão de login, você verá a nova caixa de diálogo. No entanto, quando você executar a execução do porta-arquivos, a caixa de diálogo não aparecerá. O motivo é que a execução de pasta copia seu código no pacote de aplicativos e, no momento, seu aplicativo ainda contém o código antigo.
Para atualizar seu aplicativo com o novo código, você pode excluir o antigo diretório da plataforma e começar do zero ou pode usar uma abordagem mais simples fornecida pelo Briefcase – atualizando o código do seu aplicativo integrado.
Mac OS
(beeware-mrxenv) $ briefcase update [helloworld] Updating application code... Installing src/helloworld... [helloworld] Application updated.
Linux
(beeware-mrxenv) $ briefcase update [helloworld] Updating application code... Installing src/helloworld... [helloworld] Application updated.
janelas
(beeware-mrxenv) C:\...>briefcase update [helloworld] Updating application code... Installing src/helloworld... [helloworld] Application updated.
Caso o Porta-arquivos não consiga localizar o modelo com scaffold, ele usará automaticamente o comando create para criar um novo scaffold. Agora que você atualizou o código do instalador, pode executar o briefcase build para recompilar o aplicativo, o briefcase run para executar o aplicativo atualizado e o briefcase package para empacotar o aplicativo para distribuição. Se você for um usuário do macOS, é importante observar que, conforme mencionado no artigo anterior, sugerimos usar o sinalizador –no-sign ao executar o pacote maleta para evitar a dificuldade de configurar uma identidade de assinatura de código e manter o processo como direto possível.
Atualizar e executar
Se você está constantemente fazendo alterações em seu código e deseja ver os resultados rapidamente, pode atualizar e executar seu aplicativo imediatamente. Se você quiser testar como seu aplicativo é executado como um binário nativo ou solucionar um problema que ocorre apenas no formato empacotado, talvez seja necessário usar chamadas repetidas para a execução do porta-arquivos. Para simplificar o processo de atualização e execução do aplicativo integrado, o Briefcase fornece uma opção de atalho – a opção -u (ou –update) no comando de execução.
Vamos fazer outra alteração no código. Se você não digitou um nome na caixa de entrada de texto, a caixa de diálogo dirá “Obrigado”. Podemos modificar a função de saída para lidar com esse cenário. Adicione um método utilitário na parte superior do arquivo, entre as importações e a definição da classe HelloWorld, que pode gerar uma saudação apropriada com base no nome fornecido.
import toga from toga.style import Pack from toga.style.pack import COLUMN, ROW class HelloWorld(toga.App): def startup(self): main_box = toga.Box(style=Pack(direction=COLUMN)) name_label = toga.Label( "Client Name: ", style=Pack(padding=(0, 5)) ) self.name_input = toga.TextInput(style=Pack(flex=1)) name_box = toga.Box(style=Pack(direction=ROW, padding=5)) name_box.add(name_label) name_box.add(self.name_input) password_label = toga.Label( "Password: ", style=Pack(padding=(0, 5)) ) self.password_input = toga.PasswordInput(style=Pack(flex=1)) password_box = toga.Box(style=Pack(direction=ROW, padding=5)) password_box.add(password_label) password_box.add(self.password_input) button = toga.Button( "Login", on_press=self.output, style=Pack(padding=5) ) main_box.add(name_box) main_box.add(password_box) main_box.add(button) self.main_window = toga.MainWindow(title=self.formal_name) self.main_window.content = main_box self.main_window.show() def login(self, nm, pwd): if nm and pwd: return f"Thank you {nm}" else: return f"Login failed" def desc(self, nm, pwd): if nm and pwd: return "You are successfully logged in!" else: return "Your inserted information is invalid!" def output(self, widget): self.main_window.info_dialog( self.login(self.name_input.value, self.password_input.value), self.desc(self.name_input.value, self.password_input.value) ) def main(): return HelloWorld()
- No código acima, estamos definindo um aplicativo GUI usando a biblioteca Toga . O aplicativo possui dois campos de entrada para “ Nome do cliente ” e “ Senha ”, e um botão “ Login ”. Quando o botão é pressionado, ele chama o método “output”, que pega os valores de entrada e os passa para outros dois métodos, “login” e “desc”.
- O método “login” verifica se ambos os campos possuem valores e retorna uma string de acordo. Se ambos os campos tiverem valores, retorna “Thank you” seguido do nome do cliente, caso contrário retorna “Login failed”.
- O método “ desc ” também verifica se ambos os campos possuem valores e retorna uma string de acordo. Se ambos os campos tiverem valores, retorna “Você se conectou com sucesso!”, caso contrário, retorna “Sua informação inserida é inválida!”.
- O método “output” chama os métodos “login” e “desc” com os valores de entrada e exibe as strings retornadas em uma caixa de diálogo de informações.
- O layout da GUI é criado usando os widgets Box e Label do Toga, e o estilo é definido usando a classe Pack. A classe MainWindow é usada para criar a janela principal do aplicativo e para mostrar a GUI.
- Por fim, a função main() retorna uma instância da classe HelloWorld, que é o aplicativo Toga que definimos.
Para garantir que a nova lógica funcione, você deve executar seu aplicativo no modo de desenvolvimento usando o briefcase dev.
Depois de confirmar as alterações, você pode atualizar, criar e executar o aplicativo usando um único comando.
Mac OS
(beeware-mrxenv) $ briefcase run -u [helloworld] Updating application code... Installing src/helloworld... [helloworld] Removing unneeded app content... ... [helloworld] Application updated. [helloworld] Building application... ... [helloworld] Built build/helloworld/macos/app/Hello World.app [helloworld] Starting app...
Linux
(beeware-mrxenv) $ briefcase run -u [helloworld] Finalizing application configuration... Targeting ubuntu:jammy (Vendor base debian) Determining glibc version... done Targeting glibc 2.35 Targeting Python3.10 [helloworld] Updating application code... Installing src/helloworld... done [helloworld] Removing unneeded app content... ... [helloworld] Application updated. [helloworld] Building application... ... [helloworld] Built build/helloworld/linux/ubuntu/jammy/helloworld-0.0.1/usr/bin/helloworld [helloworld] Starting app...
janelas
(beeware-mrxenv) C:\...>briefcase run -u [helloworld] Updating application code... Installing src/helloworld... [helloworld] Removing unneeded app content... ... [helloworld] Application updated. [helloworld] Starting app...
Se você modificar o código do aplicativo e quiser reempacotá-lo imediatamente, poderá usar o argumento -u com o comando package. Portanto, você pode simplesmente executar maleta package -u para conseguir isso.
Benefícios do aplicativo de atualização de Beeware
- Atualizar seu aplicativo garante que ele tenha os recursos e correções de bugs mais recentes, o que melhora sua funcionalidade geral.
- As atualizações de aplicativos geralmente incluem patches de segurança que protegem seu aplicativo contra vulnerabilidades e ameaças à segurança.
- Atualizar seu aplicativo pode melhorar a interface e a experiência do usuário, tornando-o mais agradável e intuitivo para seus usuários.
- As atualizações de aplicativos geralmente incluem melhorias de desempenho que podem tornar seu aplicativo mais rápido e eficiente.
- Atualizar seu aplicativo garante que ele seja compatível com os dispositivos e sistemas operacionais mais recentes, o que expande seu alcance e base de usuários em potencial.
Conclusão
Ao manter seu aplicativo Beeware atualizado, você pode desfrutar de várias vantagens, como correções de bugs, acesso a novos recursos, atualizações de segurança e desempenho aprimorado. Ele também permite que você incorpore as tecnologias e práticas recomendadas mais recentes e garanta que seu aplicativo seja compatível com as versões mais recentes de sistemas operacionais e dispositivos. Atualizações frequentes podem aumentar a satisfação e o engajamento do usuário, levando a mais sucesso e lucratividade para seu aplicativo. Portanto, é altamente recomendável tornar a atualização do aplicativo Beeware uma parte rotineira do processo de desenvolvimento.