İçeriğe geç / Skip to content / Zum Inhalt
Ahmet Balaman LogoAhmet Balaman

App im App Store veröffentlichen: Anleitung in 7 Schritten

Ahmet Balaman

8 Min. Lesezeit

SwiftApp StoreiOSXcodeTestFlightApp Store Connect
App im App Store veröffentlichen: Anleitung in 7 Schritten

Eine App im App Store zu veröffentlichen ist eine andere Aufgabe als das Programmieren: Account, Signierung, Store-Eintrag, Grafiken, Datenschutzangaben, Testverteilung und Prüfung. Keiner der Schritte ist schwierig, aber wer ihre Reihenfolge und ihre Abhängigkeiten nicht kennt, verliert Tage. Diese Anleitung geht den Weg der Reihe nach durch, von „meine App läuft in Xcode“ bis „meine App ist im Store verfügbar“.

Gebühren, Prüfzeiten und geforderte Screenshot-Größen ändern sich im Laufe der Zeit. Deshalb nenne ich hier keine Zahlen; prüfen Sie die aktuellen Werte immer auf den Seiten von Apple und in den Feldern, die App Store Connect Ihnen in dem Moment anzeigt.

1. Mitgliedschaft im Apple Developer Program

Um Ihre App im Simulator und auf dem eigenen Gerät auszuführen, reicht ein kostenloser Apple-Account. Für die Veröffentlichung im Store und für TestFlight brauchen Sie die kostenpflichtige, jährliche Mitgliedschaft im Apple Developer Program. Die Anmeldung läuft über die Apple-Developer-App oder die Website und umfasst eine Identitätsprüfung.

Es gibt zwei Arten der Mitgliedschaft: als Einzelperson und als Organisation. Bei der Einzelmitgliedschaft erscheint Ihr eigener Name als Anbieter im Store. Bei der Organisationsmitgliedschaft erscheint der Firmenname, dafür müssen Sie Ihre Rechtsform nachweisen und eine D-U-N-S-Nummer beschaffen, was den Vorgang verlängert. Die Freigabe kommt nicht unbedingt sofort, beantragen Sie sie also, bevor die App fertig ist.

2. Bundle-ID und Signierung

Jede App hat einen eindeutigen Bundle Identifier in umgekehrter Domain-Schreibweise, zum Beispiel com.firmenname.appname. Nach dem Hochladen des ersten Builds lässt er sich nicht mehr ändern, wählen Sie ihn also von Anfang an sorgfältig.

Zertifikate, App-IDs und Provisioning-Profile waren früher der zeitraubendste Teil. Heute läuft es für einzelne Entwicklerinnen und Entwickler darauf hinaus: Target in Xcode auswählen, Signing & Capabilities öffnen, „Automatically manage signing“ aktivieren und das Team wählen. Xcode registriert die App-ID, erstellt das Zertifikat und verwaltet die Profile selbst. Manuelle Signierung wird erst mit einem CI-Server oder in größeren Teams relevant.

Achten Sie auf demselben Bildschirm auf die Versionsnummern. Version ist das, was Nutzer sehen (1.0.0), Build ist eine interne Nummer, die mit jedem Upload steigen muss. Einen zweiten Build mit derselben Build-Nummer können Sie für dieselbe Version nicht hochladen.

3. Der Eintrag in App Store Connect

Legen Sie in App Store Connect im Bereich Apps eine neue App an. Abgefragt werden Plattform, App-Name, Hauptsprache, Bundle-ID und SKU. Der App-Name muss im gesamten Store eindeutig sein; ist der Wunschname vergeben, lässt sich der Eintrag nicht anlegen. Es lohnt sich daher, den Namen früh zu reservieren. Die SKU ist ein interner Code, den nur Sie sehen.

Planen Sie eine kostenpflichtige App oder In-App-Käufe, müssen Sie im Bereich Business die Vereinbarung für kostenpflichtige Apps annehmen sowie Bank- und Steuerdaten hinterlegen. Für eine kostenlose App ist dieser Schritt nicht erforderlich.

Für den Vertrieb in der Europäischen Union kommt ein Punkt hinzu, der gerade im deutschsprachigen Raum wichtig ist: Nach dem Digital Services Act (DSA) müssen Sie in App Store Connect angeben, ob Sie als gewerblicher Händler („Trader“) auftreten. Händler müssen Kontaktangaben wie Anschrift, Telefonnummer und E-Mail-Adresse hinterlegen und verifizieren; diese Angaben werden auf der Produktseite im Store angezeigt. Ohne diese Erklärung ist eine App in der EU nicht vertreibbar. Klären Sie deshalb früh, welche Adresse Sie öffentlich nennen möchten, und lassen Sie sich bei Unsicherheit zur Einstufung rechtlich beraten.

4. Was die Store-Seite braucht

Diese Felder füllen Sie auf der Versionsseite aus:

  • Screenshots. App Store Connect gibt an, welche Gerätegrößen erforderlich sind, und das ändert sich mit der Zeit. Läuft die App auch auf dem iPad, werden zusätzlich iPad-Screenshots verlangt. Screenshots müssen die echten Bildschirme der App zeigen.
  • Beschreibung, Schlüsselwörter, Untertitel, Kategorie.
  • Support-URL. Pflicht. Die Seite muss sich öffnen lassen und einen echten Kontaktweg bieten.
  • URL der Datenschutzerklärung. Pflicht. Sie sollte unter einer öffentlichen, dauerhaften Adresse liegen.
  • Angaben zum App-Datenschutz. Der Abschnitt, der im Store als Datenschutz-Etikett erscheint. Sie erklären, welche Datentypen Sie erheben, ob sie mit der Identität des Nutzers verknüpft sind und ob sie zum Tracking dienen. Auch Daten, die eingebundene Drittanbieter-SDKs erheben (Analyse, Werbung, Absturzberichte), liegen in Ihrer Verantwortung.
  • Altersfreigabe. Sie beantworten einen Fragebogen, das Ergebnis wird automatisch berechnet. Nutzergenerierte Inhalte und soziale Funktionen erhöhen die Einstufung.
  • Angabe zur Verschlüsselung. Damit die Frage nicht bei jedem Upload erscheint, können Sie den Schlüssel ITSAppUsesNonExemptEncryption mit dem für Ihre App passenden Wert in die Info.plist aufnehmen.

Wie viel Zeit diese Punkte bei meiner eigenen App gekostet haben, beschreibe ich im Beitrag über die Veröffentlichung von LevelUpStudy im App Store. Die Kurzfassung: Schreiben Sie diese Anforderungen an den Anfang der Entwicklung, nicht ans Ende.

5. Archivieren und Hochladen

Wählen Sie in Xcode als Ziel Any iOS Device statt eines Simulators und dann Product > Archive. Ist das Archiv fertig, öffnet sich der Organizer. Folgen Sie Distribute App > App Store Connect > Upload. Xcode signiert den Build und lädt ihn hoch.

Der Build erscheint nicht sofort nach dem Upload; er wird bei Apple verarbeitet, und Sie erhalten eine E-Mail, sobald das abgeschlossen ist. Fehlt in dieser Phase ein Purpose String oder ist ein Icon ungültig, bekommen Sie eine E-Mail mit der Beschreibung des Problems, und der Build taucht unter Umständen gar nicht in der Liste auf.

6. TestFlight

Nach der Verarbeitung erscheint der Build im Reiter TestFlight. Es gibt zwei Arten von Testern:

  • Interne Tester: Personen aus Ihrem App-Store-Connect-Team. Sie erhalten den Build, ohne auf eine Prüfung zu warten.
  • Externe Tester: Einladung per E-Mail oder über einen öffentlichen Link. Der erste Build durchläuft eine kurze Beta-Prüfung.

TestFlight-Builds laufen nach einer begrenzten Zeit ab. Der eigentliche Wert liegt darin, dass Sie die App auf echten Geräten mit Store-Signierung ausprobieren. Mitteilungen, Kaufabläufe und Deep Links können sich im Simulator anders verhalten.

7. Zur Prüfung einreichen

Wählen Sie auf der Versionsseite den Build aus und füllen Sie App Review Information aus: Kontaktdaten, Hinweise und, falls die App eine Anmeldung verlangt, ein funktionierendes Demo-Konto. Kann sich die prüfende Person nicht anmelden, sieht sie den Rest der App nicht, und die Einreichung wird abgelehnt.

Hier legen Sie auch die Art der Freigabe fest: automatisch nach der Genehmigung, manuell durch Sie oder zu einem bestimmten Datum. Bei einer ersten Version erlaubt Ihnen die manuelle Freigabe, die Ankündigung selbst zu terminieren.

Häufige Fehler: die verbreitetsten Ablehnungsgründe

Die vollständigen Regeln stehen in den App Review Guidelines. In der Praxis begegnen einem diese Fälle am häufigsten.

Konten lassen sich anlegen, aber nicht löschen

Symptom: In der Ablehnung steht, dass keine Möglichkeit zur Kontolöschung gefunden wurde. Jede App, in der man ein Konto anlegen kann, muss die Löschung in der App anstoßen lassen; „Schreiben Sie uns eine E-Mail“ genügt nicht. Lösung: Platzieren Sie eine sichtbare Löschoption in den Einstellungen und löschen Sie die Daten auf dem Server tatsächlich.

import SwiftUI

struct DeleteAccountButton: View {
    let deleteAccount: () async throws -> Void

    @State private var isConfirming = false
    @State private var errorMessage: String?

    var body: some View {
        Button("Mein Konto löschen", role: .destructive) {
            isConfirming = true
        }
        .confirmationDialog(
            "Ihr Konto und alle Ihre Daten werden dauerhaft gelöscht.",
            isPresented: $isConfirming,
            titleVisibility: .visible
        ) {
            Button("Dauerhaft löschen", role: .destructive) {
                Task {
                    do {
                        try await deleteAccount()
                    } catch {
                        errorMessage = "Das Konto konnte nicht gelöscht werden. Bitte versuchen Sie es erneut."
                    }
                }
            }
        }
        .alert("Fehler", isPresented: .constant(errorMessage != nil)) {
            Button("OK") { errorMessage = nil }
        } message: {
            Text(errorMessage ?? "")
        }
    }
}

Die Serverseite behandelt der Beitrag zu Firebase Auth und Kontolöschung, Task und async der Leitfaden zu async/await.

Fehlende Purpose Strings

Symptom: Die App stürzt in dem Moment ab, in dem Sie auf Kamera, Fotomediathek, Standort oder Mikrofon zugreifen, oder Sie erhalten nach dem Upload einen Hinweis auf einen fehlenden Purpose String. Lösung: Ergänzen Sie in der Info.plist für jede geschützte Ressource eine Beschreibung. Der Text muss sagen, wofür die Daten verwendet werden; ein leerer Satz wie „Kamerazugriff erforderlich“ ist ebenfalls ein Ablehnungsgrund.

<key>NSCameraUsageDescription</key>
<string>Wir verwenden die Kamera, damit Sie ein Profilfoto aufnehmen können.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Wir greifen auf Ihre Fotos zu, damit Sie ein Profilfoto aus der Mediathek wählen können.</string>

Symptom: In der Ablehnung heißt es, die App sei unvollständig. Ursache ist meist eine Support- oder Datenschutzseite, die sich nicht öffnet, „Lorem ipsum“-Text, ein leerer Tab, ein Button mit „demnächst“ oder ein Testserver, der während der Prüfung nicht erreichbar war. Lösung: Öffnen Sie vor dem Einreichen jeden Link auf einem echten Gerät, entfernen Sie unfertige Funktionen aus dem Build und stellen Sie sicher, dass Ihr Backend während der gesamten Prüfung läuft.

Abstürze und widersprüchliche Angaben

Ein einziger Absturz während der Prüfung reicht für eine Ablehnung. Ein erzwungen ausgepacktes Optional gehört zu den häufigsten Absturzursachen, und die Gewohnheiten aus dem Beitrag zu Optionals und guard let zahlen sich hier direkt aus. Die zweite große Gruppe sind Widersprüche: Screenshots, die die App nicht wiedergeben, Datenschutzangaben, die nicht zu dem passen, was die App tatsächlich erhebt, oder ein Social Login eines Drittanbieters ohne die in den Richtlinien verlangte gleichwertige, datenschutzfreundliche Anmeldeoption.

Werden Sie abgelehnt, geraten Sie nicht in Panik. Im Nachrichtenbereich von App Store Connect können Sie dem Prüfteam antworten, um Klärung bitten, das Problem beheben und erneut einreichen.

Nach der Genehmigung

Nach der Genehmigung geht die App je nach gewählter Option von selbst oder auf Ihren Klick hin online; bis sie in allen Ländern sichtbar ist, kann etwas Zeit vergehen. Danach beginnt die Pflege:

  • Beobachten Sie Absturzberichte und Nutzungsdaten im Xcode Organizer und in App Store Connect.
  • Antworten Sie in App Store Connect auf Nutzerbewertungen.
  • Jedes Update bedeutet eine neue Versionsnummer und eine neue Prüfung. Die schrittweise Freigabe von Updates verhindert, dass ein Fehler alle gleichzeitig erreicht.
  • Denken Sie an die Verlängerung Ihrer Mitgliedschaft; läuft sie aus, lassen sich Ihre Apps nicht mehr aus dem Store laden.

Häufig gestellte Fragen

Brauche ich einen Mac, um eine App in den App Store hochzuladen?

Ja. Zum Signieren und Hochladen des Builds brauchen Sie Xcode, und Xcode setzt macOS voraus. Ohne eigenen Mac sind Cloud-Mac-Dienste oder ein CI-Dienst eine Möglichkeit, ein echter Mac erleichtert die Fehlersuche aber erheblich.

Wie lange dauert die Prüfung?

Eine feste Dauer gibt es nicht, und sie schwankt je nach Zeitraum. Planen Sie so, dass die erste Einreichung abgelehnt werden kann und eine zweite Runde nötig wird.

Ist meine App nach einer Ablehnung dauerhaft gesperrt?

Nein. Eine Ablehnung bedeutet, dass diese Einreichung nachgebessert werden muss. Sie beheben das Problem und reichen erneut ein; halten Sie die Entscheidung für falsch, können Sie Einspruch einlegen.

Kann ich als Einzelperson starten und später auf eine Firma wechseln?

Apple erlaubt die Umwandlung einer Einzelmitgliedschaft in eine Organisation und die Übertragung von Apps zwischen Accounts. Die Bedingungen können sich ändern, lesen Sie daher vor dem Start die aktuellen Hinweise.

Kommentare