Flutter-Release-Checkliste für eine reibungslose erste Einreichung
Nutze diese Flutter-Release-Checkliste, um Signatur, Flavors, Crash-Reporting, Berechtigungstexte und Store-Assets vorzubereiten, damit deine erste Einreichung ruhig und vollständig verläuft.

Was „veröffentlichungsbereit" tatsächlich bedeutet
„Veröffentlichungsbereit" heißt nicht nur „die App läuft auf meinem Handy." Es heißt, du kannst einen Produktions-Build erzeugen, ihn auf einem sauberen Gerät installieren und ihn in den Store einreichen, ohne in letzter Minute überrascht zu werden.
Was kurz vor der ersten Einreichung schiefgeht, ist meistens langweilig, aber schmerzhaft: fehlende Signaturschlüssel, versehentlich hochgeladener Debug-Build, Abstürze ohne brauchbare Logs, Berechtigungs-Prompts, die verdächtig wirken, oder Store-Assets, die nicht zur App passen (falsche Icons, alte Screenshots, fehlender Datenschutzhinweis).
Für eine erste Flutter-Einreichung lässt sich „veröffentlichungsbereit" auf vier Ergebnisse reduzieren:
- Du kannst einen wiederholbaren Produktions-Build erstellen und das Artefakt, das du einreichst, sicher identifizieren.
- Deine Signatur-Credentials sind im Besitz, gesichert und nicht auf dem Laptop einer einzigen Person gefangen.
- Wenn die App in der Wildnis abstürzt, siehst du es schnell mit genug Details, um es zu beheben.
- Dein Store-Listing ist vollständig: Texte, Icons, Screenshots und erforderliche Angaben.
Der Fokus liegt auf den Essentials für die erste Einreichung: Signatur, Flavors, Crash-Reporting, Berechtigungs-Text und Timing sowie Store-Assets. Es ist kein vollständiger QA-Plan, kein Performance-Audit und keine rechtliche Prüfung.
Plane mindestens ein paar fokussierte Sessions ein. Ein Solo-Entwickler kann das oft in 1–2 Tagen abdecken. In einem Team vergib klare Zuständigkeiten (Signatur/Builds, Crash-Reporting, Store-Listing und Texte), damit nichts in der letzten Stunde landet.
Entscheidungen vor dem Build festlegen
Die meisten „Last-Minute"-Release-Probleme sind frühe Entscheidungen, die du nicht getroffen hast. Leg einige Basics jetzt fest, und alles Weitere wird einfacher.
Beginne mit der Identität: der genaue App-Name, den Nutzer sehen, und die internen IDs, die die Stores nutzen (Package-Name auf Android, Bundle-Identifier auf iOS). Späte Änderungen können Updates, Deep-Links und Analytics-Historie kaputtmachen. Entscheide auch, wie du Releases versionierst, damit jeder Build eine klare Nummer hat und du nie raten musst, was live ist.
Dann setze Plattform-Grenzen: Android, iOS oder beide am ersten Tag und Mindest-OS-Versionen, die zu deinen Nutzern passen. Mindestanforderungen spät anzuheben kann Designänderungen erzwingen oder Geräte ausschließen, die du fälschlicherweise unterstützt hast.
Schreibe diese Entscheidungen irgendwo auf, wo das Team sie findet:
- App-Name, Package/Bundle-ID und eine einfache Versionierungsregel
- Unterstützte Plattformen und Mindest-OS-Versionen
- Umgebungen (dev, staging, production) und worin sie sich unterscheiden
- Wer die finale "Ship"- oder "Hold"-Entscheidung trifft
- Store-Account-Zugänge: Logins, Rollen und 2FA-Wiederherstellungsmethoden
Bestätige schließlich, dass deine Store-Konten existieren und du veröffentlichen kannst. Nichts bremst einen Launch so sehr wie das Warten auf Kontofreigaben, fehlende Steuerformulare oder fehlende Upload-Berechtigungen. Ob du die App mit einem Tool wie Koder.ai erzeugst oder per Hand codest, die Entscheidungen gelten trotzdem.
App-Signatur: Schlüssel, Besitzverhältnisse und sichere Aufbewahrung
App-Signierung ist der Beweis, dass ein Update wirklich von dir stammt. Ist die Signatur falsch konfiguriert, kann der Store den Upload ablehnen oder du kannst keine Updates liefern.
Auf Android bedeutet Signatur meist ein Upload-Key in einer Keystore-Datei (plus Passwörter). Auf iOS sind es Zertifikate und Provisioning-Profile, die an ein Apple Developer-Konto gebunden sind. Selbst wenn du mit Koder.ai baust und den Quellcode exportierst, brauchst du vor der ersten Einreichung klaren Besitz an Store-Konten und Signatur-Assets.
Besitz und Zugang festlegen
Wähle einen System-of-Record-Eigentümer für jede Plattform, idealerweise ein Firmenkonto statt ein persönliches Konto. Setze Zugriffsregeln, damit du nicht von einem Laptop oder einer Person abhängig bist.
Halte kurz fest:
- Welche Accounts die Signier-Schlüssel besitzen (Google Play, Apple Developer)
- Wo der Keystore und iOS-Signing-Dateien liegen (Vault, verschlüsselter Speicher)
- Wer Releases erzeugen darf und wer Credentials rotieren kann
- Wie der Zugang wiederhergestellt wird (2FA-Recovery-Codes, Admin-Rollen)
Backups und der "verlorener Schlüssel"-Plan
Ein verlorener Android-Schlüssel kann zukünftige Updates für dasselbe App-Paket blockieren. Erstelle ein verschlüsseltes Backup an einem separaten Ort und teste das Wiederherstellen. Bei iOS führt verlorener Zugang meist zu einem accountbasierten Erholungsaufwand, also halte mehrere vertrauenswürdige Admins bereit und dokumentiere sie.
Verifiziere die Signatur auf einer sauberen Maschine (frischer Checkout, neuer CI-Runner oder Laptop einer anderen Person). Wenn es nur auf einem Computer funktioniert, ist es nicht bereit.
Build-Flavors: dev und production getrennt halten
Flavors verhindern, dass „läuft auf meinem Handy" zu „wir haben den Testserver ausgeliefert" wird. Ein Flavor ist schlicht ein benannter Build, der unterschiedliche Konfigurationen nutzt, ohne dass du vor jedem Release Dateien editierst.
Die meisten Teams sollten mit zwei Flavors beginnen: dev (zum Testen) und prod (was du einreichst). Wenn dein Team „staging" sagt, nutze dieses Wort. Verwirrende Namen führen dazu, dass der falsche Build geteilt oder hochgeladen wird.
Lege fest, worin sich Flavors unterscheiden. Häufige Unterschiede sind App-Identität (Name und Bundle-ID), Icons, API-Endpunkte, Feature-Flags, Analytics/Crash-Reporting-Settings und Logging-Level.
Halte sensible Werte möglichst aus dem Repo heraus. Nutze Umgebungsdateien, CI-Secrets oder zur Build-Zeit injizierte Variablen, damit Keys nicht in Commits landen.
Bevor du es als fertig deklarierst, baue jeden Flavor, den du verwenden willst, inklusive eines sauberen Release-Builds. Fehlende Konfigurationen zeigen sich hier, nicht am Launch-Tag.
Crash-Reporting und Release-Logging
Du kannst einen sauberen Build ausliefern und trotzdem reale Probleme verpassen: exotische Geräte, instabile Netze und Edge-Case-Flows. Crash-Reporting verwandelt diese Überraschungen in eine handhabbare To-Do-Liste.
Wähle ein Crash-Reporting-Tool und integriere es früh. Die Marke ist weniger wichtig als die Tatsache, dass jede Veröffentlichung nützliche Reports sendet.
Symbole und Mapping als Release-Schritt
Viele „nicht reproduzierbar"-Fälle entstehen durch fehlende Symbole. Mache es zu einem Release-Schritt, hochzuladen:
- iOS dSYM-Dateien (damit Stacktraces lesbar sind)
- Android-Obfuscation-Mapping (wenn du shrink/obfuscate verwendest)
- Die exakte Build-Nummer und der Git-Commit (oder Build-Tag), die dem Upload zugeordnet sind
Wenn das manuell passiert, wird es in einer stressigen Woche übersprungen.
Logs, die bei der Fehlerbehebung helfen
Entscheide, was du am ersten Tag brauchst: App-Version/Build, Gerätemodell, OS-Version, Locale und der letzte Screen oder die letzte Aktion. Wenn ihr Accounts habt, füge eine stabile anonyme Nutzer-ID und ein "eingeloggt/ausgeloggt"-Flag hinzu. Vermeide personenbezogene Daten in Logs.
Erfasse auch nicht-fatale Fehler. In Flutter treten viele Probleme als Exceptions auf, die die App nicht abstürzen lassen (Parse-Fehler, Timeouts, unerwartete Nulls). Sende diese als non-fatal Events mit einer kurzen Nachricht und einigen Schlüssel-Wert-Feldern.
Teste das vor dem Release: mache einen Staging-Build, löse einen erzwungenen Crash aus (über ein Debug-Menü oder geheime Geste) und bestätige, dass du einen lesbaren Stacktrace mit der richtigen Version und Kontext siehst.
Berechtigungen: verständliche Texte und gutes Timing
Berechtigungen sind ein schneller Weg, Vertrauen beim ersten Start zu verlieren. Liste vor der Veröffentlichung jede Berechtigung auf, die deine App anfragen könnte, welche Funktion sie braucht und welchen Nutzen der Nutzer davon hat. Wenn du es nicht in einem kurzen Satz erklären kannst, solltest du es wahrscheinlich nicht anfragen.
Halte die Texte einfach und konkret. „Wir benötigen Zugriff auf deine Fotos" ist schwächer als „Erlaube Fotos, damit du einen Beleg an deine Ausgaben anhängen kannst." Vermeide technische Wörter wie „Storage", außer du erklärst im Moment, was gemeint ist.
Frage nur dann, wenn der Nutzer die zugehörige Aktion auslöst. Frage nicht bei App-Start nach Fotos. Frage, wenn sie auf „Foto hinzufügen" tippen, nach einer kurzen Vor-Erklärung.
Wenn ein Nutzer nein sagt, sollte die App trotzdem nutzbar bleiben. Plane Fallbacks: Feature sichtbar lassen, erklären, was blockiert ist, alternative anbieten wenn möglich und Fortschritt speichern, damit keine Arbeit verloren geht. Wenn sie „Nicht mehr fragen" wählen, weise sachlich auf die Einstellungen hin, ohne zu nerven.
Prüfe plattformspezifische Texte: iOS braucht klare Usage-Descriptions in Info.plist. Android braucht korrekte Manifest-Einträge und manchmal eine kurze In-App-Erklärung. Fehlende oder unklare Texte können Review-Verzögerungen oder Nutzerverlust verursachen.
Ein praktischer Release-Testdurchlauf (kein vollständiger Testplan)
Das ist ein leichter Durchlauf, um Probleme zu finden, die nur im echten Release-Build auftreten. Halte es so, dass du es in unter einer Stunde schaffen kannst.
Schreibe ein einfaches Skript, dem jeder folgen kann, auch ohne Entwickler-Tools. Regel: Teste, was Nutzer tun, nicht was Entwickler inspizieren können.
Kurzes Release-QA-Skript
Führe es auf mindestens einem kleinen Telefon und einem größeren Gerät durch (ideal auf einer älteren OS-Version):
- Installiere den Release-Build (kein Debug) und bestätige, dass er sich wie eine Store-App verhält (kein Debug-Banner, keine Dev-Menüs).
- Schließe Onboarding und Login komplett ab (inkl. Passwort-Reset oder Magic Link, falls vorhanden).
- Löse deinen wichtigsten „Money"-Flow aus (Subscription, In-App-Kauf, Checkout oder Paywall) mit echten Testkonten.
- Prüfe Benachrichtigungen Ende-zu-Ende: Berechtigungs-Prompt, Empfang und Tippen, das die richtige Seite öffnet.
- Teste Offline und schlechtes Netz: öffne die App im Flugmodus und erhol dich, wenn die Verbindung zurückkehrt.
Schließe nach dem Durchlauf die App erzwingend und starte neu, um zu bestätigen, dass sie sauber startet und nicht von einem warmen Zustand abhängt.
Wenn etwas fehlschlägt, notiere den genauen Screen, die letzte Aktion und ob es nur auf einer Gerätegröße passiert. Das reicht oft für einen schnellen Fix.
Store-Listing-Assets: vorher vorbereiten
Viel Launch-Stress kommt von Store-Seiten, nicht vom Code. Betrachte das Listing als Teil der Release-Arbeit und vermeide Last-Minute-Designanfragen, fehlende Datenschutzangaben und Screenshot-Chaos.
Sammle, was du höchstwahrscheinlich brauchst: App-Icon, Screenshots, eine kurze Unterzeile, eine längere Beschreibung und alle plattformspezifischen Grafiken. Promo-Videos sind optional und lohnen sich nur, wenn du sie aktuell halten kannst.
Wähle früh Gerätegrößen für Screenshots und bleibe dabei. Halte eine konsistente Reihenfolge (Onboarding, Hauptscreen, Kernfunktion, Einstellungen, Upgrade), damit Updates nicht in Hektik ausarten.
Schreibe die Beschreibung menschlich: ein klarer Satz, was die App macht, dann ein paar kurze Nutzenzeilen und eine einfache Notiz zu Abos oder Accounts, falls vorhanden. Versprich nichts, was du nicht liefern kannst.
Sammle außerdem Datenschutz- und Datennutzungsangaben. Du wirst nach Tracking, gesammelten Datentypen und Berechtigungen gefragt. Wenn deine App Standort, Kontakte oder Fotos anfragt, erkläre kurz, warum.
Wenn du Assets organisiert hältst, werden Updates zur Routine. Eine einfache Struktur reicht (Icon, Screenshots nach Gerätetyp, Texte, Datenschutznotizen, Release-Notes).
Mach eine Trockenübung der Einreichung, damit nichts überrascht
Eine Dry-Run bedeutet, den Store-Einreichungsprozess durchzugehen, als würdest du starten, aber vor dem Publish zu stoppen. So werden Vermutungen zu echten Antworten.
Wähle einen Build, den du hochladen würdest (auch wenn du ihn nicht veröffentlichst). Lade ihn hoch, fülle die Formulare aus und speichere alles als Entwurf. Du willst fehlende Infos entdecken, solange noch Zeit zum Korrigieren ist.
Prüfe:
- Version und Build-Nummer stimmen, Release-Notes sind bereit.
- Compliance-Fragen konsistent beantwortet (Daten, Werbung, Verschlüsselung, Login-Anforderungen, sensible Berechtigungen).
- Unterstützte Länder, Preisgestaltung (falls) und Altersfreigaben sind korrekt.
- Kontaktdaten sind bereit: Support-E-Mail, Standort der Datenschutzerklärung und mögliche Review-Hinweise.
- Review-Infos sind vollständig: Demo-Account (falls nötig) und klare Schritte, um Schlüsselfunktionen zu erreichen.
Plane auch „was, wenn die erste Veröffentlichung schlecht ist." Entscheide, wie du zurückrollst (bewahre das vorherige signierte Artefakt), wie du einen Hotfix lieferst und was einen Stopp der Rollout-Ausweitung auslöst (Crash-Spikes, Login-Fehler).
Entscheide außerdem, wie du frühes Feedback in den ersten 48 Stunden sammelst. Ein kleiner Gruppen-Channel, ein tatsächlich überwachte Support-Inbox und eine In-App-„Feedback senden"-Option fangen offensichtliche Probleme, bevor sie zu 1-Sterne-Bewertungen werden.
Häufige Fallen, die kurz vor dem Launch Tage kosten
Die meisten Verzögerungen entstehen, weil der getestete Build nicht der Build ist, den du auslieferst. Ein Debug- oder Profile-Build kann perfekt aussehen, aber der Release-Build scheitert auf echten Geräten wegen Minifizierung, anderen Konfigurationswerten oder fehlenden Laufzeitberechtigungen.
Ein weiterer Zeitfresser ist, Entwicklung- und Produktions-Einstellungen zu mischen: Staging-API-URL, falscher Analytics-Key oder Test-Zahlungseinstellungen. Behandle Produktion als eigene Umgebung und verifiziere sie am genauen Release-Artefakt.
Diese Fallen verbrennen Teams immer wieder:
- Testen „nahe am Release" statt des exakt signierten Artefakts, das du hochlädst.
- Falsche Endpunkte oder Feature-Flags wegen unklarer Trennung der Konfiguration.
- Review-Ablehnungen, weil Berechtigungs-Prompts unklar oder fehlend sind.
- Crash-Reports, die nicht nutzbar sind, weil Symbole/Mapping nicht hochgeladen wurden.
- Signaturschlüssel und die einzige funktionierende Einrichtung auf dem Laptop einer Person.
Stell dir einen Freitag-Upload vor: Ein Reviewer öffnet die App, tippt eine Funktion an, die Zugriff anfordert, und der Text ist vage. Du korrigierst den Text, aber der Signatur-Schlüssel liegt auf dem Rechner eines Kollegen, der gerade offline ist. Das sind zwei vermeidbare Tage.
Schnelle Release-Readiness-Checkliste (druckbar)
Nutze dies am Tag vor dem Erstellen deines ersten Store-Builds. Sie ist bewusst kurz. Wenn ein Punkt ein „Vielleicht" ist, stoppe und löse ihn, bevor du Zeit in Store-Formulare investierst.
- Signatur funktioniert auf einer sauberen Maschine. Ein frischer Checkout kann einen signierten Release bauen, ohne Dateien zu suchen. Schlüssel/Zertifikate sind gesichert, Zugriff ist limitiert und Besitzverhältnisse sind klar.
- Alle Build-Flavors bauen erfolgreich. Dev, staging (falls verwendet) und production bauen ohne manuelle Anpassungen. Die Production-Konfiguration ist bestätigt (bundle id/applicationId, App-Name, Icons, API-Endpunkte, Analytics-Keys).
- Crash-Reporting funktioniert in einem Release-Build. Ein Test-Crash oder Event aus einem Release-Build kommt mit Symbolen/Mapping an, sodass Stacktraces lesbar sind.
- Berechtigungen sind gerechtfertigt und verständlich. Jede Berechtigung hat klare, menschenlesbare Texte und die App bleibt eingeschränkt nutzbar, wenn Nutzer ablehnen. Timing ist kontextuell.
- Store-Listing-Assets sind fertig. Icons, Screenshots, erforderliche Grafiken, Kurz-/Langbeschreibungen, Support-E-Mail, Datenschutzangaben und Altersfreigaben sind entworfen und geprüft.
Wenn du mit einer Plattform arbeitest, die Quellcode exportieren kann, wie Koder.ai (koder.ai), füge eine weitere Prüfung hinzu: bestätige, dass das exportierte Projekt denselben signierten Release-Build erzeugt, den du hochladen willst.
Beispiel: erste Einreichungswoche ohne Panik
Ein kleines Team von drei Leuten bringt seine erste Flutter-App in die Stores: ein Entwickler, ein Designer und ein Teilzeit-PM. Sie behandeln die erste Einreichung wie eine Generalprobe.
Am Montag generiert der Entwickler den Release-Build und merkt, dass der Signatur-Schlüssel auf einem Laptop liegt, der bald gelöscht wird. Sie lösen das noch am selben Tag: Schlüssel in ein gemeinsames, zugangsbeschränktes Vault verschieben, Besitz dokumentieren und bestätigen, dass die CI-Maschine signieren kann.
Am Dienstag liest der PM jede Berechtigungsabfrage laut vor. Eine fällt negativ auf: Die Foto-Berechtigung sagt „erforderlich", aber die App braucht sie nur für optionale Profilbilder. Sie schreiben den Text um, erklären den Nutzen und verschieben die Abfrage auf den Moment, wenn der Nutzer auf „Foto hinzufügen" tippt.
Am Donnerstag machen sie einen vollständigen Dry-Run der Einreichung mit finalen Screenshots, Release-Notes und dem Produktions-Build. Der Store markiert eine Diskrepanz zwischen Beschreibung und einer In-App-Abo-Bezeichnung. Da es ein Dry-Run ist, korrigieren sie das und reichen vor dem Launch erneut ein.
Sie halten eine einfache Timeline für das nächste Mal:
- Mon: Feature-Freeze, Signatur- und Produktions-Build verifizieren
- Tue: Berechtigungen und In-App-Texte prüfen
- Wed: Smoke-Test auf echten Geräten, Analytics und Crash-Reporting bestätigen
- Thu: Dry-Run der Store-Einreichung
- Fri: Einreichen zur Überprüfung und Puffer für Fixes
Nächste Schritte: mache dein nächstes Release leichter als das erste
Der erste Launch lehrt dich, wie „bereit" wirklich aussieht. Halte das fest, solange es frisch ist.
Vergib klare Zuständigkeiten. Selbst in kleinen Teams bedeutet „alle" oft „niemand", und wichtige Aufgaben rutschen durch:
- Signatur und Key-Storage
- Finale Gerätechecks und Go/No-Go
- Store-Listing-Assets und Texte
- Einreichungsschritte und Reviewer-Nachverfolgung
Mach aus dem, was du gerade getan hast, eine wiederholbare Checkliste und eine Release-Note-Vorlage: die Befehle, die du ausgeführt hast, die Freigaben, die du gebraucht hast, und die Dateien, die du hochgeladen hast. Füge auch die Stolperfallen hinzu, z. B. welcher Flavor Produktion ist und welche Berechtigungs-Texte Reviewer hinterfragt haben.
Plane ein 20-minütiges Post-Release-Review innerhalb einer Woche. Fokus auf Fixes, nicht auf Schuldzuweisungen:
- Was hat uns während Einreichung oder Review überrascht?
- Was hat länger gedauert als erwartet und warum?
- Was können wir das nächste Mal früher vorbereiten (Assets, Texte, Support-Inbox)?
Wenn du mit Koder.ai baust, kann Planning Mode helfen, Release-Aufgaben an einem Ort zu verfolgen, und Snapshots geben dir einen bekannten guten Zustand vor Last-Minute-Änderungen.
FAQ
Was bedeutet „veröffentlichungsbereit“ für die erste Flutter-Einreichung?
Veröffentlichungsbereit bedeutet, dass du einen signierten Produktions(Release)-Build erzeugen kannst, der sich auf einem sauberen Gerät installieren lässt und ohne letzte Fixes eingereicht werden kann.
Eine praktische Basis ist:
- Du kannst zuverlässig das genaue Artefakt erzeugen, das du hochlädst.
- Signatur-Schlüssel/Zertifikate sind im Besitz, gesichert und wiederherstellbar.
- Crash-Reporting liefert lesbare Stacktraces für genau diesen Build.
- Store-Listing und erforderliche Angaben sind vollständig.
Wie kann ich sicherstellen, dass ich denselben Build teste, den ich auch einreichen werde?
Erzeuge einen Release-Build und installiere ihn auf einem Gerät, auf dem deine App noch nie war.
Prüfe:
- Kein Debug-Banner und keine Entwickler-Menüs.
- App startet nach Erzwingen des Schließens sauber neu.
- Der Kern-Flow funktioniert unter realen Netzwerkbedingungen.
Wenn du nur Debug/Profile getestet hast, geh davon aus, dass du nicht wirklich das getestet hast, was du verschickst.
Was ist die sicherste Art, Android-Signaturschlüssel zu verwalten, damit wir keine Updates verlieren?
Behandle Signatur-Assets wie Produktions-Zugangsdaten:
- Weise einen Besitzer zu (am besten ein Firmenkonto, nicht eine einzelne Person).
- Speichere den Android-Keystore und Passwörter in verschlüsseltem Speicher mit eingeschränktem Zugriff.
- Halte mindestens ein getestetes Backup an einem separaten Ort.
Wenn der Schlüssel nur auf einem Laptop existiert, bist du einem Unfall entfernt davon, Updates zu blockieren.
Was sollten wir für iOS-Signatur einrichten, damit der Veröffentlichungstag nicht ins Stocken gerät?
Binde die Signatur an das Apple Developer-Konto mit klaren Admin-Zugängen.
Tu das früh:
- Sorge dafür, dass mindestens zwei vertraute Admins Zertifikate/Profiles verwalten können.
- Dokumentiere, wer Releases auslöst und wie 2FA-Wiederherstellung funktioniert.
- Erzeuge einen signierten Release-Build auf einer sauberen Maschine/CI, um zu beweisen, dass es nicht nur auf „meinem Mac“ funktioniert.
Brauchen wir wirklich Build-Flavors und was sollte zwischen dev und prod unterschiedlich sein?
Starte mit zwei Flavors: dev und prod.
Gängige Unterschiede:
- App-Name und Bundle/Package-ID
- API-Endpunkte und Feature-Flags
- Icons (optional, aber hilfreich)
- Analytics/Crash-Reporting-Konfiguration
- Logging-Level
Ziel ist es, manuelle Dateiänderungen kurz vor dem Release zu vermeiden.
Wie halten wir sensible Konfigurationen (API-Schlüssel, Endpunkte) aus dem Repo, bauen aber zuverlässig?
Nutze Geheimnis-Injektion statt sie zu committen.
Gute Praxis:
- Halte API-Schlüssel aus dem Repo fern.
- Verwende nicht eingecheckte Umgebungsdateien, CI-Secrets oder Buildzeit-Variablen.
- Lass den Build fehlschlagen, wenn ein Produktions-Secret fehlt (besser als stillschweigend Dev-Werte zu nutzen).
So verhinderst du, dass versehentlich Staging-Endpunkte oder Test-Zahlungseinstellungen live gehen.
Was ist das minimale Crash-Reporting-Setup, das nach dem Launch wirklich hilft?
Wähle ein Crash-Reporting-Tool und mache es zum Teil des Release-Prozesses.
Mindestsetup:
- Jeder Report enthält App-Version/Build und Gerät/OS.
- Lade iOS dSYM-Dateien hoch, damit Stacktraces lesbar sind.
- Lade Android-Obfuscation-mapping hoch, wenn du shrink/obfuscate nutzt.
Teste das mit einem erzwungenen Crash in einem Staging/Release-Build und verifiziere, dass der Report brauchbar aussieht.
Wann sollten wir um Berechtigungen bitten und wie vermeiden wir es, Nutzer beim ersten Start zu verunsichern?
Bitte nur, wenn der Nutzer die Funktion auslöst.
Ein gutes Muster:
- Zeige eine kurze Vor-Erklärung („Erlaube Fotos, damit du einen Beleg anhängen kannst“).
- Rufe den System-Permission-Prompt erst nach der Absicht (Tap „Foto hinzufügen“) auf.
- Wenn abgelehnt, bleibt die App nutzbar und du erklärst, was eingeschränkt ist.
Vage Prompts und frühe Permission-Spam sind häufige Ursachen für Misstrauen und Review-Verzögerungen.
Was ist ein praktischer Release-Test, den wir in unter einer Stunde durchführen können?
Führe einen schnellen „Release-Build Smoke Test“ durch, dem jeder folgen kann:
- Installiere den signierten Release-Build auf einem sauberen Gerät.
- Durchlaufe Onboarding/Login von Grund auf.
- Führe den wichtigsten „Money“-Flow (Paywall, Kauf, Checkout) mit Testkonten aus.
- Teste Offline/schlechtes Netz und die Wiederherstellung.
- Erzwinge ein Schließen und starte die App neu.
Notiere: letzte Aktion, Screen, Gerätemodell und ob es reproduzierbar ist.
Was sollte ein Store-Submission-Dry-Run enthalten, damit wir nicht überrascht werden?
Mache einen Dry-Run des Store-Submissions und speichere ihn als Entwurf.
Verifiziere, dass bereit sind:
- Korrekte Version/Build-Nummer und Release-Notes
- Icons, Screenshots, Kurz-/Langbeschreibung
- Datenschutz-/Datenangaben und Berechtigungs-Erklärungen
- Support-Kontakt und mögliche Review-Hinweise/Demo-Konten
Plane auch deinen Rollback/Hotfix-Plan, bevor du Publish drückst.