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
~/.netrcexiste avec des identifiants Mapbox valides. - Si l'erreur est un 401, définissez
MAPBOX_DOWNLOADS_TOKENdans~/.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 champresolutionsdepackage.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/sdk — codé 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 — unqmanquant)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
clientexige 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.tsimbriqués). Les opérations dans des.tsxou des fichiers de premier niveau (ex.gqlinline danssrc/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 avecgit 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.