Aller au contenu

Troubleshooting

Pièges connus et écueils d'installation. Complétez cette page au fur et à mesure de vos découvertes.

Mapbox : Error installing MapboxCommon

Pendant l'install pod/gradle :

  • Assurez-vous que ~/.netrc existe avec des identifiants Mapbox valides.
  • Si l'erreur est un 401, définissez MAPBOX_DOWNLOADS_TOKEN dans ~/.gradle/gradle.properties.

Le token Mapbox in-app est une valeur distincte, REACT_APP_MAPBOX_TOKEN, dans le fichier d'env.

La mise à jour firmware BLE ne marche plus après une install neuve

postinstall applique un patch à react-native-nordic-dfu (patches/react-native-nordic-dfu+3.3.0.patch), utilisé par les mises à jour firmware (components/FirmwaresUpdate). Si le DFU se comporte mal, vérifiez que patch-package s'est exécuté :

postinstall = react-native setup-ios-permissions && pod-install && rm -rf ./ios/.xcode.env.local && patch-package

Relancez yarn install pour réappliquer.

yarn install manque de mémoire après avoir édité package.json

Ajouter ou retirer une dépendance force yarn v1 à réconcilier package.json avec yarn.lock, et sur cet arbre cette réconciliation fait exploser le heap Node (>8 Go) ou boucle indéfiniment. Régénérez plutôt le lockfile de zéro :

rm yarn.lock
NODE_OPTIONS=--max-old-space-size=8192 yarn install

Deux mises en garde :

  • Une régénération à froid fait flotter les deps transitives vers la version la plus récente dans la plage. Validez avec yarn jest (la porte CI) avant de committer, et épinglez ce qui dérive trop via le champ resolutions de package.json.
  • Une dep transitive requiert Node ≥ 20 ; sur Node 18, ajoutez --ignore-engines.

Android SDK not found

Sur une nouvelle machine :

yarn setup-sdk

Cela écrit android/local.properties avec sdk.dir=/Users/${USER}/Library/Android/sdkcodé en dur sur un chemin macOS. Sous Linux/Windows ou avec un emplacement SDK personnalisé, éditez ce fichier à la main.

L'app ne démarre pas / mauvais backend

Rien ne tourne sans env sélectionné (react-native-config). Utilisez les scripts préfixés par l'env :

yarn start:development   # réinitialise le cache Metro
yarn android:staging
yarn ios:prod

Note

Noter le script mal orthographié ios:developement (conservé tel quel).

Fichiers d'env : .env.local, .env.development, .env.staging, .env.prod. Les clés requises incluent REACT_APP_GRAPHGQL_URL (sic), les trois clés REACT_APP_BLE_*_UUID, les clés AWS, les clés Stripe et le token Mapbox. Voir release-process.md.

Problèmes de Pods / build iOS

cd ios && pod install        # normal
yarn ios:Pod:Reset           # deintegrate + setup + install
yarn ios:clean               # nucléaire : node_modules + Pods + DerivedData + cache CocoaPods

react-native-permissions est configuré dans postinstall (setup-ios-permissions) — si les prompts de permission se comportent mal, vérifiez que postinstall s'est exécuté.

« Fautes de frappe » porteuses de sens — NE PAS renommer

Elles ressemblent à des bugs mais sont référencées telles quelles dans le code/la config. Les renommer casse les imports ou la résolution de config :

  • REACT_APP_GRAPHGQL_URL (variable d'env — une lettre manquante)
  • src/features/unitPreference/api/queries/GetUnitPreference.graphl.ts (nom de fichier — un q manquant)
  • ios:developement (script package.json)

Le codegen GraphQL échoue ou les types sont périmés

Après avoir modifié une opération GraphQL, régénérez les types et rafraîchissez le schéma :

yarn generate-interfaces:dev   # ou :staging / :prod / :local

Ne jamais éditer src/gql/ à la main — c'est généré.

Échecs de codegen fréquents :

  • « Not all operations have an unique name » — deux documents définissent la même opération (le preset client exige des noms globalement uniques). Renommez ou dédoublonnez l'un. codegen reporte les doublons un par un, donc relancez après chaque correction.
  • Erreur de validation de document (champ/argument inconnu, mauvais type de variable) — l'opération est désynchronisée du schéma backend ; alignez-la (ex. $status: String! → l'enum attendu désormais par le backend).
  • Une opération n'est jamais générée — codegen ne scanne que documents: "src/**/*/*.ts" (fichiers .ts imbriqués). Les opérations dans des .tsx ou des fichiers de premier niveau (ex. gql inline dans src/apollo.tsx) ne sont pas collectées.

Le hook pre-commit a perdu mes changements (lint-staged)

Le hook pre-commit lance lint-staged (eslint + prettier sur les *.ts/*.tsx stagés). Deux pièges :

  • En cas d'échec, il peut laisser votre travail dans un stash. lint-staged stashe les changements non stagés pendant qu'il tourne ; si une tâche échoue ou que le hook est tué, la restauration peut ne pas se faire et vos changements disparaissent de l'arbre de travail. Ils ne sont pas perdus — récupérez-les :
git stash list          # cherchez « lint-staged automatic backup »
git stash apply stash@{0}
  • Les fichiers générés font timeout le hook. Linter les gros fichiers de src/gql/ peut dépasser le timeout du hook. Committez la sortie du codegen avec git commit --no-verify — c'est généré, donc le linter n'apporte rien.

La CI échoue sur une grosse PR

DangerJS fait échouer toute PR de plus de 1500 lignes modifiées (lockfiles et fichiers de test exclus). Découpez les grosses PR. Il échoue aussi sur les secrets détectés et les erreurs dependency-cruiser — voir ci-cd.md.

Le code Realm a l'air utilisé mais ne l'est pas

src/utils/realm/models/ définit des schémas mais realm n'est pas une dépendance et n'est jamais ouvert. Ces classes ne servent que de types TypeScript ; les données offline vivent dans des fichiers JSON via react-native-fs. Ne câblez pas de logique en supposant une base Realm active. Voir architecture.md.