
17. Oktober 2026 · 9 Min.
Feature Flags sind kein Tarnumhang: Apps ehrlich durch das Review bringen
Apple verbietet seit dem 16. Oktober versteckte, ruhende und undokumentierte Funktionen ausdrücklich. So bleiben Feature Flags, Remote Config und gestufte Rollouts trotzdem schnell — und für das Review nachvollziehbar.




Ein Feature Flag darf steuern, aber nicht täuschen
Am 16. Oktober 2026 hat Apple seine App Review Guidelines aktualisiert. Der neue Punkt 2.5.19 formuliert eine Grenze, die Produktteams schon vorher ernst nehmen mussten, jetzt aber nicht mehr überlesen können: Apps dürfen keine versteckten, ruhenden oder undokumentierten Funktionen enthalten. Das gilt laut Richtlinie ausdrücklich auch für Funktionen, die durch Codeverschleierung verborgen werden. Apple nennt als mögliche Folgen die Entfernung aus dem App Store und die Kündigung des Developer-Program-Kontos.
Für Teams mit Feature Flags, Remote Config oder gestuften Rollouts klingt das zunächst bedrohlich. Diese Werkzeuge sind jedoch nicht das Problem. Ein Flag, das einen geprüften Funktionspfad kontrolliert, Nutzergruppen schrittweise freischaltet oder einen sicheren Rollback erlaubt, ist etwas anderes als eine Funktion, die vor dem Review verborgen und erst danach aktiviert wird.
Die entscheidende Frage lautet nicht: Gibt es einen Schalter? Sie lautet: Kann das Review-Team verstehen, welche Funktion existiert, wie es sie erreicht und was sich nach der Freigabe ändern kann?
Wo legitimer Rollout in Bait-and-Switch kippt
Ein sauberer Feature-Flag-Prozess trennt Auslieferung und Freischaltung, ohne die Identität des Produkts zu verändern. Der geprüfte Build enthält eine nachvollziehbare Funktion; das Flag begrenzt zunächst Reichweite oder Risiko.
Kritisch wird es, wenn ein Team:
- dem Review eine abgespeckte oder bewusst andere App zeigt;
- eine wesentliche Funktion erst nach der Freigabe per Remote Config erscheinen lässt;
- einen Codepfad nicht in den App Review Notes beschreibt;
- für Reviewer andere Serverantworten oder andere Inhalte ausliefert;
- verschleierten Code oder nachgeladenes Verhalten verwendet, um den Zweck der App zu verbergen;
- dauerhaft abgeschaltete Funktionen im Build liegen lässt, ohne Owner, Test oder Entfernungstermin.
Apples Punkt 2.3.1(a) ergänzt diese Grenze: Neue Funktionen und Produktänderungen müssen in den App Review Notes konkret beschrieben und für das Review zugänglich sein. Allgemeine Aussagen reichen nicht. Punkt 2.5.2 verbietet außerdem, Code herunterzuladen, zu installieren oder auszuführen, der Merkmale oder Funktionalität der App verändert.
Ein Kill Switch für einen fehlerhaften, bereits geprüften Pfad ist deshalb nicht dasselbe wie ein Mechanismus, der nach der Freigabe ein neues Produkt in den alten Build lädt.
Jedes Flag braucht einen kleinen Ausweis
Feature Flags werden häufig wie temporäre Implementierungsdetails behandelt. In der Praxis beeinflussen sie Produktverhalten, Support, Datenschutz und Review. Wir führen deshalb für jedes release-relevante Flag einen kurzen Datensatz:
- Name und Owner: Wer entscheidet über Aktivierung und Entfernung?
- Zweck: Welches Risiko oder welche Hypothese kontrolliert das Flag?
- Standardzustand: Was sieht eine frische Installation ohne Sonderkonfiguration?
- Zielgruppe: Interne Tester, TestFlight-Gruppe, Region, Prozent-Rollout oder alle Nutzer?
- Review-Pfad: Welche Navigation, Rolle und Daten machen die Funktion sichtbar?
- Abhängigkeiten: Braucht der Pfad einen Backend-Schalter, Account, Entitlement oder In-App-Kauf?
- Daten und Berechtigungen: Verändert die Funktion Datennutzung, Tracking, Kamera, Standort oder Benachrichtigungen?
- Ablaufdatum: Wann wird das Flag entfernt oder in dauerhafte Konfiguration überführt?
Diese Liste muss kein neues Verwaltungssystem werden. Eine versionierte YAML-Datei oder ein Abschnitt im Release-Ticket reicht, solange Build, Konfiguration und Review Notes auf denselben Stand zeigen.
App Review Notes wie eine Testanleitung schreiben
Reviewer sollten eine Funktion nicht erraten müssen. Gute Notes sind eine kurze, reproduzierbare Anleitung und keine Marketingbeschreibung.
Für jedes neue oder wesentlich geänderte Feature gehören hinein:
- Was ist neu? Ein Satz mit Nutzerwert und tatsächlichem Verhalten.
- Wo beginnt der Pfad? Genaue Navigation ab dem App-Start.
- Welcher Zugang ist nötig? Demo-Account, Rolle, Region oder vorbereitete Beispieldaten.
- Welche Konfiguration gilt? Name und erwarteter Zustand des relevanten Flags, ohne interne Secrets offenzulegen.
- Welche Abhängigkeit muss verfügbar sein? Backend, Bluetooth-Gerät, Abonnement oder andere Voraussetzung.
- Wie lässt sich der Ergebniszustand prüfen? Erwartete Anzeige oder Aktion.
- Was ist bewusst noch nicht öffentlich? TestFlight-, Pilot- oder gestufter Rollout mit klarer Abgrenzung.
Apples Punkt 2.1 verlangt vollständige, testbare Einreichungen. Backend-Dienste müssen während des Reviews erreichbar sein; loginpflichtige Apps brauchen einen aktiven Demo-Account oder nach vorheriger Zustimmung einen vollständig ausgestatteten Demo-Modus. Eine PDF-Erklärung hilft nicht, wenn der eigentliche Pfad mit einem abgelaufenen Account endet.
Remote Config darf keine Reviewer-Erkennung sein
Remote Config ist nützlich, weil Teams Schwellenwerte, Reihenfolgen oder Reichweite ändern können, ohne für jede Anpassung einen neuen Binary-Build zu erzeugen. Sie wird gefährlich, sobald sie das Review gezielt anders behandelt als reale Nutzer.
Ein robuster Aufbau erfüllt vier Regeln:
- Die Konfiguration wird nach App-Version und fachlicher Kohorte ausgewählt, nicht nach vermuteter Reviewer-IP oder Testgerät.
- Die beim Einreichen erwartete Konfigurationsrevision wird gespeichert und kann später rekonstruiert werden.
- Der Review-Account sieht denselben Funktionspfad, der für die beschriebene Zielgruppe vorgesehen ist.
- Ein Ausfall der Konfiguration führt zu einem sicheren, dokumentierten Standardzustand — nicht zu einer zweiten, geheimen App.
In Logs genügt eine Revisions-ID. Komplette Tokens, personenbezogene Daten oder interne Konfigurationsinhalte gehören dort nicht hinein. Das Team muss nachvollziehen können, mit welchem Schalterstand ein Build geprüft wurde, ohne neue Sicherheitsprobleme zu erzeugen.
Vier Zustände vor jeder Einreichung testen
Ein einzelner Happy Path deckt Flag-Probleme kaum auf. Vor dem Upload testen wir denselben Release Candidate in vier Zuständen:
Frische Installation: keine gecachten Werte, Standardkonfiguration, neuer Account. Hier zeigt sich, ob ein alter Flag-Wert versehentlich vorausgesetzt wird.
Review-Zugang: exakte Zugangsdaten und Schritte aus den Notes. Ein Teammitglied, das die Funktion nicht gebaut hat, führt die Anleitung Wort für Wort aus.
Aktivierte Kohorte: das Feature ist vollständig an. Wir prüfen Navigation, Berechtigungen, Datenschutztexte, Käufe, Analytics und Fehlerzustände.
Rollback oder Offline: das Flag wird deaktiviert oder Remote Config ist nicht erreichbar. Daten dürfen nicht beschädigt werden, und die App muss in einen erklärbaren Zustand zurückkehren.
Screenshots dieser vier Pfade sind kein Ersatz für Tests, aber ein brauchbarer Review-Artefakt im Release-Ticket. Noch besser ist eine kleine automatisierte Matrix, die kritische Navigation für Standard-, Aktiv- und Fallback-Zustand abläuft.
TestFlight ist der richtige Hafen für unfertige Experimente
Punkt 2.2 der Guidelines ist eindeutig: Demos, Betas und Trial-Versionen gehören nicht in den App Store; dafür ist TestFlight vorgesehen. Ein unfertiges Experiment sollte deshalb nicht als versteckte Produktionstechnik in einem öffentlichen Build reisen.
Ein klarer Ablauf sieht so aus:
- Interne Gruppe prüft technische Stabilität und Datenmigration.
- Externe TestFlight-Gruppe validiert Verständnis und reale Nutzung.
- Das Team entscheidet, ob Funktion, Metadaten, Datenschutzangaben und Support bereit sind.
- Die Funktion wird vollständig in den Review Notes beschrieben und eingereicht.
- Nach Freigabe startet ein beobachteter Prozent-Rollout mit vorbereitetem Rückweg.
Ein gestufter Rollout reduziert Betriebsrisiko. Er ersetzt aber nicht das Review einer neuen wesentlichen Funktion. Das Flag darf die Exposition ändern, nicht den eigentlichen Zweck des geprüften Builds austauschen.
Dormant Code braucht ein Ablaufdatum
Feature Flags altern schnell. Nach einigen Releases weiß oft niemand mehr, ob ein ausgeschalteter Pfad noch gebraucht wird, welche Daten er erwartet oder ob er überhaupt kompiliert. Der neue Punkt 2.5.19 macht diesen technischen Ballast zusätzlich zu einem Review-Risiko.
Wir geben jedem temporären Flag deshalb schon beim Anlegen:
- ein Datum für die Entscheidung;
- einen verantwortlichen Owner;
- ein Ticket zum Entfernen des alten Pfads;
- eine Metrik oder ein klares Kriterium für Behalten, Umbauen oder Löschen.
Ist die neue Variante stabil, wird das Flag samt altem Code entfernt. Wird ein Experiment verworfen, verschwindet der experimentelle Pfad ebenfalls. „Für später vielleicht“ ist kein Lebenszyklus.
Eine kurze Preflight-Checkliste
Vor dem Absenden beantworten wir neun Fragen mit Ja:
- Sind alle Funktionen im Build bekannt und einem Owner zugeordnet?
- Beschreiben die Review Notes jede neue oder geänderte Funktion konkret?
- Kann ein fremdes Teammitglied den Review-Pfad reproduzieren?
- Funktionieren Demo-Account und Backend ohne interne Hilfe?
- Sieht der Reviewer keinen künstlich anderen Produktzustand?
- Sind Remote-Config-Revision und sichere Defaults dokumentiert?
- Wurden Standard, aktivierter Zustand und Rollback getestet?
- Liegen unfertige Experimente in TestFlight statt im öffentlichen Store?
- Haben temporäre Flags ein Ablaufdatum und ein Entfernungsticket?
Feature Flags bleiben ein gutes Werkzeug. Sie machen Releases kleiner, Rollouts kontrollierbarer und Recovery schneller. Aber sie dürfen keine zweite Ebene schaffen, auf der ein Produkt nach dem Review heimlich seine Identität wechselt. Die beste Antwort auf Apples neue Klarstellung ist deshalb keine zusätzliche Tarnung, sondern eine bessere Release-Disziplin: sichtbare Funktionen, reproduzierbare Notes, getestete Konfiguration und Code, der wieder verschwindet, wenn sein Schalter nicht mehr gebraucht wird.
Quellen



