Tutoriel 4 - Mise à jour de votre application¶
Dans le dernier tutoriel, nous avons packagé notre application en tant qu'application native. Si vous avez affaire à une application réelle, l'histoire ne s'arrêtera pas là : vous ferez probablement des tests, découvrirez des problèmes et devrez apporter des modifications. Même si votre application est parfaite, vous finirez par vouloir publier la version 2 de votre application avec des améliorations.
Alors, comment mettre à jour l'application installée lorsque vous modifiez le code ?
Mise à jour du code de l'application¶
Notre application imprime actuellement sur la console lorsque vous appuyez sur le bouton. Cependant, les applications d'interface graphique ne devraient pas vraiment utiliser la console pour la sortie. Elles doivent utiliser des boîtes de dialogue pour communiquer avec les utilisateurs.
Ajoutons une boîte de dialogue pour dire bonjour, au lieu d'écrire dans la
console. Modifiez le callback say_hello pour qu'il ressemble à ceci :
async def say_hello(self, widget):
await self.main_window.dialog(
toga.InfoDialog(
f"Hello, {self.name_input.value}",
"Hi there!",
)
)
Nous devons rendre la méthode async afin que lorsque nous affichons le
dialogue, le reste de l'application continue à fonctionner. Ne vous inquiétez
pas trop de ce détail pour l'instant - nous donnerons une explication plus
détaillée dans le Tutoriel 8.
Toga ouvre ainsi une boîte de dialogue modale lorsque le bouton est enfoncé.
Si vous lancez briefcase dev, entrez un nom et appuyez sur le bouton, vous
verrez la nouvelle boîte de dialogue :



Cependant, si vous exécutez briefcase run, la boîte de dialogue n'apparaîtra
pas.
Pourquoi ? Eh bien, briefcase dev fonctionne en exécutant votre code sur place
- il essaie de produire un environnement d'exécution aussi réaliste que possible
pour votre code, mais il ne fournit ni n'utilise aucune infrastructure de
plate-forme pour envelopper votre code en tant qu'application. Une partie du
processus d'emballage de votre application implique de copier votre code dans
le paquet d'application - et pour le moment, votre application contient toujours
l'ancien code.
Nous devons donc demander à Briefcase de mettre à jour votre application, en copiant la nouvelle version du code. Nous pourrions le faire en supprimant l'ancien répertoire de la plateforme et en repartant de zéro. Cependant, Briefcase offre un moyen plus simple - vous pouvez mettre à jour le code de votre application groupée existante :
(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.
(beeware-venv) $ briefcase update
[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...
Removing unneeded app bundle content... done
[helloworld] Application updated.
(beeware-venv) C:\...>briefcase update
[helloworld] Updating application code...
Installing src/helloworld... done
[helloworld] Removing unneeded app content...
Removing unneeded app bundle content... done
[helloworld] Application updated.
Si Briefcase ne trouve pas le modèle échafaudé, il invoquera automatiquement
create pour générer un nouvel échafaudage.
Maintenant que nous avons mis à jour le code de l'installateur, nous pouvons
lancer briefcase build pour recompiler l'application, briefcase run pour
exécuter l'application mise à jour, et briefcase package pour reconditionner
l'application en vue de sa distribution.
Note
Utilisateurs de macOS, rappelez-vous que comme indiqué dans Tutoriel
3, pour le tutoriel nous recommandons d'exécuter briefcase
package avec le drapeau --adhoc-sign pour éviter la complexité de la mise en
place d'une identité de signature de code et garder le tutoriel aussi simple que
possible.
Mise à jour et exécution en une seule étape¶
Si vous effectuez rapidement des changements de code, vous voudrez probablement
faire un changement de code, mettre à jour l'application et la réexécuter
immédiatement. Dans la plupart des cas, le mode développeur (briefcase dev)
sera le moyen le plus facile de faire ce genre d'itération rapide ; cependant,
si vous testez quelque chose sur la façon dont votre application fonctionne en
tant que binaire natif, ou si vous chassez un bogue qui ne se manifeste que
lorsque votre application est sous forme de paquetage, vous pouvez avoir besoin
d'utiliser des appels répétés à briefcase run. Pour simplifier le processus de
mise à jour et d'exécution de l'application packagée, Briefcase dispose d'un
raccourci pour supporter ce schéma d'utilisation - l'option -u (ou --update)
de la commande run.
Essayons d'apporter une autre modification. Vous avez peut-être remarqué que si
vous ne tapez pas de nom dans la zone de saisie, la boîte de dialogue dira
"Hello, ". Modifions à nouveau la fonction say_hello pour gérer ce cas
particulier.
En haut du fichier, entre les imports et la définition de class HelloWorld,
ajoutez une méthode utilitaire pour générer un message d'accueil approprié en
fonction de la valeur du nom qui a été fourni :
def greeting(name):
if name:
return f"Hello, {name}"
else:
return "Hello, stranger"
Ensuite, modifiez le callback say_hello pour utiliser cette nouvelle méthode
utilitaire :
async def say_hello(self, widget):
await self.main_window.dialog(
toga.InfoDialog(
greeting(self.name_input.value),
"Hi there!",
)
)
Exécutez votre application en mode développement (avec briefcase dev) pour
confirmer que la nouvelle logique fonctionne ; puis mettez à jour, compilez et
exécutez l'application avec une seule commande :
(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...
(beeware-venv) $ 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...
Removing unneeded app bundle content... done
[helloworld] Application updated.
[helloworld] Building application...
...
[helloworld] Built build/helloworld/linux/ubuntu/jammy/helloworld-0.0.1/usr/bin/helloworld
[helloworld] Starting app...
(beeware-venv) C:\...>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] Starting app...
La commande package accepte aussi l'argument -u, donc si vous faites un
changement dans le code de votre application et que vous voulez repackager
immédiatement, vous pouvez lancer briefcase package -u.
Étapes suivantes¶
Notre application est désormais prête à être distribuée sur les plates-formes de bureau et nous avons pu mettre à jour le code de notre application.
Mais qu'en est-il du mobile ? Dans le Tutoriel 5, nous allons convertir notre application en une application mobile et la déployer sur un simulateur d'appareil et sur un téléphone.