Tutorial 4 - Aktualisieren Ihrer Anwendung#

Im letzten Lehrgang haben wir unsere Anwendung als native Anwendung verpackt. Wenn Sie es mit einer realen Anwendung zu tun haben, wird das nicht das Ende der Geschichte sein - Sie werden wahrscheinlich einige Tests durchführen, Probleme entdecken und einige Änderungen vornehmen müssen. Selbst wenn Ihre Anwendung perfekt ist, werden Sie irgendwann die Version 2 Ihrer Anwendung mit Verbesserungen veröffentlichen wollen.

Wie aktualisieren Sie also Ihre installierte Anwendung, wenn Sie Codeänderungen vornehmen?

Aktualisierung des Anwendungscodes#

Unsere Anwendung gibt derzeit auf der Konsole aus, wenn Sie die Schaltfläche drücken. Allerdings sollten GUI-Anwendungen die Konsole nicht wirklich für die Ausgabe verwenden. Sie müssen Dialoge verwenden, um mit den 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:

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

Damit 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 die Taste drücken, sehen Sie das neue Dialogfenster:

Hallo Welt Tutorial 4 Dialog, auf macOS

Wenn Sie jedoch briefcase run ausführen, wird das Dialogfeld nicht angezeigt.

Warum ist das so? Nun, briefcase dev arbeitet damit, dass es Ihren Code an Ort und Stelle ausführt - es versucht, eine möglichst realistische Laufzeitumgebung für Ihren Code zu erzeugen, aber es stellt keine der Plattforminfrastrukturen zur Verfügung, um Ihren Code als Anwendung zu verpacken. 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.

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.

(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:

def say_hello(self, widget):
    self.main_window.info_dialog(
        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...

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 in einem Gerätesimulator und auf einem Telefon einsetzen.