De l'agent Cursor à l'App Store et Google Play : le workflow de bout en bout
Vous avez construit la web app avec l'agent de Cursor, et vous n'avez pas besoin d'une deuxième base de code pour la publier en apps iOS et Android. Apprenez à l'agent le contexte natif avec une seule règle de projet, laissez-le planifier puis exécuter une passe de conformité aux stores, déployez, pointez WebViewGold vers l'URL, compilez et soumettez. Voici toute la séquence, avec le fichier de règle et le prompt.
Dès $109 en paiement unique par plateforme, ou notre équipe s'occupe de tout dès $698.
Garantie d'approbation – ou remboursement sous 14 jours
Aucun codage requis
Paiement unique, mises à jour gratuites
Support humain 24/7
Conçu en Allemagne depuis 2014 · ISO 27001
9:41
Votre app
Votre appDésormais dans votre poche
App Store · Google Play Approuvée
L'objectif : une base de code, trois destinations
Votre projet Cursor continue de vivre à son URL, et deux apps natives le chargent. WebViewGold fournit ces apps sous forme d'un projet Xcode et d'un projet Android Studio prêts à l'emploi. L'écran principal est une WKWebView sur iOS et une Android WebView sur Android, et la coque native ajoute ce qu'un onglet de navigateur ne sait pas faire : notifications push, écran hors ligne, splash screen, feuille de partage native, invites biométriques et, bien sûr, une fiche sur les stores.
L'agent n'écrit donc pas d'app mobile. Il fait en sorte que votre web app se comporte comme une app, et c'est exactement ce que les reviewers vérifient au titre de la guideline 4.2. Gardez bien séparés trois endroits : le dépôt (l'agent y travaille), les projets WebViewGold (une poignée de valeurs dans Config.swift et Config.java) et les consoles des stores (l'agent rédige, vous soumettez).
Étape zéro : une règle de projet que l'agent ne peut pas ignorer
Cursor charge les règles de projet depuis .cursor/rules/, et ces fichiers doivent porter l'extension .mdc ; un simple fichier .md dans ce dossier est ignoré. Enregistrez ceci sous .cursor/rules/native-release.mdc. La règle est volontairement courte et centrée sur la publication ; le modèle de règles Cursor contient la référence complète du pont et une règle limitée aux fichiers d'interface.
markdown
---
description: Native app release context (WebViewGold) and store rules for this repo
alwaysApply: true
---
# This web app also ships as native iOS and Android apps
- Production URL: https://app.example.com (the only URL the native apps load).
Never point anything at localhost, preview deployments or tunnel URLs.
- The apps are WebViewGold shells around this URL. Do not suggest React Native,
Expo, Capacitor or a separate mobile codebase.
- Native app detection: the user agent contains "MyAppNative" (set in WebViewGold).
Use isNativeApp() from src/lib/platform.ts; never sniff the user agent elsewhere.
- Native features are URL schemes, e.g. window.location.href = "registerpush://".
Call them only when isNativeApp() is true and keep a web fallback.
Reference: https://www.webviewgold.com/llms-full.txt (never invent a scheme).
# Store invariants (check them at the end of every task)
- /privacy and /terms exist, have real content, are linked in footer and settings.
- If users can sign up, they can delete their account in the app (server-side).
- If Google or another social login exists, Sign in with Apple is offered too.
- No digital goods sold through Stripe or other external links inside the iOS app.
- Every screen has loading, empty and error states. No dead links, no "coming soon".
- Layout works from 320 px; fixed bars use env(safe-area-inset-*); tap targets >= 44 px.
# Commands
- Dev: npm run dev | Lint: npm run lint | Test: npm test | Build: npm run build
# Done means
Lint, tests and build pass; you checked the change in the browser at 390 px and
320 px width; you listed what I must test on a real phone.
Le workflow, du dépôt jusqu'aux stores
Prévoyez un ou deux jours de votre propre temps ; l'essentiel du délai part dans la création des comptes et la validation.
Committez la règle et vérifiez qu'elle est active
Ajoutez le fichier de règle, committez-le et ouvrez un nouveau chat avec l'agent. Demandez : « Quelles règles de projet s'appliquent à cette conversation ? » Si native-release n'apparaît pas dans la réponse, vérifiez l'extension et le front matter. Si vous utilisez aussi les agents cloud de Cursor ou d'autres outils, reprenez les invariants dans AGENTS.md, que Cursor lit également.
Planifiez la passe de conformité avant toute modification
Passez en mode Plan (Maj+Tab dans le champ du chat fait défiler les modes), collez le prompt ci-dessous et laissez l'agent explorer la base de code et poser ses questions. Ajustez le plan jusqu'à ce qu'il colle à votre stack, enregistrez-le dans le workspace pour qu'il soit versionné avec le code, puis laissez l'agent l'implémenter.
Laissez l'agent vérifier son travail dans le navigateur
L'agent de Cursor peut piloter un navigateur pour prendre des captures d'écran et tester des pages. Demandez-lui d'ouvrir chaque route principale à 390 px et à 320 px de largeur et de décrire ce qu'il a vu. Cela repère les débordements et les boutons masqués bien avant un reviewer, mais ne remplace pas un test de la vraie app sur un téléphone.
Déployez sur l'URL définitive
Déployez sur Vercel, Netlify, Cloudflare Pages ou votre propre serveur et rattachez votre propre domaine. L'URL est compilée dans les apps natives : utilisez donc celle que vous garderez (pourquoi le domaine personnalisé compte). Chargez ensuite directement /privacy et /delete-account pour vous assurer que les routes profondes ne renvoient pas de 404.
Configurez les projets WebViewGold
iOS : dans Config.swift, renseignez host et webviewurl, et placez votre marqueur dans useragent_iphone et useragent_ipad. Android : dans Config.java, renseignez HOST, HOME_URL et USER_AGENT. Avec la connexion Google, ajoutez les URL déclencheuses à google_login_helper_triggers (iOS) et à GOOGLE_LOGIN_HELPER_TRIGGERS (Android). Si votre web app demande l'autorisation push plus tard via registerpush://, réglez askforpushpermissionatfirstrun sur false. Vous pouvez ouvrir ces fichiers dans Cursor et laisser l'agent les modifier ; vérifiez chaque ligne à l'aide de la documentation de configuration iOS.
Compilez et envoyez
Avec un Mac, archivez dans Xcode et envoyez sur App Store Connect, puis générez un App Bundle signé dans Android Studio pour la Play Console. Pas de Mac, ou pas envie d'installer l'un de ces IDE : le Cloud Builder (module complémentaire à paiement unique, $349 par licence) compile les deux apps dans le navigateur et les envoie pour vous.
Fiches, notes pour la validation, soumission
Demandez à l'agent de rédiger à partir du vrai code la politique de confidentialité, les réponses App Privacy et Data safety, la description et les notes pour la validation. Vous les collez dans les consoles, ajoutez de vraies captures d'écran et soumettez. Un nouveau compte Google Play personnel doit mener un test fermé avec des testeurs avant d'obtenir l'accès à la production.
Excellent travail! Je n'ai jamais codé quoi que ce soit, mais j'ai réussi à travailler avec cela. Facile et rapide! Avec une grande aide des créateurs!
Le prompt de conformité aux stores (d'abord en mode Plan)
Écrit pour une app React ou Next.js typique ; l'agent l'adapte à votre stack. Attendez-vous à des questions sur l'endroit où se trouvent les données utilisateur et sur le fournisseur d'authentification que vous utilisez.
À coller dans Cursor en mode Plan, puis à implémenter avec Agent
Cette web app sera aussi publiée sous forme d'apps natives iOS et Android. WebViewGold charge notre URL de production dans une WKWebView (iOS) et une Android WebView. Suivez la règle de projet native-release. Planifiez le travail ci-dessous en commits séparés, demandez-moi avant toute modification qui touche aux paiements ou supprime des données, et terminez par un résumé ainsi qu'une liste des tests que je dois effectuer sur un vrai téléphone.
1. Helper de plateforme : créez src/lib/platform.ts avec isNativeApp() (true quand navigator.userAgent contient "MyAppNative") ainsi que isIOSApp() et isAndroidApp(). Remplacez toutes les autres vérifications du user agent par ce helper.
2. Mise en page mobile : balise meta viewport avec viewport-fit=cover, aucun défilement horizontal de 320 à 1024 px, zones tactiles d'au moins 44 x 44 px, champs de saisie avec une taille de police de 16 px ou plus, padding safe-area sur les en-têtes fixes, les barres d'onglets et les bottom sheets, aucune commande accessible uniquement au survol.
3. Navigation façon app : sur les écrans étroits, les sections principales sont à un tap, il existe toujours un moyen de revenir en arrière, et seuls les liens qui quittent notre domaine s'ouvrent hors de l'app.
4. Mentions légales et compte : de vraies routes /privacy et /terms basées sur ce que le code collecte (vérifiez l'authentification, l'analytics, les paiements, les uploads) ; une action Supprimer le compte dans les réglages qui supprime les données et l'utilisateur d'authentification sur le serveur ; une page publique /delete-account.
5. Connexion : s'il existe une connexion Google, Facebook, GitHub ou un autre login social, ajoutez Sign in with Apple comme option équivalente. N'ouvrez jamais OAuth dans une popup ou une nouvelle fenêtre.
6. États : chargement, vide et erreur avec bouton Réessayer pour chaque chargement de données, une page 404 conviviale, aucun rejet de promesse non géré dans la console.
7. Éléments réservés au web : quand isNativeApp() vaut true, masquez les badges des app stores, les invitations « Téléchargez notre app » et « Ajouter à l'écran d'accueil », les badges de builder et les bandeaux cookies non obligatoires légalement.
8. Paiements : listez chaque endroit qui vend des biens numériques, des abonnements ou des crédits. Ne les modifiez pas ; signalez-les.
9. Vérification : lancez le lint, les tests et le build de production, puis ouvrez chaque route principale dans le navigateur à 390 px et à 320 px et décrivez tout problème que vous voyez encore.
10. Rédigez docs/store/review-notes.md : ce que fait l'app, comment un reviewer se connecte (laissez les identifiants de démo vides pour moi) et quelles fonctionnalités natives il peut essayer.
Quelle fonctionnalité de Cursor fait quoi dans ce workflow
Fonctionnalité Cursor
À utiliser pour
Points de vigilance
Règles de projet (.cursor/rules/*.mdc)
Le contexte natif et les invariants des stores dans chaque exécution de l'agent
Extension .mdc obligatoire ; Cursor recommande de garder chaque règle sous 500 lignes
Mode Plan
Se mettre d'accord sur la passe de conformité avant qu'un seul fichier ne change
Les plans sont enregistrés dans votre dossier personnel, sauf si vous les enregistrez dans le workspace
Contrôle du navigateur par l'agent
Captures d'écran de chaque route aux largeurs d'un téléphone, parcours de l'inscription et de la suppression de compte
Un navigateur desktop à 320 px n'est pas la WebView native ; testez quand même sur un téléphone
Checkpoints
Annuler une exécution de l'agent qui a dérapé
Stockés localement et séparés de Git ; committez avant les grosses exécutions
Cloud Agents
Exécuter en parallèle des tâches de conformité indépendantes, sous forme de branches et de pull requests
Relecture automatique des pull requests selon une checklist des stores
Ignore .cursor/rules ; il lit .cursor/BUGBOT.md
Checklist avant d'appuyer sur Soumettre
Config.swift et Config.java pointent vers le domaine de production, et le marqueur user agent correspond à celui de platform.ts.
En mode avion, l'écran hors ligne de WebViewGold s'affiche, pas une page blanche.
La connexion Google fonctionne dans l'app (déclencheurs du Social Login Helper renseignés), et Sign in with Apple se trouve juste à côté.
La suppression de compte fonctionne de bout en bout avec un compte de test, et le compte de démonstration pour le reviewer figure dans les notes pour la validation.
Si vous utilisez le push, la demande d'autorisation apparaît à un moment pertinent, pas sur le tout premier écran.
Les pièges que rencontrent les utilisateurs de Cursor
L'agent propose une réécriture en Capacitor ou Expo « pour une meilleure expérience mobile ». La règle l'interdit ; répétez-le dans le prompt si cela arrive quand même.
Une URL de déploiement de preview se retrouve dans Config.swift. Seul le domaine de production y a sa place, car le changer plus tard implique un nouveau build pour les stores.
OAuth ouvert avec window.open ou dans une popup. Les WebViews intégrées le bloquent ; laissez le Social Login Helper gérer Google et Facebook.
Une fonctionnalité déclarée « terminée » après une simple vérification sur desktop. Exigez la vérification à 320 px et votre propre test sur téléphone.
Un checkout Stripe pour des crédits ou des abonnements reste visible dans l'app iOS. Décidez d'abord avec le guide Stripe ou achat intégré.
Des clés API dans le bundle client. Demandez à l'agent de chercher des secrets dans le résultat du build de production avant de déployer.
Questions fréquentes
Apple ou Google se soucient-ils que Cursor ait écrit le code ?
Non. Les reviewers examinent le comportement, la complétude, la confidentialité et les paiements. L'éditeur ou l'agent qui a produit le code leur est invisible.
L'agent Cursor peut-il modifier les projets Xcode et Android Studio de WebViewGold ?
Oui, ce sont des dossiers de projet normaux : l'agent peut donc changer des valeurs dans Config.swift et Config.java. Limitez-le à la configuration. La signature, les certificats et les bundle IDs sont plus rapides et plus sûrs à régler vous-même dans Xcode, Android Studio ou le Cloud Builder.
Ai-je besoin d'un Mac ?
Uniquement pour la voie manuelle avec Xcode. Le Cloud Builder de WebViewGold compile et envoie les apps iOS et Android depuis le navigateur : tout le workflow fonctionne donc aussi sous Windows ou Linux.
Faut-il utiliser .cursorrules ou .cursor/rules ?
Utilisez le dossier .cursor/rules avec des fichiers .mdc ; il prend en charge les règles toujours actives et les règles ciblées. Cursor lit aussi AGENTS.md à la racine du projet et dans les sous-dossiers, ce qui est pratique si d'autres outils travaillent sur le même dépôt.
Et si l'app est refusée ?
Collez le texte complet du refus dans un nouveau chat avec l'agent, règle de projet active, et demandez un tri : ce que le reviewer a vu, à quelle guideline cela correspond, la plus petite correction possible et un brouillon de réponse pour le Resolution Center ou la Play Console.
Trois façons de mettre votre app dans les stores
Même résultat, charge de travail différente de votre côté. Les trois formules incluent la garantie d'approbation et le support humain 24/7.
Faites-le vous-même
$109 par plateforme, paiement unique
La licence WebViewGold : un projet Xcode ou Android Studio prêt à l'emploi. Collez votre URL, définissez le nom et l'icône, activez les fonctionnalités, compilez et soumettez. Mises à jour gratuites à vie.
Ni Mac, ni Xcode, ni Android Studio : configurez dans le navigateur, nous compilons les deux apps dans le cloud et les transmettons à App Store Connect et à la Play Console.
Envoyez-nous votre URL et votre icône. Notre équipe configure, compile et livre votre app sous 72 heures, en marque blanche, projets sources inclus. Les deux plateformes pour $1,158.
Les remboursements sont accordés aux conditions indiquées dans notre FAQ : un refus non lié au contenu par Apple et/ou Google, demandé dans les 14 jours suivant l'achat.