# Apps veröffentlichen (iOS und Android)

Die Pipeline baut und signiert deine App, verteilt sie an TestFlight und den Internal Track und wartet dann auf deine Freigabe in den Store.

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

Die Plattform baut und signiert Release-Builds für iOS und Android, lädt sie zu Apple und Google hoch und pflegt die Store-Texte mit. Das iOS-Code-Signing verwaltet sie über ein verschlüsseltes Repository deiner Organisation.

## Was du einmalig bereitstellst

Für Apple brauchst du eine Mitgliedschaft im [Apple Developer Program]({{< relref "app-store-developer-account" >}}) und einen [API-Schlüssel aus App Store Connect]({{< relref "app-store-credentials" >}}), für Google ein Konto in der [Google Play Console]({{< relref "google-play-developer-account" >}}) und einen [Service Account mit JSON-Schlüssel]({{< relref "play-store-credentials" >}}). Beide hinterlegst du unter **Store-Accounts**.

In der App wählst du den Store-Account und die Kennung, die du in den Konsolen von Apple und Google angelegt hast: den [Bundle Identifier]({{< relref "app-store-bundle-identifiers" >}}) bzw. den [Paketnamen]({{< relref "play-store-package-names" >}}).

Für eine bereits im Play Store veröffentlichte Android-App importierst du einmalig den ursprünglichen [Upload-Key]({{< relref "android-keystore-import" >}}).

Texte und Screenshots liegen als [Store-Metadaten]({{< relref "store-metadata" >}}) im App-Repository.

## Was bei jedem Merge auf `main` passiert

Mit verknüpftem Store-Account baut die Pipeline nach jedem Push auf `main` Release-Builds und vergibt die neue Versionsnummer. `publish-ios` lädt den iOS-Build zu TestFlight hoch und aktualisiert die Store-Metadaten in App Store Connect, ohne die App zur Prüfung einzureichen. `publish-android` veröffentlicht den Android-Build im Internal Track der Play Console. Zusätzlich verteilt die Pipeline beide Builds über Firebase App Distribution an Tester. Den allgemeinen Ablauf beschreibt [Git-Workflow und Deployment]({{< relref "git-workflow" >}}).

{{< docnote >}}
Ohne verknüpften Store-Account baut die Pipeline Debug-Builds und verteilt sie nur über Firebase App Distribution.
{{< /docnote >}}

## Freigabe in den Store

Für den Store startest du in GitLab unter **CI/CD → Pipelines** einen manuellen Job: `release-ios` reicht die App bei Apple zur Prüfung ein und veröffentlicht sie danach automatisch, `release-android` befördert den Build in den Production Track. Wie du manuelle Jobs startest, steht unter [Was sind Pipelines?]({{< relref "what-are-pipelines" >}}).

Was Apple und Google bei der Prüfung erwarten, steht unter [Hinweise zur App-Store-Prüfung]({{< relref "app-store-review" >}}).

