Tutorial 3 - Verpackung für den Vertrieb

Bislang haben wir unsere Anwendung im „Entwicklermodus“ ausgeführt. Das macht es uns leicht, unsere Anwendung lokal auszuführen - aber was wir wirklich wollen, ist, dass wir unsere Anwendung an andere weitergeben können.

Wir möchten unseren Benutzern jedoch nicht beibringen müssen, wie man Python installiert, eine virtuelle Umgebung erstellt, ein Git-Repository klont und Briefcase im Entwicklermodus startet. Wir würden ihnen lieber einfach ein Installationsprogramm geben und die Anwendung einfach funktionieren lassen.

Briefcase kann verwendet werden, um Ihre Anwendung für die Verteilung auf diese Weise zu verpacken.

Erstellen Ihres Anwendungsgerüsts

Da dies das erste Mal ist, dass wir unsere Anwendung paketieren, müssen wir einige Konfigurationsdateien und andere Gerüste erstellen, um den Paketierungsprozess zu unterstützen. Starten Sie im Verzeichnis helloworld:

(beeware-venv) $ briefcase create

[helloworld] Generating application template...
Using app template: https://github.com/beeware/briefcase-macOS-app-template.git, branch v0.3.18
...

[helloworld] Installing support package...
...

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

[helloworld] Installing requirements...
...

[helloworld] Installing application resources...
...

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

[helloworld] Created build/helloworld/macos/app

Wahrscheinlich haben Sie gerade gesehen, wie seitenweise Inhalte an Ihrem Terminal vorbeigezogen sind… was ist also passiert? Briefcase hat das Folgende getan:

  1. Es generiert eine Anwendungsvorlage. Um ein natives Installationsprogramm zu erstellen, sind eine Menge Dateien und Konfigurationen erforderlich, die über den Code der eigentlichen Anwendung hinausgehen. Dieses zusätzliche Gerüst ist für jede Anwendung auf der gleichen Plattform fast gleich, mit Ausnahme des Namens der eigentlichen Anwendung, die erstellt wird - daher bietet Briefcase eine Anwendungsvorlage für jede unterstützte Plattform. In diesem Schritt wird die Vorlage ausgerollt, wobei der Name Ihrer Anwendung, die Bundle-ID und andere Eigenschaften Ihrer Konfigurationsdatei entsprechend der Plattform, auf der Sie bauen, ersetzt werden.

    Wenn Sie mit der von Briefcase bereitgestellten Vorlage nicht zufrieden sind, können Sie Ihre eigene Vorlage erstellen. Sie sollten dies jedoch erst dann tun, wenn Sie etwas mehr Erfahrung mit der Standardvorlage von Briefcase haben.

  2. Es lud ein Support-Paket herunter und installierte es. Der Paketierungsansatz von Briefcase lässt sich am besten als „das Einfachste, was möglich ist“ beschreiben - es liefert einen vollständigen, isolierten Python-Interpreter als Teil jeder Anwendung, die es erstellt. Dies ist etwas ineffizient - wenn Sie 5 Anwendungen mit Briefcase verpackt haben, haben Sie 5 Kopien des Python-Interpreters. Allerdings garantiert dieser Ansatz, dass jede Anwendung völlig unabhängig ist und eine bestimmte Python-Version verwendet, von der bekannt ist, dass sie mit der Anwendung funktioniert.

    Auch hier bietet Briefcase ein Standard-Unterstützungspaket für jede Plattform; wenn Sie möchten, können Sie Ihr eigenes Unterstützungspaket bereitstellen und dieses Paket als Teil des Erstellungsprozesses einbinden lassen. Dies kann sinnvoll sein, wenn Sie bestimmte Optionen im Python-Interpreter aktiviert haben wollen oder wenn Sie Module aus der Standardbibliothek entfernen wollen, die Sie zur Laufzeit nicht benötigen.

    Briefcase verwaltet einen lokalen Zwischenspeicher für Support-Pakete. Wenn Sie also ein bestimmtes Support-Paket heruntergeladen haben, wird diese zwischengespeicherte Kopie bei zukünftigen Builds verwendet.

    As noted above, when Briefcase packages an app as a native Linux system package (the default package format for Linux), a support package is not included with the app. Instead, the app will use the Python that is provided by the distribution of Linux being targeted.

  3. Es installiert Anwendungsanforderungen. Ihre Anwendung kann alle Module von Drittanbietern angeben, die zur Laufzeit benötigt werden. Diese werden mittels pip in das Installationsprogramm Ihrer Anwendung installiert.

  4. Es Installiert Ihren Anwendungscode. Ihre Anwendung hat ihren eigenen Code und Ressourcen (z. B. Bilder, die zur Laufzeit benötigt werden); diese Dateien werden in das Installationsprogramm kopiert.

  5. Er installiert die von Ihrer Anwendung benötigten Ressourcen. Schließlich fügt er alle zusätzlichen Ressourcen hinzu, die das Installationsprogramm selbst benötigt. Dazu gehören Dinge wie Symbole, die an die endgültige Anwendung angehängt werden müssen, und Splash-Screen-Bilder.

Sobald dies abgeschlossen ist, sollten Sie im Projektverzeichnis ein Verzeichnis sehen, das Ihrer Plattform entspricht (macOS, linux oder windows) und zusätzliche Dateien enthält. Dies ist die plattformspezifische Paketierungskonfiguration für Ihre Anwendung.

Erstellung Ihrer Anwendung

Sie können nun Ihre Anwendung kompilieren. In diesem Schritt wird die Binärkompilierung durchgeführt, die erforderlich ist, damit Ihre Anwendung auf Ihrer Zielplattform ausgeführt werden kann.

(beeware-venv) $ briefcase build

[helloworld] Adhoc signing app...
...
Signing build/helloworld/macos/app/Hello World.app
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100.0% • 00:07

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

Unter macOS muss der Befehl build nichts kompilieren, aber er muss den Inhalt der Binärdatei signieren, damit sie ausgeführt werden kann. Diese Signatur ist eine ad hoc Signatur - sie funktioniert nur auf Ihrem Rechner; wenn Sie die Anwendung an andere weitergeben wollen, müssen Sie eine vollständige Signatur bereitstellen.

Ausführen Ihrer Anwendung

Sie können nun Briefcase verwenden, um Ihre Anwendung auszuführen:

(beeware-venv) $ briefcase run

[helloworld] Starting app...
===========================================================================
Configuring isolated Python...
Pre-initializing Python runtime...
PythonHome: /Users/brutus/beeware-tutorial/helloworld/macOS/app/Hello World/Hello World.app/Contents/Resources/support/python-stdlib
PYTHONPATH:
- /Users/brutus/beeware-tutorial/helloworld/macOS/app/Hello World/Hello World.app/Contents/Resources/support/python311.zip
- /Users/brutus/beeware-tutorial/helloworld/macOS/app/Hello World/Hello World.app/Contents/Resources/support/python-stdlib
- /Users/brutus/beeware-tutorial/helloworld/macOS/app/Hello World/Hello World.app/Contents/Resources/support/python-stdlib/lib-dynload
- /Users/brutus/beeware-tutorial/helloworld/macOS/app/Hello World/Hello World.app/Contents/Resources/app_packages
- /Users/brutus/beeware-tutorial/helloworld/macOS/app/Hello World/Hello World.app/Contents/Resources/app
Configure argc/argv...
Initializing Python runtime...
Installing Python NSLog handler...
Running app module: helloworld
---------------------------------------------------------------------------

Dies startet Ihre native Anwendung unter Verwendung der Ausgabe des build Befehls.

Möglicherweise bemerken Sie einige kleine Unterschiede im Aussehen Ihrer Anwendung, wenn sie ausgeführt wird. Beispielsweise können die vom Betriebssystem angezeigten Symbole und der Name etwas anders aussehen als bei der Ausführung im Entwicklermodus. Das liegt auch daran, dass Sie die gepackte Anwendung verwenden und nicht nur den Python-Code ausführen. Aus der Sicht des Betriebssystems führen Sie nun „eine Anwendung“ und nicht „ein Python-Programm“ aus, was sich in der Darstellung der Anwendung widerspiegelt.

Erstellung Ihres Installationsprogramms

Sie können nun Ihre Anwendung mit dem Befehl package zur Verteilung verpacken. Der Befehl package führt alle Kompilierungen durch, die notwendig sind, um das gerüstete Projekt in ein endgültiges, verteilbares Produkt zu verwandeln. Abhängig von der Plattform kann dies die Kompilierung eines Installationsprogramms, die Durchführung einer Codesignierung oder andere Aufgaben vor der Verteilung beinhalten.

(beeware-venv) $ briefcase package --adhoc-sign

[helloworld] Signing app...

*************************************************************************
** WARNING: Signing with an ad-hoc identity                            **
*************************************************************************

    This app is being signed with an ad-hoc identity. The resulting
    app will run on this computer, but will not run on anyone else's
    computer.

    To generate an app that can be distributed to others, you must
    obtain an application distribution certificate from Apple, and
    select the developer identity associated with that certificate
    when running 'briefcase package'.

*************************************************************************

Signing app with ad-hoc identity...
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100.0% • 00:07

[helloworld] Building DMG...
Building dist/Hello World-0.0.1.dmg

[helloworld] Packaged dist/Hello World-0.0.1.dmg

Der Ordner dist enthält eine Datei namens Hello World-0.0.1.dmg. Wenn Sie diese Datei im Finder finden und auf das Symbol doppelklicken, wird die DMG-Datei gemountet und Sie erhalten eine Kopie der Hello World-Anwendung und einen Link zu Ihrem Programme-Ordner für eine einfache Installation. Ziehen Sie die Anwendungsdatei in den Ordner Programme, und schon ist Ihre Anwendung installiert. Schicken Sie die DMG-Datei an einen Freund oder eine Freundin, der/die das Gleiche tun kann.

In diesem Beispiel haben wir die Option --adhoc-sign verwendet, d.h. wir signieren unsere Anwendung mit ad hoc Anmeldeinformationen - temporären Anmeldeinformationen, die nur auf Ihrem Rechner funktionieren. Wir haben dies getan, um das Tutorial einfach zu halten. Das Einrichten von Code-Signatur-Identitäten ist ein wenig fummelig, und sie sind nur erforderlich, wenn Sie Ihre Anwendung an andere weitergeben wollen. Würden wir eine echte Anwendung veröffentlichen, die andere nutzen können, müssten wir echte Anmeldeinformationen angeben.

Wenn Sie bereit sind, eine echte Anwendung zu veröffentlichen, sehen Sie sich die Briefcase-Anleitung zum Thema „Einrichten einer macOS Code Signing Identity <https://briefcase.readthedocs.io/en/latest/how-to/code-signing/macOS.html>“ an

Nächste Schritte

Wir haben unsere Anwendung nun für die Verteilung auf Desktop-Plattformen verpackt. Aber was passiert, wenn wir den Code in unserer Anwendung aktualisieren müssen? Wie bekommen wir diese Aktualisierungen in unsere paketierte Anwendung? Schauen Sie sich Tutorial 4 an, um das herauszufinden…