# Publish desktop applications

The pipeline builds installers for macOS, Windows, and Linux, signs them if you want, and uploads macOS apps to the Mac App Store when needed.

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

The pipeline builds installable packages and uploads them to the platform's download storage; from there you distribute them yourself. Store connections exist for the Mac App Store and the Microsoft Store, not for the Snap Store.

| Platform | Package | Pipeline jobs |
|---|---|---|
| macOS (direct distribution) | `.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` and `.rpm` | `build-flutter-linux` → `publish-linux` |

The manual `release-macos-*` jobs are the approval step for macOS; the general flow is described under [Git workflow and deployment]({{< relref "git-workflow" >}}).

## macOS: signing, notarization, and Mac App Store

The project has four settings for macOS. **App Store Account (macOS)** sets the App Store Connect credentials. **Sign & notarize with Developer ID** produces signed, notarized DMGs for distribution outside the store. **Publish to the Mac App Store** builds a `.pkg` with Mac App Store certificates and uploads it to App Store Connect. **Public S3 download** publishes the signed DMGs and requires Developer ID signing.

For the Mac App Store, the app must exist in App Store Connect with the macOS platform; the pipeline creates certificates and profiles through Fastlane Match.

{{< docnote >}}
Without App Store Connect credentials or the Developer ID option, the pipeline produces unsigned DMGs, which users have to allow via **Open Anyway**.
{{< /docnote >}}

## Windows: signing and Microsoft Store

The pipeline signs Windows installers through [Azure Artifact Signing]({{< relref "azure-artifact-signing-setup" >}}) with the values from [Azure Artifact Signing credentials]({{< relref "azure-artifact-signing-credentials" >}}). For the Microsoft Store you need a Partner Center account ([Microsoft Store developer account]({{< relref "microsoft-store-developer-account" >}})) and [Microsoft Store credentials]({{< relref "microsoft-store-credentials" >}}), which you assign to the Windows project. The first submission and the age rating are done once in Partner Center; the store only accepts signed builds.

