Eine App aus Ihrem Coding-Agent store-fertig machen
Ihr Agent liest die App, die vor ihm liegt – SDKs, Berechtigungen, Bundle-ID – und entwirft aus dem, was er findet, jede Compliance-Seite. Sie lesen die Entwürfe und veröffentlichen sie. Der Agent kann das nicht.
Bevor Sie anfangen
Sie brauchen Claude Code und ein AppFoyer-Konto. Der Free-Plan reicht: Legen Sie eines an. Es gibt keinen Schlüssel zu erstellen – der Agent bittet Sie beim ersten Verbinden, ihn im Browser freizugeben.
Gar kein Coding-Agent? Sechs Felder im Browser liefern dieselben fünf Seiten ohne das Plugin.
Sie nutzen nicht Claude Code? Das Plugin braucht es, die Seiten für Datenschutzerklärung und Nutzungsbedingungen aber nicht: Ihre Editoren im Dashboard haben einen Prompt, ausgefüllt mit den Angaben Ihrer App, den Sie in einem beliebigen Assistenten ausführen und dessen Antwort Sie wieder einfügen – vollständig abgedruckt im Ratgeber zur Datenschutzerklärung und im Ratgeber zu Nutzungsbedingungen.
Installieren
claude
/plugin marketplace add appfoyer/claude-plugin
/plugin install appfoyer@appfoyer Zum Start brauchen Sie kein Konto: Der Agent liest Ihren Build, zeigt, was er gefunden hat, und stellt seine Fragen auf Ihrem Rechner; verbinden sollen Sie sich erst, wenn es etwas zu speichern gibt. Beim ersten Aufruf von AppFoyer öffnet sich Ihr Browser auf einer Freigabeseite: Melden Sie sich an oder legen Sie ein kostenloses Konto an, prüfen Sie den Namen und wohin der Browser zurückkehrt, und geben Sie frei. Claude Code behält die Verbindung und erneuert sie selbst; nichts wird kopiert, nichts in Ihrer Shell gespeichert. Wenn sich der Browser nicht öffnet, führen Sie /mcp aus, wählen appfoyer und dann Authenticate. In der Desktop-App von Claude Code verbinden Sie sich einmal auf diese Weise aus einem Terminal und starten dann dort eine neue Sitzung: Eine bereits laufende Sitzung sieht die neue Verbindung nicht. Trennen Sie sie auf der Seite Agent im Dashboard, schlägt der nächste Aufruf sofort fehl. Claude Code aktualisiert einen Marketplace eines Drittanbieters nicht von selbst: Wählen Sie unter /plugin → Marketplaces → appfoyer die Option Enable auto-update, um neue Versionen zu erhalten.
Kein Browser auf diesem Rechner – ein entfernter Server, ein Container, ein skriptgesteuerter Lauf? Nutzen Sie stattdessen einen API-Schlüssel: Erstellen Sie einen unter Agent → API key — for CI and headless use, installieren Sie das Plugin wie oben für den Workflow und fügen Sie den Server ein weiteres Mal mit dem Schlüssel im Header hinzu:
export APPFOYER_API_KEY=cpk_…
claude mcp add --transport http appfoyer-key https://app.appfoyer.com/mcp --header "Authorization: Bearer $APPFOYER_API_KEY" Das Plugin liest den Schlüssel nur aus dieser Umgebungsvariable – der Skill sieht ihn nie, und er wird nur im Authorization-Header übertragen, den Claude Code ausfüllt.
Ein anderer MCP-Client – claude.ai, Claude Desktop, Cursor, VS Code – kann sich auf dieselbe Weise mit https://app.appfoyer.com/mcp verbinden, mit derselben Freigabeseite. Er bekommt die Tools; den Schritt-für-Schritt-Workflow, der Ihre Build-Dateien liest, liefert das Claude Code-Plugin.
Was Sie sagen
Führen Sie das im Repository Ihrer App aus, nicht in einem leeren Verzeichnis:
| Sagen Sie | Was passiert |
|---|---|
Make this app store-ready | Durchsucht die Build-Dateien, bestätigt die Fakten, die er nicht ableiten konnte, entwirft jede Seite und gibt einen Prüflink zurück. |
Is this app store-ready? | Prüfung gegen die Compliance-Checkliste, nur lesend. Schreibt nichts. |
Wire the store-ready links into the app | Nach dem Veröffentlichen: schlägt die Links zu Datenschutz und Support in der App als Diff vor, den Sie prüfen. |
Add the AppFoyer drift check | Schlägt einen GitHub-Workflow vor, der Pull Requests markiert, die ein SDK oder eine Berechtigung hinzufügen, die die Seiten womöglich nicht abdecken. So funktioniert es. |
Beispiele
Sagen Sie es mit Ihren eigenen Worten; das sind die Fälle, die der Skill abdeckt.
Eine App, erster Lauf
> Make this app store-ready - Listet auf, was er in den Build-Dateien gefunden hat – SDKs, Berechtigungen, Bundle-ID –, jeweils mit Datei und Zeile.
- Fragt nur, was er nicht finden konnte: Firmenname, Support-E-Mail, Rechtsordnung, Store-Links. Höchstens zwei Runden.
- Legt die App an, lädt das Symbol aus dem Repository hoch und entwirft alle fünf Seiten.
- Endet mit einem Prüflink. Nichts ist öffentlich, bevor Sie dort veröffentlichen.
Nach einer Änderung erneut ausführen
> Make this app store-ready - Findet die bestehende App über ihre Application-ID und vergleicht die neuen Fakten mit den gespeicherten.
- Entwirft nur die Seiten neu, die die Änderung betrifft, etwa die Datenschutzerklärung nach einem neuen Analytics-SDK.
- Lässt Symbol und Adresse unangetastet, sofern Sie nicht darum bitten.
Mehrere Flavors, im Prompt benannt
> Make com.acme.weather.free and com.acme.weather.pro store-ready - Legt zwei Apps an und fragt nichts zur Auswahl.
- Liest für jeden Flavor den eigenen Ordner, Namen und die Abhängigkeiten. Ein Werbe-SDK, das nur der Free-Flavor nutzt, kommt nicht in die Datenschutzerklärung des Pro-Flavors.
- Gibt für jeden Flavor einen Prüflink und eine Tabelle der Console-URLs zurück.
Mehrere Flavors, nicht benannt
> Make this app store-ready - Listet die Flavors mit ihren Application-IDs auf, alle vorausgewählt, und Sie wählen, welche eine Website bekommen.
- Build-Typen wie debug und staging werden als ausgeschlossen aufgeführt, nicht angeboten.
Dimensionen Marke × Umgebung
> Make every brand store-ready - Listet Kombinationen auf (brandAProd, brandBProd), nicht einzelne Flavors.
- Bietet nur die Produktionsumgebung an. dev und qa gehen nie in einen Store.
- Liest den App-Namen aus Gradle (resValue, manifestPlaceholders) oder aus verschobenen Source Sets, wenn der Build ihn dort ablegt.
- Kann er nicht erkennen, ob eine Dimension Umgebungen oder Marken sind, fragt er.
Eigene Adresse (Pro und Advanced)
> Make this app store-ready - Bildet die Adresse aus dem englischen Namen der App, zum Beispiel weather-now.
- Ist sie vergeben oder einem Markennamen zu ähnlich, versucht er die nächste – weather-now-app, acme-weather –, höchstens fünfmal, dann fragt er Sie.
- Im Free-Plan behält er die Adresse app-… und sagt, dass die eigene mit Pro kommt.
- Die Adresse app-… liefert weiter dieselbe Website aus.
Eine Adresse ändern, die Sie bereits nutzen
> Change the address to weather-radar - Fragt zuerst. Die alte eigene Adresse wird sofort freigegeben, und ein Store-Eintrag, der sie noch nennt, funktioniert nicht mehr.
- Ändert sie erst, wenn Sie zustimmen.
Das Symbol aktualisieren
> Update the app icon - Findet das Launcher-Symbol: das Play-Symbol in 512, das größte Mipmap-Bild oder das Marketing-Bild aus dem iOS-AppIcon – zuerst das eigene des Flavors.
- Ist es größer als 512 KB, verkleinert er eine Kopie in einem temporären Ordner. Ihr Repository bleibt unangetastet.
- Sagt Ihnen, welche Datei er hochgeladen hat. Bei einer veröffentlichten App ist das neue Symbol sofort live.
Eine App mit Werbung
> Make this app store-ready. AdMob publisher id pub-0000000000000000 - Schreibt app-ads.txt aus den Zeilen, die Sie angeben. Die Publisher-ID steht nicht in Ihrem Code, also rät er nie eine.
- Erinnert Sie daran, die Website als Entwickler-Website im Store-Eintrag einzutragen.
- AdMob hat app-ads.txt-Dateien auf unseren Adressen verifiziert; geben Sie AdMob bis zu 24 Stunden für den Crawl.
Die Seiten mit dem Build synchron halten
> Add the AppFoyer drift check - Jeder Lauf von „make this app store-ready“ schreibt appfoyer.json in das Wurzelverzeichnis des Repositorys: die SDKs, Datentypen und Berechtigungen, auf deren Grundlage die Seiten geschrieben wurden. Die Datei schreibt derselbe Scanner, den die Prüfung ausführt, nie jemand von Hand.
- Dieser Prompt zeigt einen GitHub-Workflow für die kostenlose appfoyer/check-action und schreibt .github/workflows/appfoyer.yml, wenn Sie zustimmen. Einen bereits vorhandenen überschreibt er nie.
- Ab dann listet jeder Pull Request auf, was er hinzugefügt oder entfernt hat, seit die Seiten geschrieben wurden, mit Datei und Zeile. Ein erneuter Lauf des Plugins aktualisiert die Entwürfe und appfoyer.json.
- Nichts wird für Sie committet. Der Ratgeber zum Synchronhalten Ihrer Datenschutzerklärung enthält die Details und die Einrichtung für andere CI-Systeme.
Prüfen, ohne etwas zu ändern
> Is this app store-ready? - Führt die Checkliste für jede passende App aus und meldet, was fehlt. Schreibt nichts.
- Ein Flavor, für den es noch keine App gibt, wird als fehlend gemeldet.
Die Links in die App einbauen
> Wire the store-ready links into the app - Braucht veröffentlichte Seiten.
- Schlägt einen Diff für die Links zu Datenschutz und Support in Ihrem Einstellungsbildschirm oder Ihren Strings vor. Wendet ihn nur an, wenn Sie zustimmen, und committet nie.
Was Ihren Rechner verlässt
Nur abgeleitete Fakten:
- Name, Plattform und Bundle- oder Application-ID der App;
- die Namen der SDKs und Berechtigungen, die in Ihren Build-Dateien gefunden wurden;
- die Antworten, die Sie bestätigen – Firmenname, Support-E-Mail, Rechtsordnung, Store-URLs;
- der Seitentext, den der Agent entwirft und der in Ihrem Konto als Entwurf gespeichert wird;
- das eigene Symbol der App, einmal über einen Upload-Link zur einmaligen Verwendung gesendet.
Keine andere Datei, nie Quellcode, nie Secrets oder Schlüssel aus dem Repository. Was der Agent sendet, muss eine Datenschutzerklärung ohnehin angeben.
Eine Datei wird in Ihr Repository geschrieben und bleibt dort: appfoyer.json, die Aufzeichnung, auf welcher Grundlage die Seiten geschrieben wurden, erstellt vom im Plugin enthaltenen Scanner. Sie wird nirgendwohin gesendet. Der Agent committet sie nie, und auch sonst nichts – das tun Sie.
Was der Agent nicht kann
Ob es sich über den Browser oder mit einem API-Schlüssel verbindet: Das Plugin hält eine Agent-Berechtigung – Veröffentlichen steht ihm also überhaupt nicht zur Verfügung. Das wird auf dem Server durchgesetzt, nicht durch freundliches Bitten an den Agent:
- Es gibt kein Tool zum Veröffentlichen. Der Agent schreibt Entwürfe; Ihre Live-Seiten ändern sich nicht.
- Zwei Dinge haben keinen Entwurf: das Symbol und die eigene Adresse. Bei einer veröffentlichten App ändern sie die Live-Website sofort, und der Agent sagt Ihnen, wenn er sie gesetzt hat. Eine eigene Adresse, die Sie bereits nutzen, kann er ohne Ihr Ja nicht ersetzen.
- Die REST-Route, die eine Seite veröffentlicht, weist Agent-Berechtigungen grundsätzlich ab – nur mit Sitzung.
- Jede Seite durchläuft beim Veröffentlichen dieselbe Inhaltsprüfung wie eine von Hand geschriebene Änderung.
- Jeder Aufruf des Agents wird im Audit-Log des Kontos mit der Verbindung oder dem Schlüssel festgehalten, von der bzw. dem er kam.
Der schlimmste Fall bei einer kompromittierten Verbindung oder einem kompromittierten Schlüssel sind also Entwürfe zum Verwerfen, ein falsches Symbol oder eine neue Adresse – nicht eine Seite, die in Ihrem Namen öffentlich wird.
Die Tools, die er bekommt
Das Plugin verbindet sich mit einem MCP-Endpunkt, der genau diese bereitstellt:
| Tool | Was es tut | |
|---|---|---|
list_apps | Lesen | Jede App des Kontos mit Slug, öffentlicher URL und ob etwas veröffentlicht ist. |
get_app | Lesen | Eine App: Einstellungen, gespeicherte Fakten zur Datenerhebung und für jede Seite der Live-Text, der Veröffentlichungsstatus und ein ausstehender Entwurf. |
create_app | Schreiben | Legt eine App mit Vorlagenseiten an. Nichts ist öffentlich. |
create_apps | Schreiben | Legt bis zu zehn Apps in einem Aufruf an, eine pro Produkt-Flavor. Jede startet unveröffentlicht. |
update_app | Schreiben | Ändert Einstellungen, die gespeicherten Fakten zur Datenerhebung oder die SDK-Liste. Bearbeitet nie Seitentext. |
set_page | Schreiben | Schreibt den Entwurf für eine Seite. Die Live-Seite bleibt unberührt. |
set_ad_lines | Schreiben | Ersetzt app-ads.txt. Wird nur genutzt, wenn ein Werbe-SDK vorhanden ist und Sie Publisher-IDs angegeben haben. |
get_checklist | Lesen | Die vom Server berechnete Checkliste zur Store-Bereitschaft und welche Seiten noch unveröffentlichte Entwürfe haben. |
get_store_forms | Lesen | Antwortentwürfe für das Data-safety-Formular von Google Play und die App-Privacy-Angaben von Apple, aus den Fakten und der SDK-Liste. In die Console tragen Sie sie selbst ein. |
request_publish | Schreiben | Meldet, dass das Entwerfen fertig ist, und gibt die Prüf-URL zurück. Veröffentlicht nichts. |
set_icon | Schreiben | Gibt eine Upload-URL zur einmaligen Verwendung für das Symbol der App zurück. Sofort live – ein Symbol hat keinen Entwurf. |
check_slug | Lesen | Prüft eine eigene Adresse (Pro und Advanced) nach denselben Regeln wie das Dashboard. |
set_slug | Schreiben | Beansprucht eine eigene Adresse. Sofort live. Ersetzt eine bereits vorhandene nur, wenn Sie zugestimmt haben. |
Wenn etwas schiefgeht
| Symptom | Ursache |
|---|---|
| Die Tools zeigen „needs authentication“ | Die Verbindung wurde nie freigegeben oder wurde getrennt. Führen Sie /mcp aus, wählen Sie appfoyer und dann Authenticate. |
| Die Freigabeseite sagt, die Anfrage könne nicht verwendet werden | Der Link ist abgelaufen oder wurde zweimal geöffnet. Beginnen Sie im Editor neu; es wurde nichts verbunden. |
unauthorized mit einem API-Schlüssel | Der Schlüssel wurde im Dashboard widerrufen oder gehört zu einem anderen Konto. Erstellen Sie einen neuen und exportieren Sie ihn erneut. |
| Veröffentlichen liefert einen Kontingentfehler | Das Limit veröffentlichter Apps Ihres Plans ist ausgeschöpft. Die App und ihre Entwürfe bleiben erhalten – ziehen Sie eine andere App zurück oder upgraden Sie, dann veröffentlichen Sie über den Prüfbildschirm. |
| Ein Entwurf kommt abgelehnt oder zurückgehalten zurück | Die Inhaltsprüfung hat angeschlagen. Die Gründe nennen, was erkannt wurde und wie Sie es beheben; bearbeiten und erneut senden. Öffentlich hat sich nichts geändert. |
Eines ändert das nicht
Die Entwürfe sind aus Ihrem Code vervollständigte Vorlagen, keine Rechtsberatung. Dass ein Agent sie schnell schreibt, macht sie nicht wahr – lesen Sie, was er geschrieben hat, bevor Sie veröffentlichen, besonders die Liste dessen, was Ihre App erhebt. Der Store macht Sie verantwortlich.
Fragen: support@appfoyer.com.