Aller au contenu
AppFoyer
Commencer

Rendre une app prête pour les stores depuis votre agent de code

Votre agent lit l'app qu'il a devant lui — SDK, permissions, bundle id — et rédige chaque page de conformité à partir de ce qu'il trouve. Vous lisez les brouillons et vous les publiez. L'agent, lui, ne le peut pas.

Avant de commencer

Il vous faut Claude Code et un compte AppFoyer. L'offre gratuite suffit : créez-en un. Il n'y a pas de clé à créer — l'agent vous demande de l'autoriser dans le navigateur la première fois qu'il se connecte.

Pas d'agent de code du tout ? Six champs dans le navigateur vous donnent les mêmes cinq pages sans le plugin.

Vous n'utilisez pas Claude Code ? Le plugin en a besoin, mais pas les pages de politique de confidentialité et de conditions : leurs éditeurs dans le tableau de bord proposent un prompt, rempli avec les informations de votre app, que vous lancez dans n'importe quel assistant avant de coller la réponse — reproduit en entier dans le guide de la politique de confidentialité et le guide des conditions.

Installation

claude
/plugin marketplace add appfoyer/claude-plugin
/plugin install appfoyer@appfoyer

Aucun compte n'est nécessaire pour commencer : l'agent lit votre build, montre ce qu'il a trouvé et pose ses questions sur votre machine, et ne vous demande de vous connecter que lorsqu'il y a quelque chose à enregistrer. La première fois qu'il appelle AppFoyer, votre navigateur s'ouvre sur une page d'autorisation : connectez-vous ou créez un compte gratuit, vérifiez le nom et l'adresse vers laquelle le navigateur revient, puis autorisez. Claude Code conserve la connexion et la renouvelle tout seul ; rien n'est copié, rien n'est stocké dans votre shell. Si le navigateur ne s'ouvre pas, lancez /mcp, sélectionnez appfoyer et choisissez Authenticate. Dans l'application de bureau Claude Code, connectez-vous une fois de cette façon depuis un terminal, puis ouvrez-y une nouvelle session : une session déjà en cours ne voit pas la nouvelle connexion. Déconnectez-la sur la page Agent du tableau de bord, et l'appel suivant échoue immédiatement. Claude Code n'actualise pas de lui-même une marketplace tierce : dans /plugin → Marketplaces → appfoyer, choisissez Enable auto-update pour recevoir les nouvelles versions.

Pas de navigateur sur cette machine — un serveur distant, un conteneur, une exécution scriptée ? Utilisez plutôt une clé d'API : créez-en une sous Agent → API key — for CI and headless use, installez le plugin comme ci-dessus pour le workflow, puis ajoutez le serveur une seconde fois avec la clé dans son en-tête :

export APPFOYER_API_KEY=cpk_…
claude mcp add --transport http appfoyer-key https://app.appfoyer.com/mcp --header "Authorization: Bearer $APPFOYER_API_KEY"

Le plugin lit la clé uniquement depuis cette variable d'environnement — le skill ne la voit jamais, et elle ne circule que dans l'en-tête Authorization que remplit Claude Code.

Un autre client MCP — claude.ai, Claude Desktop, Cursor, VS Code — peut se connecter à https://app.appfoyer.com/mcp de la même façon, avec la même page d'autorisation. Il obtient les outils ; le workflow pas à pas qui lit vos fichiers de build est fourni avec le plugin Claude Code.

Quoi dire

Lancez ces prompts dans le dépôt de votre app, pas dans un répertoire vide :

DitesCe qui se passe
Make this app store-ready Analyse les fichiers de build, fait confirmer les informations qu'il n'a pas pu déduire, rédige chaque page, renvoie un lien de relecture.
Is this app store-ready? Audit en lecture seule par rapport à la checklist de conformité. N'écrit rien.
Wire the store-ready links into the app Après la publication : propose les liens de confidentialité et de support dans l'app sous forme de diff que vous relisez.
Add the AppFoyer drift check Propose un workflow GitHub qui signale les pull requests ajoutant un SDK ou une permission que les pages ne couvrent peut-être pas. Comment ça marche.

Exemples

Dites-le avec vos propres mots ; voici les cas que gère le skill.

Une app, premier passage

> Make this app store-ready
  • Liste ce qu'il a trouvé dans les fichiers de build — SDK, permissions, bundle id — chacun avec son fichier et sa ligne.
  • Ne demande que ce qu'il n'a pas trouvé : nom de la société, e-mail de support, juridiction, liens vers les stores. Deux tours au maximum.
  • Crée l'app, importe l'icône depuis le dépôt et rédige les cinq pages.
  • Termine par un lien de relecture. Rien n'est public tant que vous n'y publiez pas.

Le relancer après un changement

> Make this app store-ready
  • Retrouve l'app existante grâce à son application id et compare les nouvelles informations avec celles enregistrées.
  • Ne réécrit que les pages concernées par le changement, par exemple la confidentialité après l'ajout d'un SDK de statistiques.
  • Ne touche ni à l'icône ni à l'adresse, sauf si vous le demandez.

Plusieurs flavors, nommées dans le prompt

> Make com.acme.weather.free and com.acme.weather.pro store-ready
  • Crée deux apps et ne pose aucune question sur la sélection.
  • Lit le dossier, le nom et les dépendances propres à chaque flavor. Un SDK publicitaire utilisé uniquement par la flavor free n'est pas mis dans la politique de confidentialité de la flavor pro.
  • Renvoie un lien de relecture et un tableau des URL de console pour chaque flavor.

Plusieurs flavors, non nommées

> Make this app store-ready
  • Liste les flavors avec leurs application ids, toutes présélectionnées, et vous choisissez celles qui ont un site.
  • Les build types comme debug et staging sont listés comme exclus, pas proposés.

Dimensions marque × environnement

> Make every brand store-ready
  • Liste des combinaisons (brandAProd, brandBProd), pas des flavors isolées.
  • Ne propose que l'environnement de production. dev et qa ne sont jamais publiés sur un store.
  • Lit le nom de l'app dans Gradle (resValue, manifestPlaceholders) ou dans des source sets déplacés quand le build le met là.
  • S'il ne peut pas déterminer si une dimension correspond à des environnements ou à des marques, il demande.

Adresse personnalisée (Pro et Advanced)

> Make this app store-ready
  • Construit l'adresse à partir du nom anglais de l'app, par exemple weather-now.
  • Si elle est prise ou trop proche d'un nom de marque, il essaie la suivante — weather-now-app, acme-weather — cinq fois au maximum, puis vous demande.
  • Avec l'offre gratuite, il garde l'adresse app-… et indique que l'adresse personnalisée vient avec Pro.
  • L'adresse app-… continue de servir le même site.

Changer une adresse que vous utilisez déjà

> Change the address to weather-radar
  • Demande d'abord. L'ancienne adresse personnalisée est libérée immédiatement, et une fiche du store qui la mentionne encore cesse de fonctionner.
  • Ne la change qu'après votre accord.

Mettre à jour l'icône

> Update the app icon
  • Trouve l'icône du lanceur : l'icône Play 512, la plus grande image mipmap, ou l'image marketing de l'AppIcon iOS — celle de la flavor en priorité.
  • Si elle dépasse 512 Ko, il en réduit une copie dans un dossier temporaire. Votre dépôt n'est pas modifié.
  • Vous indique quel fichier il a importé. Sur une app publiée, la nouvelle icône est en ligne immédiatement.

Une app avec de la publicité

> Make this app store-ready. AdMob publisher id pub-0000000000000000
  • Écrit app-ads.txt à partir des lignes que vous fournissez. L'identifiant d'éditeur n'est pas dans votre code, il n'en devine donc jamais un.
  • Vous rappelle d'indiquer le site comme site web du développeur dans la fiche du store.
  • AdMob a vérifié des fichiers app-ads.txt sur nos adresses ; laissez-lui jusqu'à 24 heures pour l'explorer.

Garder les pages synchronisées avec le build

> Add the AppFoyer drift check
  • Chaque passage de “make this app store-ready” écrit appfoyer.json à la racine du dépôt : les SDK, types de données et permissions à partir desquels les pages ont été rédigées. Il est écrit par le même scanner que celui de la vérification, jamais à la main.
  • Ce prompt montre un workflow GitHub pour l'action gratuite appfoyer/check-action et écrit .github/workflows/appfoyer.yml si vous acceptez. Il n'écrase jamais un fichier que vous avez déjà.
  • Dès lors, chaque pull request liste ce qu'elle a ajouté ou retiré depuis la rédaction des pages, avec le fichier et la ligne. Relancer le plugin met à jour les brouillons et appfoyer.json.
  • Rien n'est commité à votre place. Le guide sur la synchronisation de votre politique de confidentialité donne les détails et la configuration pour les autres systèmes de CI.

Vérifier sans rien modifier

> Is this app store-ready?
  • Exécute la checklist pour chaque app correspondante et indique ce qui manque. N'écrit rien.
  • Une flavor qui n'a pas encore d'app est signalée comme manquante.

Mettre les liens dans l'app

> Wire the store-ready links into the app
  • Nécessite des pages publiées.
  • Propose un diff pour les liens de confidentialité et de support dans votre écran de réglages ou vos chaînes. Ne l'applique que si vous acceptez, et ne commite jamais.

Ce qui quitte votre machine

Uniquement des informations déduites :

  • le nom de l'app, sa plateforme et son bundle id ou application id ;
  • les noms des SDK et des permissions trouvés dans vos fichiers de build ;
  • les réponses que vous confirmez — nom de la société, e-mail de support, juridiction, URL des stores ;
  • le texte des pages que rédige l'agent, enregistré sur votre compte comme brouillon ;
  • l'icône de l'app, envoyée une seule fois par un lien d'import à usage unique.

Aucun autre fichier, jamais de code source, jamais de secrets ni de clés trouvés dans le dépôt. Ce qu'envoie l'agent, c'est ce qu'une politique de confidentialité doit de toute façon indiquer.

Un fichier est écrit dans votre dépôt et y reste : appfoyer.json, la trace de ce à partir de quoi les pages ont été rédigées, créé par le scanner fourni avec le plugin. Il n'est envoyé nulle part. L'agent ne le commite jamais, ni quoi que ce soit d'autre — c'est vous qui le faites.

Ce que l'agent ne peut pas faire

Qu'il se connecte par le navigateur ou avec une clé d'API, le plugin détient un identifiant d'agent — la publication ne lui est donc pas accessible du tout. C'est imposé par le serveur, pas en demandant gentiment à l'agent :

  • Il n'existe aucun outil de publication. L'agent écrit des brouillons ; vos pages en ligne ne changent pas.
  • Deux choses n'ont pas de brouillon : l'icône et l'adresse personnalisée. Sur une app publiée, elles modifient le site en ligne immédiatement, et l'agent vous indique quand il les a définies. Il ne peut pas remplacer une adresse personnalisée que vous utilisez déjà sans votre accord.
  • La route REST qui publie une page refuse purement et simplement les identifiants d'agent — session uniquement.
  • Chaque page passe toujours, à la publication, le même contrôle de contenu qu'une modification écrite à la main.
  • Chaque appel de l'agent est consigné dans le journal d'audit du compte, avec la connexion ou la clé qui l'a effectué.

Le pire scénario pour une connexion ou une clé compromise, ce sont donc des brouillons à jeter, une mauvaise icône ou une nouvelle adresse — pas une page rendue publique en votre nom.

Les outils dont il dispose

Le plugin se connecte à un endpoint MCP qui expose exactement ceux-ci :

OutilCe qu'il fait
list_apps Lecture Chaque app du compte, avec son slug, son URL publique, et si quelque chose est publié.
get_app Lecture Une app : réglages, informations enregistrées sur la collecte de données, et pour chaque page le texte en ligne, l'état de publication et le brouillon en attente.
create_app Écriture Crée une app avec des pages modèles. Rien n'est public.
create_apps Écriture Crée jusqu'à dix apps en un appel, une par product flavor. Chacune démarre non publiée.
update_app Écriture Modifie les réglages, les informations enregistrées sur la collecte de données ou la liste des SDK. Ne modifie jamais le texte des pages.
set_page Écriture Écrit le brouillon d'une page. La page en ligne n'est pas touchée.
set_ad_lines Écriture Remplace app-ads.txt. Utilisé uniquement quand un SDK publicitaire est présent et que vous avez fourni des identifiants d'éditeur.
get_checklist Lecture La checklist de préparation aux stores calculée par le serveur, plus les pages qui ont encore des brouillons non publiés.
get_store_forms Lecture Des brouillons de réponses pour le formulaire Data safety de Google Play et les détails App Privacy d'Apple, à partir des informations et de la liste des SDK. C'est vous qui les saisissez dans la console.
request_publish Écriture Signale que la rédaction est terminée et renvoie l'URL de relecture. Ne publie rien.
set_icon Écriture Renvoie une URL d'import à usage unique pour l'icône de l'app. En ligne immédiatement — une icône n'a pas de brouillon.
check_slug Lecture Vérifie une adresse personnalisée (Pro et Advanced) selon les mêmes règles que le tableau de bord.
set_slug Écriture Réserve une adresse personnalisée. En ligne immédiatement. Refuse d'en remplacer une que vous avez déjà, sauf si vous avez donné votre accord.

Quand quelque chose ne va pas

SymptômeCause
Les outils affichent « needs authentication » La connexion n'a jamais été autorisée, ou elle a été déconnectée. Lancez /mcp, sélectionnez appfoyer et choisissez Authenticate.
La page d'autorisation indique que la demande ne peut pas être utilisée Le lien a expiré ou a été ouvert deux fois. Recommencez depuis l'éditeur ; rien n'a été connecté.
unauthorized avec une clé d'API La clé a été révoquée dans le tableau de bord, ou elle appartient à un autre compte. Créez-en une nouvelle et exportez-la à nouveau.
La publication renvoie une erreur de quota La limite d'apps publiées de l'offre est atteinte. L'app et ses brouillons sont conservés — dépubliez une autre app ou changez d'offre, puis publiez depuis l'écran de relecture.
Un brouillon revient refusé ou retenu Le contrôle de contenu a détecté quelque chose. Les raisons indiquent ce qui a été détecté et comment corriger ; modifiez et renvoyez. Rien de public n'a changé.

Une chose que cela ne change pas

Les brouillons sont des modèles complétés à partir de votre code, pas un conseil juridique. Qu'un agent les rédige vite ne les rend pas exacts — lisez ce qu'il a écrit avant de publier, en particulier la liste de ce que collecte votre app. C'est vous que le store tient pour responsable.

Des questions : support@appfoyer.com.