Tutorial 4 - Aktualisieren Ihrer Anwendung¶
Im letzten Tutorial haben wir unsere Anwendung als native Anwendung gepackt. Wenn Sie mit einer realen Anwendung arbeiten, ist das noch nicht das Ende der Geschichte – Sie werden wahrscheinlich einige Tests durchführen, Probleme entdecken und Änderungen vornehmen müssen. Selbst wenn Ihre Anwendung perfekt ist, werden Sie irgendwann eine verbesserte Version 2 Ihrer Anwendung veröffentlichen wollen.
Also – wie aktualisieren Sie Ihre installierte App, wenn Sie Änderungen am Code vornehmen?
Aktualisierung des Anwendungscodes¶
Unsere Anwendung gibt derzeit eine Meldung auf der Konsole aus, wenn Sie die Schaltfläche drücken. GUI-Anwendungen sollten jedoch nicht wirklich die Konsole für die Ausgabe verwenden. Sie müssen Dialoge verwenden, um mit Benutzern zu kommunizieren.
Fügen wir ein Dialogfeld hinzu, um Hallo zu sagen, anstatt in die Konsole zu
schreiben. Ändern Sie den say_hello Callback so, dass er wie folgt aussieht:
async def say_hello(self, widget):
await self.main_window.dialog(
toga.InfoDialog(
f"Hello, {self.name_input.value}",
"Hi there!",
)
)
Wir müssen die Methode async so gestalten, dass der Rest der Anwendung
weiterläuft, wenn wir den Dialog anzeigen. Kümmern Sie sich jetzt nicht zu sehr
um dieses Detail - wir werden in Tutorial 8 eine ausführlichere
Erklärung geben.
Dadurch wird Toga angewiesen, ein modales Dialogfeld zu öffnen, wenn die Schaltfläche gedrückt wird.
Wenn Sie briefcase dev ausführen, einen Namen eingeben und auf die
Schaltfläche klicken, wird das neue Dialogfeld angezeigt:



Wenn Sie jedoch briefcase run ausführen, wird das Dialogfeld nicht angezeigt.
Warum ist das so? Nun, briefcase dev führt Ihren Code an Ort und Stelle aus -
es versucht, eine möglichst realistische Laufzeitumgebung für Ihren Code zu
erzeugen, aber es stellt keine Plattforminfrastruktur für die Verpackung Ihres
Codes als Anwendung zur Verfügung oder nutzt diese. Ein Teil des Prozesses der
Paketierung Ihrer Anwendung beinhaltet das Kopieren Ihres Codes in das
Anwendungsbündel - und im Moment hat Ihre Anwendung noch den alten Code in sich.
Wir müssen also briefcase anweisen, Ihre Anwendung zu aktualisieren, indem wir die neue Version des Codes hineinkopieren. Wir könnten dies tun, indem wir das alte Plattformverzeichnis löschen und von vorne beginnen. Briefcase bietet jedoch einen einfacheren Weg - Sie können den Code für Ihre bestehende gebündelte Anwendung aktualisieren:
(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.
Wenn Briefcase die gerüstete Vorlage nicht finden kann, ruft es automatisch
create auf, um ein neues Gerüst zu erzeugen.
Nun, da wir den Installationscode aktualisiert haben, können wir briefcase
build ausführen, um die Anwendung neu zu kompilieren, briefcase run, um die
aktualisierte Anwendung zu starten, und briefcase package, um die Anwendung
für die Verteilung neu zu verpacken.
Hinweis
(macOS-Benutzer sollten bedenken, dass wir, wie in Tutorial 3
erwähnt, für das Tutorial empfehlen, briefcase package mit dem
--adhoc-sign-Flag auszuführen, um die Komplexität der Einrichtung einer
Code-Signatur-Identität zu vermeiden und das Tutorial so einfach wie möglich zu
halten)
Aktualisierung und Ausführung in einem Schritt¶
Wenn Sie Code-Änderungen schnell iterieren, werden Sie wahrscheinlich eine
Code-Änderung vornehmen, die Anwendung aktualisieren und sie sofort wieder
ausführen wollen. Für die meisten Zwecke ist der Entwicklermodus (briefcase
dev) der einfachste Weg, diese Art der schnellen Iteration durchzuführen. Wenn
Sie jedoch etwas darüber testen, wie Ihre Anwendung als native Binärdatei läuft,
oder einen Fehler suchen, der nur auftritt, wenn Ihre Anwendung in gepackter
Form vorliegt, müssen Sie möglicherweise wiederholte Aufrufe von briefcase run
verwenden. Um den Prozess des Aktualisierens und Ausführens der gebündelten
Anwendung zu vereinfachen, hat Briefcase eine Abkürzung, die dieses
Verwendungsmuster unterstützt - die -u (oder --update) Option auf dem run
Befehl.
Versuchen wir, eine weitere Änderung vorzunehmen. Sie haben vielleicht bemerkt, dass das Dialogfeld "Hallo" sagt, wenn Sie keinen Namen in das Texteingabefeld eingeben. Ändern wir die Funktion "say_hello" erneut, um diesen Sonderfall zu behandeln.
Am Anfang der Datei, zwischen den Importen und der class
HelloWorld-Definition, fügen Sie eine Utility-Methode hinzu, um eine
entsprechende Begrüßung in Abhängigkeit vom Wert des angegebenen Namens zu
erzeugen:
def greeting(name):
if name:
return f"Hello, {name}"
else:
return "Hello, stranger"
Ändern Sie dann den "say_hello"-Callback, um diese neue Dienstprogramm-Methode zu verwenden:
async def say_hello(self, widget):
await self.main_window.dialog(
toga.InfoDialog(
greeting(self.name_input.value),
"Hi there!",
)
)
Führen Sie Ihre Anwendung im Entwicklungsmodus aus (mit briefcase dev), um zu
bestätigen, dass die neue Logik funktioniert; dann aktualisieren, bauen und
starten Sie die Anwendung mit einem Befehl:
(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...
Der Befehl package akzeptiert auch das Argument -u. Wenn Sie also eine
Änderung an Ihrem Anwendungscode vornehmen und sofort neu packen wollen, können
Sie briefcase package -u ausführen.
Nächste Schritte¶
Wir haben unsere Anwendung jetzt für die Verteilung auf Desktop-Plattformen verpackt und konnten den Code in unserer Anwendung aktualisieren.
Aber was ist mit mobilen Geräten? In Tutorial 5 werden wir unsere Anwendung in eine mobile Anwendung umwandeln und sie auf einem Gerätesimulator und auf einem Telefon einsetzen.