L'application Supercoop est développé en React Native. Le projet utilise les langages Typescript (TSX), CSS, Objective-C (projet iOS), et Java (projet Android).
- Yarn - gestionnaire des librairies javascript
- IDE de votre choix (ex. Visual Studio Code)
- Plugin ESLint pour votre IDE (ESLint pour VScode)
Android
- Android Studio - environnement de développement android
- Un appareil Android (>= 4.4)
iOS
- un mac
- Xcode - environnement de développement iOS
- Cocoapods - gestionnaire de dépendances iOS
- Un appareil iOS (>= 9.0)
Bonus (facultatif)
- Genymotion - simulateur android tierce-partie
$ yarn install
ESLint est le linter utilisé dans ce projet. Prettier est le formatteur. Tous deux sont déjà installés en dépendances et configurés (.eslintrs.js
et .prettierrc.js
). Cependant, vous avez besoin d'un plugin ESLint pour votre IDE afin que celui-çi lise la configuration et exécute le formattage.
Suivre la documentation d'installation d'environnement: https://reactnative.dev/docs/environment-setup
Ouvrir ensuite le dossier ./android
avec Android Studio.
Tout comme pour iOS, Android nécessite des librairies natives. Elle sont gérées par Gradle (intégré à Android Studio). Ces librairies sont locales (dans node_modules/) mais doivent être installée/synchronisée. Grâce à Gradle, les versions des librairies natives sont gérées automatiquement.
Une fois Genymotion installé (compte créé et identification effectuée), créer un nouveau terminal virtuel. Choisir par exemple un Samsung Galaxy S9 sous android 8.0 et laisser les paramètres par défaut.
Pour pouvoir utiliser l'application en mode dev sur votre périphérique Android, vous devez le passer en mode Développeur : sur votre smartphone android, rendez-vous dans l'application Paramètres > À propos du téléphone puis tapez 10 fois sur la ligne "Numéro de build".
Dans les paramètres, aller ensuite dans la section "Options pour développeurs" et activer le "Débogage USB".
Sur votre PC, exécuter en CLI la commande adb reverse tcp:8081 tcp8081
afin que le périphérique android puisse se connecter au serveur "Metro".
Suivre la documentation d'installation d'environnement: https://reactnative.dev/docs/environment-setup
Ouvrir ensuite le fichier ./ios/Supercoop.xcworkspace
avec Xcode.
Tout comme pour Android, des librairies natives doivent être ajoutés au projet. Nous utilisons pour l'instant le gestionnaire de librairies [Cocoapods](https://cocoapods.org/)
. Tout comme pour Android, elles sont disponibles localement avec les librairies Javascript (dans node_modules) mais doivent tout de même être installées/synchronisées après chaque mise à jour de librairie Javascript.
cd ios/
bundle exec pod update
Les messages de commit doivent respecter la Conventional Commits specification
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
La configuration de l'application (endpoint/identifiants Odoo, endpoint/paramètres OpenId Connect, ...) sont externalisé à l'application et sont disponible grâce à la mécanique dotenv
:
Recopier le fichier .env.dist
en fichier .env
et y insérer les valeurs en face des variables.
Pour plus de détails et pour utiliser les fonctionnalités avancées de ce système, voir [react-native-config](https://github.com/luggit/react-native-config)
Le versioning de l'application suit la méthode Semantic Versioning (MAJOR.MINOR.PATCH) où le chiffre MAJOR est fixé à 1 jusqu'à une réécriture complète de l'app.
MINOR est augmenté à chaque nouvelle fonctionnalité significative.
PATCH est augmenté à chaque mise à jour de bugs uniquement.
Le cycle de mise en prod de l'app doit systématiquement passer par une phase Beta. Chez Apple, cela s'appelle "Testflight", chez Google cela s'appelle simplement "Programme beta".
Il est possible de s'en occuper manuellement en suivant les procédures des deux plateformes.
-
Récupérer le fichier AppBundle généré par Android Studio pour le Play Store (généralement
app-release.aab
) -
Télécharger l'outil bundletool et exécuter la commande suivante :
java -jar bundletool-all-1.3.0.jar build-apks --bundle=app-release.aab --output=app-release.apks --overwrite --mode=universal --ks=/path/to/project/android/keystores/release.keystore --ks-pass=pass:my-keystore-password --ks-key-alias=sp_release --key-pass=pass:my-key-password
-
Changer l'extension du fichier
app-release.apks
en.zip
. Dézipper et distribuer le fichieruniversal.apk
.
Une entité a évolué et donc le schéma SQL aussi ? Il faut créer un nouveau script de migration SQL. Il sera créé dans ./src/migrations
.
$ ./node_modules/.bin/ts-node ./node_modules/.bin/typeorm migration:run
$ ./node_modules/.bin/ts-node ./node_modules/.bin/typeorm migration:generate -n '<Nom>'
Ajouter la classe fraîchement créée ('<Nom><Timestamp>
') dans Database.ts, dans la méthode createConnexion()
de la méthode connect()
.
Les pull request sont les bienvenues. Pour des changements majeurs, merci d'ouvrir une issue d'abord afin de discuter des changements que vous souhaiteriez effectuer.
Merci de mettre à jour les tests appropriés (le cas échéant).