# Desktop-Anwendungen veröffentlichen

Die Pipeline baut Installer für macOS, Windows und Linux, signiert sie auf Wunsch und lädt macOS-Apps bei Bedarf in den Mac App Store.

> Source: https://www.application-platform.com/de/docs/publish-desktop-apps/

Die Pipeline baut installierbare Pakete und lädt sie in den Download-Speicher der Plattform hoch; von dort verteilst du sie selbst. Store-Anbindungen gibt es für den Mac App Store und den Microsoft Store, nicht für den Snap Store.

| Plattform | Paket | Pipeline-Jobs |
|---|---|---|
| macOS (Direktvertrieb) | `.dmg` | `build-flutter-macos-*` → `publish-macos-*` |
| macOS (Mac App Store) | `.pkg` | `build-flutter-macos-appstore` → `publish-macos-store` → `release-macos-store` |
| Windows | Installer (`.exe`) | `build-flutter-windows` → `publish-windows` |
| Linux | `.deb` und `.rpm` | `build-flutter-linux` → `publish-linux` |

Die manuellen `release-macos-*`-Jobs sind der Freigabeschritt für macOS; den allgemeinen Ablauf beschreibt [Git-Workflow und Deployment]({{< relref "git-workflow" >}}).

## macOS: Signierung, Notarisierung und Mac App Store

Im Projekt gibt es für macOS vier Einstellungen. **App Store Account (macOS)** legt den App-Store-Connect-Zugang fest. **Developer ID signieren & notarizen** erzeugt signierte, notarisierte DMGs für den Vertrieb außerhalb des Stores. **Im Mac App Store veröffentlichen** baut mit Mac-App-Store-Zertifikaten ein `.pkg` und lädt es zu App Store Connect hoch. **Öffentlicher S3-Download** veröffentlicht die signierten DMGs und setzt die Developer-ID-Signierung voraus.

Für den Mac App Store muss die App in App Store Connect mit der Plattform macOS angelegt sein; Zertifikate und Profile legt die Pipeline über Fastlane Match an.

{{< docnote >}}
Ohne App-Store-Connect-Zugang oder Developer-ID-Option entstehen unsignierte DMGs, die Nutzer über **Trotzdem öffnen** freigeben müssen.
{{< /docnote >}}

## Windows: Signierung und Microsoft Store

Windows-Installer signiert die Pipeline über [Azure Artifact Signing]({{< relref "azure-artifact-signing-setup" >}}) mit den Werten aus [Azure Artifact Signing: Zugangsdaten]({{< relref "azure-artifact-signing-credentials" >}}). Für den Microsoft Store brauchst du ein Konto im Partner Center ([Microsoft Store: Developer-Account]({{< relref "microsoft-store-developer-account" >}})) und [Microsoft Store: Zugangsdaten]({{< relref "microsoft-store-credentials" >}}), die du dem Windows-Projekt zuordnest. Erste Einreichung und Altersfreigabe machst du einmalig im Partner Center; der Store nimmt nur signierte Builds an.

