Ce guide explique comment faire de l'application mobile LaraClassifier ou de l'application mobile JobClass votre propre application, connectée à votre site LaraClassifier ou JobClass, puis comment la publier sur Google Play et l'App Store. Les deux applications suivent exactement les mêmes étapes ; les quelques différences sont signalées au fil du texte.

Inutile de connaître React Native : vous modifiez deux fichiers de réglages, remplacez l'icône et lancez quelques commandes. Les applications sont compilées dans le cloud par Expo (EAS Build) : vous n'avez besoin ni d'un Mac pour l'application iOS, ni d'Android Studio.

Où saisir les commandes : dans un terminal ouvert dans le dossier de l'application (celui qui contient brand.json), sauf mention contraire. Sous Windows, utilisez PowerShell ou le Terminal Windows.

Liste de contrôle

Il vous fautOù l'obtenir
LaraClassifier ou JobClass 19.1.13 ou plus récent, en HTTPSVotre site.
Le jeton d'API de votre site (APP_API_TOKEN)Le fichier /.env de votre site.
Node.js 22.13 ou plus récentnodejs.org
Un compte Expo (gratuit)expo.dev/signup
Un compte Google Play Consoleplay.google.com/console
Une adhésion à l'Apple Developer Programdeveloper.apple.com/programs
L'icône de votre application (PNG 1024 × 1024), des captures d'écran, l'URL de votre politique de confidentialitéVous.
Des comptes de test sur votre site, pour vos propres essais et pour les équipes de validation des storesVotre site. JobClass : un candidat (avec un CV) et un employeur (avec une entreprise et une offre).

1. Préparer votre site

  1. Mettez votre site à jour vers LaraClassifier ou JobClass 19.1.13 ou plus récent.
  2. Vérifiez le HTTPS : votre site doit s'ouvrir en https:// avec un certificat valide (non auto-signé). Les applications publiées refusent le HTTP simple.
  3. Récupérez le jeton d'API : ouvrez le fichier /.env à la racine de votre site et copiez la valeur de APP_API_TOKEN. Si la ligne est absente ou vide, ajoutez une longue valeur aléatoire, par exemple :
    APP_API_TOKEN=replace-with-a-long-random-value
    puis videz le cache de configuration depuis Panneau d'administration → Clear cache (ou lancez php artisan config:clear).
  4. Testez l'API depuis votre ordinateur, avec votre propre adresse et votre jeton :
    curl -H "X-AppApiToken: YOUR_TOKEN" -H "Accept: application/json" https://www.your-website.com/api/categories
    Vous devez obtenir une réponse JSON qui commence par {"success":true.
  5. Vérifiez FALLBACK_LOCALE_FOR_DB dans /.env : ce doit être la langue de vos données de catégories et de villes (en général en), sinon les utilisateurs des autres langues voient des listes vides.
  6. JobClass uniquement : vérifiez les types de contrat (job types) et les types de salaire (salary types) de votre panneau d'administration. Le formulaire de publication exige un type de contrat et une période de paie : il faut donc au moins une entrée active de chaque.
Gardez le jeton pour vous. Il est intégré à l'application, donc un utilisateur déterminé pourrait le retrouver, mais ne le publiez ni sur un site ni dans un dépôt public. Tout ce qui est privé exige en plus que l'utilisateur soit connecté et, sur JobClass, les CV ne sont accessibles que par des liens signés temporaires.

2. Installer le projet

  1. Décompressez le package téléchargé et ouvrez un terminal dans le dossier de l'application.
  2. Installez les dépendances :
    npm install

3. Connecter l'application à votre site

Copiez .env.example vers un nouveau fichier nommé .env.local (dans le même dossier) et complétez-le :

EXPO_PUBLIC_API_URL=https://www.your-website.com/api
EXPO_PUBLIC_API_TOKEN=your-app-api-token
EXPO_PUBLIC_DEFAULT_COUNTRY=US
EXPO_PUBLIC_LOCALE=en
RéglageValeur
EXPO_PUBLIC_API_URLL'adresse de votre site suivie de /api, sans barre oblique finale. Utilisez l'adresse exacte de votre site, avec ou sans www, telle qu'elle s'ouvre dans un navigateur.
EXPO_PUBLIC_API_TOKENLe APP_API_TOKEN de votre site.
EXPO_PUBLIC_DEFAULT_COUNTRYPays affiché au premier lancement (code à 2 lettres). Les utilisateurs peuvent le changer.
EXPO_PUBLIC_LOCALELangue utilisée quand la langue du téléphone n'est pas disponible dans l'application.
Astuce : ces valeurs sont intégrées à l'application. Après une modification, relancez avec npx expo start --clear, et recompilez l'application pour les stores.

4. Mettre l'application à vos couleurs

brand.json

Ouvrez brand.json et remplacez les valeurs d'exemple. Voici la version LaraClassifier :

{
  "name": "My Classifieds",
  "slug": "my-classifieds",
  "scheme": "myclassifieds",
  "version": "1.0.0",
  "ios": { "bundleIdentifier": "com.mycompany.classifieds", "buildNumber": "1" },
  "android": { "package": "com.mycompany.classifieds", "versionCode": 1 },
  "colors": {
    "primary": "#141B3D",
    "accent": "#2F54EB",
    "priceTag": "#FFD23F",
    "splashBackground": "#141B3D",
    "dark": { "primary": "#F1F3FB", "accent": "#8099FF" }
  },
  "assets": { ... },
  "social": { ... },
  "eas": { "projectId": "", "owner": "" }
}

Le fichier de JobClass est identique, avec des exemples orientés emploi ("My Jobs", com.mycompany.jobs) et salaryTag à la place de priceTag.

ChampDescription
nameLe nom affiché sous l'icône. Restez court : environ 12 caractères sont visibles sur la plupart des téléphones.
slugNom technique du projet chez Expo. Lettres minuscules, chiffres et tirets.
schemeSchéma de lien de l'application (par exemple myclassifieds:// ou myjobs://). Lettres minuscules uniquement, propre à votre application.
versionVersion affichée dans les stores, par exemple 1.0.0.
ios.bundleIdentifier
android.package
L'identifiant unique de votre application dans les stores, au format de domaine inversé : com.votresociete.votreapp. Il ne pourra plus jamais être changé après la première publication. Ne gardez pas la valeur d'exemple (com.example.classifieds ou com.example.jobs).
ios.buildNumber
android.versionCode
Numéro de build, augmenté à chaque envoi aux stores (voir « Publier des mises à jour » plus bas).
colors.primaryBoutons, filtres sélectionnés et bouton central des onglets (Vendre sur LaraClassifier, Publier sur JobClass).
colors.accentLiens, états actifs et compteurs.
colors.priceTag (LaraClassifier)
colors.salaryTag (JobClass)
L'étiquette de prix des annonces, ou l'étiquette de salaire des offres. La couleur du texte posé sur vos couleurs est choisie automatiquement pour rester lisible.
colors.splashBackgroundFond de l'écran de lancement.
colors.darkCouleurs principale et d'accent en mode sombre. Choisissez des tons clairs, qui restent lisibles sur le fond sombre.
assetsChemins de l'icône, de l'icône adaptative, de l'image de lancement et du favicon (voir ci-dessous), et couleur de fond de l'icône adaptative Android.
socialIdentifiants de connexion Google et Facebook. Laissez-les vides pour masquer ces boutons (voir l'article sur les notifications push, la connexion sociale et les liens).
eas.projectId, eas.ownerRenseignés à l'étape 6.

Icône et écran de lancement

Remplacez les images d'exemple de assets/brand/ en gardant les mêmes noms de fichiers (ou modifiez les chemins dans brand.json) :

FichierTailleContenu
icon.png1024 × 1024L'icône de l'application (iOS et par défaut). Carrée, sans transparence, sans coins arrondis : le téléphone les arrondit lui-même.
adaptive-icon.png1024 × 1024Premier plan de l'icône Android, sur fond transparent. Gardez le logo dans le cercle central de 66 % : Android rogne les bords.
splash.png512 × 512 ou plusLogo affiché sur l'écran de lancement, sur fond transparent, par-dessus colors.splashBackground.
favicon.png64 × 64Icône de la version web (facultative).

5. Tester sur votre téléphone

  1. Installez Expo Go depuis l'App Store ou Google Play et connectez-vous avec votre compte Expo.
  2. Sur votre ordinateur, connectez-vous au même compte et démarrez l'application :
    npx expo login
    npx expo start
  3. Scannez le QR code affiché dans le terminal (avec l'appareil photo sur iPhone, ou depuis Expo Go sur Android). Le téléphone et l'ordinateur doivent être sur le même réseau.
  4. Vérifiez les écrans principaux :
    • LaraClassifier : l'accueil, une recherche et une annonce ; connectez-vous avec un compte de test et publiez une annonce de test avec une photo.
    • JobClass : l'accueil, une recherche et une offre ; connectez-vous avec votre compte candidat de test et postulez avec un CV ; puis connectez-vous avec votre compte employeur de test, publiez une offre de test avec un logo d'entreprise, ouvrez la candidature dans Messages et changez son statut.

Si votre site tourne sur votre ordinateur et n'est pas encore en ligne, suivez d'abord les étapes ci-dessous.

Tester avec un site installé sur votre ordinateur

Votre téléphone ne peut pas ouvrir localhost ni les domaines locaux comme my-site.test ou my-site.local (les hôtes virtuels de MAMP, Laragon, Valet, etc.) : ils n'existent que sur votre ordinateur. Le téléphone joint votre ordinateur par son adresse IP sur votre réseau Wi-Fi, le site doit donc répondre sur cette adresse.

  1. Connectez le téléphone et l'ordinateur au même réseau Wi-Fi. Évitez les réseaux invités : ils empêchent généralement les appareils de communiquer entre eux.
  2. Trouvez l'adresse IP de votre ordinateur sur le réseau :
    SystèmeCommande
    macOSipconfig getifaddr en0 (ou Réglages Système → Wi-Fi → Détails)
    Windowsipconfig, puis relevez l'Adresse IPv4 de votre carte Wi-Fi
    Linuxhostname -I (la première adresse)
    Les exemples ci-dessous utilisent 192.168.1.20 et le port 8000 : remplacez-les par les vôtres.
  3. Dans un terminal ouvert dans le dossier du site, videz la configuration en cache :
    php artisan config:clear
  4. Démarrez le site de façon à ce que le réseau puisse le joindre, avec APP_URL réglé sur l'adresse qu'utilisera le téléphone (le site construit à partir d'elle les adresses des photos, des logos, des pages et des liens vers les CV). Choisissez l'une de ces deux méthodes :
    • Avec php artisan serve : dans le fichier /.env du site, réglez APP_URL=http://192.168.1.20:8000 (notez l'ancienne valeur pour la remettre après les tests), relancez php artisan config:clear, puis démarrez le serveur :
      php artisan serve --host=0.0.0.0 --port=8000
    • Avec le serveur intégré de PHP, sans modifier /.env : placez-vous dans le dossier public du site et transmettez APP_URL au seul serveur :
      cd public
      APP_URL=http://192.168.1.20:8000 php -S 0.0.0.0:8000 ../vendor/laravel/framework/src/Illuminate/Foundation/resources/server.php
      Sous Windows (PowerShell), définissez d'abord la variable :
      cd public
      $env:APP_URL="http://192.168.1.20:8000"
      php -S 0.0.0.0:8000 ../vendor/laravel/framework/src/Illuminate/Foundation/resources/server.php
    Laissez ce terminal ouvert pendant les tests. Si le pare-feu de votre ordinateur demande si PHP peut accepter des connexions entrantes, autorisez-le.
  5. Vérifiez la connexion : ouvrez http://192.168.1.20:8000/api/categories dans le navigateur du téléphone. Un court message JSON (même « You don't have access to this API ») signifie que le téléphone atteint votre site. Si la page ne se charge pas, consultez l'article de dépannage.
  6. Dans le fichier .env.local de l'application, indiquez la même adresse suivie de /api :
    EXPO_PUBLIC_API_URL=http://192.168.1.20:8000/api
  7. Dans un second terminal, ouvert dans le dossier de l'application, démarrez l'application sur votre réseau et scannez le QR code pour l'ouvrir dans Expo Go :
    npx expo start --lan --clear
    Sur iPhone, acceptez quand Expo Go demande à rechercher des appareils sur votre réseau local.
Envoi d'images refusé avec « must be a file of type: . » ? Les deux serveurs ci-dessus utilisent le PHP en ligne de commande de votre ordinateur, qui peut être différent de celui de votre serveur local habituel. Quand le /.env du site contient IMAGE_DRIVER=imagick et que le PHP en ligne de commande n'a pas l'extension Imagick, le site n'accepte plus aucun format d'image. Pendant les tests, réglez IMAGE_DRIVER=gd dans le /.env du site (ou installez Imagick pour le PHP en ligne de commande), lancez php artisan config:clear, puis redémarrez le serveur.
Vous utilisez déjà un serveur local (MAMP, XAMPP, Laragon, Valet, etc.) ? Il convient aussi s'il accepte les connexions venant du réseau : utilisez son adresse IP et son port dans APP_URL et EXPO_PUBLIC_API_URL. Les serveurs qui choisissent le site d'après son nom de domaine (hôtes virtuels) ne répondent souvent pas sur l'adresse IP, ce que les deux méthodes ci-dessus évitent.
Le HTTP simple suffit pour tester dans Expo Go, mais les versions destinées aux stores refusent les adresses en http. Une fois les tests terminés, arrêtez le serveur (Ctrl+C), remettez l'APP_URL d'origine du site si vous l'aviez changé, et réglez EXPO_PUBLIC_API_URL sur votre site en ligne en HTTPS avant de compiler l'application pour les stores.

6. Configurer les builds Expo

  1. Installez l'outil en ligne de commande EAS et connectez-vous :
    npm install --global eas-cli
    eas login
  2. Créez le projet chez Expo :
    eas init
    eas init affiche un identifiant de projet. Copiez-le dans brand.json, avec le nom de votre compte Expo (ou de votre organisation) comme propriétaire :
    "eas": { "projectId": "1a2b3c4d-...", "owner": "your-expo-account" }
    Si eas init propose de modifier automatiquement la configuration de l'application, répondez non : la configuration est générée à partir de brand.json.

Les profils de build sont déjà définis dans eas.json : preview produit un APK Android à installer directement sur les téléphones, production produit les fichiers destinés aux stores.

7. Compiler une version de test

Compilez un APK Android que vous et vos testeurs installez directement, sans passer par les stores :

eas build --platform android --profile preview

À la fin du build (10 à 20 minutes), EAS affiche un lien et un QR code pour télécharger l'APK. Pour tester sur iOS, utilisez TestFlight (voir l'étape 9). Les versions de test reçoivent aussi les notifications push et gèrent la connexion sociale, ce que ne fait pas Expo Go sur Android.

8. Publier sur Google Play

  1. Compilez l'Android App Bundle :
    eas build --platform android --profile production
    Au premier build, EAS crée et conserve la clé de signature de votre application : répondez oui quand il propose de générer un keystore.
  2. Dans la Google Play Console, créez l'application (nom, langue par défaut, application, gratuite).
  3. Complétez la section Contenu de l'application : URL de la politique de confidentialité (la page de confidentialité de votre site), publicités, accès à l'application (fournissez vos comptes de test : les équipes de validation doivent pouvoir se connecter), questionnaire de classification du contenu, public cible et sécurité des données (voir les conseils ci-dessous). Pour JobClass, choisissez la catégorie Business (Entreprise).
  4. Complétez la fiche Play Store : description courte et complète, icône (512 × 512), image de présentation (1024 × 500) et captures d'écran sur téléphone.
  5. Envoyez le build : téléchargez le fichier .aab depuis la page du build EAS et envoyez-le dans Tests → Tests internes (conseillé pour commencer), puis faites-le passer en Production. Une fois la première version envoyée à la main et une clé de compte de service Google configurée, vous pouvez aussi envoyer les builds avec eas submit --platform android (guide Expo).
Les nouveaux comptes Play Console personnels doivent mener un test fermé avec des testeurs pendant un certain temps avant de pouvoir publier en production. Vérifiez l'exigence en vigueur dans votre Play Console.

9. Publier sur l'App Store

  1. Dans App Store Connect, créez l'application avec le même identifiant de bundle que ios.bundleIdentifier dans brand.json.
  2. Compilez l'application iOS :
    eas build --platform ios --profile production
    EAS demande votre compte Apple et crée pour vous les certificats et le profil de provisionnement.
  3. Envoyez le build à App Store Connect :
    eas submit --platform ios
  4. Une fois traité par Apple, le build apparaît dans TestFlight. Installez-le sur votre iPhone avec l'application TestFlight et testez-le.
  5. Complétez la page de l'application : description, mots-clés, catégorie principale (Business pour JobClass), URL d'assistance, URL de la politique de confidentialité, captures d'écran (iPhone 6,9" et 6,5", iPad 13"), réponses App Privacy (confidentialité), classification par âge, et dans App Review Information vos comptes de test (e-mail et mot de passe) avec une note expliquant que l'application est le compagnon de votre site.
  6. Sélectionnez le build et soumettez-le à la validation.

Conseils pour la validation dans les stores

  • Comptes de test : fournissez un compte qui fonctionne, avec quelques annonces et messages (LaraClassifier), ou deux comptes pour montrer les deux côtés de l'application (JobClass) : un candidat avec un CV, et un employeur avec une entreprise, des offres et des candidatures. Une soumission sans connexion fonctionnelle est refusée.
  • Contenu de votre site : les équipes de validation regardent vos annonces ou vos offres. Retirez le contenu de test ou de remplissage (lorem ipsum, faux prix, fausses entreprises, faux salaires) avant de soumettre.
  • Contenu créé par les utilisateurs : Apple et Google exigent des conditions d'utilisation acceptées par les utilisateurs, un moyen de signaler un contenu choquant, un moyen de bloquer les utilisateurs abusifs, et un moyen pour vous de traiter les signalements. L'application a tout cela : acceptation des conditions à l'inscription, Signaler sur chaque annonce ou offre, Bloquer sur les annonces ou offres et dans les conversations, et votre panneau d'administration pour retirer du contenu et bannir des utilisateurs. Vérifiez que votre site a une page de type Terms et une de type Privacy (Panneau d'administration → Pages), et mentionnez ces fonctions dans les notes de validation.
  • Suppression du compte : exigée par les deux stores, disponible dans Compte → Supprimer mon compte.
  • Réponses sur la confidentialité (App Privacy / Sécurité des données) : l'application envoie à votre site les données saisies par l'utilisateur pour fournir le service (nom, e-mail, téléphone, photos, annonces et messages ; sur JobClass, également les informations et logos d'entreprise, les CV et les lettres de motivation). Elle ne contient aucun SDK tiers d'analyse ou de publicité. En tant qu'exploitant du site, vous êtes responsable de ces réponses.
  • Promotion payante sur iOS : Promouvoir n'apparaît que sur Android. Apple impose son propre système d'achat intégré pour les services numériques vendus dans les applications iOS : l'application iOS n'a donc ni paiement ni lien vers un paiement. Ne mentionnez pas les offres premium ni les annonces ou offres d'emploi payantes dans votre description App Store, vos captures d'écran ou vos notes de validation : les utilisateurs iOS les achètent sur le site.
  • Nom et icône : ils doivent vous appartenir. N'utilisez pas le nom ni le logo d'autres marques.

Fiche dans les stores

  • Dites dès les premières lignes ce que l'utilisateur y gagne : acheter et vendre près de chez lui (LaraClassifier), ou trouver un emploi près de chez lui, postuler avec son CV en quelques gestes et suivre ses candidatures, et pour les employeurs, publier des offres et répondre aux candidats où qu'ils soient (JobClass).
  • Montrez les écrans qui donnent envie : l'accueil avec le contenu à la une, une recherche avec filtres, la page d'une annonce ou d'une offre et, pour JobClass, le formulaire de candidature avec un CV et le statut de la candidature dans Messages.
  • Employez les mots-clés que les gens recherchent (petites annonces ou emploi, votre ville ou votre pays, votre niche ou votre secteur) et le nom de votre site.
  • Montrez votre propre marque et du vrai contenu de votre site sur les captures d'écran, pas le nom d'exemple de l'application.

Publier des mises à jour

Pour publier une nouvelle version de votre application (nouvelle version du produit, nouvelle icône, nouvelles couleurs) :

  1. Augmentez les numéros dans brand.json : version (par exemple 1.0.1), ios.buildNumber (par exemple "2") et android.versionCode (par exemple 2). Les stores refusent un numéro de build déjà reçu.
  2. Compilez et soumettez à nouveau (étapes 8 et 9).

Les modifications faites sur votre site (catégories, types de contrat, réglages, langues, contenus) ne demandent pas de mise à jour de l'application.

Passer à une nouvelle version du produit

  1. Gardez une copie de votre brand.json, de .env.local et de assets/brand/, ainsi que de tout fichier que vous avez modifié.
  2. Remplacez les autres fichiers par ceux de la nouvelle version, puis remettez vos fichiers en place.
  3. Lancez npm install, lisez le ChangeLog fourni dans le dossier docs/ du téléchargement (certaines versions exigent un LaraClassifier ou un JobClass plus récent), testez, puis publiez.

Pour aller plus loin

Cet article vous a-t-il été utile ?

Merci pour votre retour !

Besoin d'aide ? Créez un ticket de support

Créer un Ticket