Add deployment guide, contributing guidelines and changelog
- Add DEPLOYMENT.md with complete deployment instructions - Add CONTRIBUTING.md for contributors - Add CHANGELOG.md to track versions - Add .env.example for environment variables
This commit is contained in:
13
.env.example
Normal file
13
.env.example
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# Firebase Configuration
|
||||||
|
# Copiez ce fichier en .env et remplissez avec vos vraies valeurs
|
||||||
|
# Ne commitez JAMAIS le fichier .env dans Git !
|
||||||
|
|
||||||
|
FIREBASE_API_KEY=your_api_key_here
|
||||||
|
FIREBASE_AUTH_DOMAIN=your_project_id.firebaseapp.com
|
||||||
|
FIREBASE_PROJECT_ID=your_project_id
|
||||||
|
FIREBASE_STORAGE_BUCKET=your_project_id.appspot.com
|
||||||
|
FIREBASE_MESSAGING_SENDER_ID=your_messaging_sender_id
|
||||||
|
FIREBASE_APP_ID=your_app_id
|
||||||
|
|
||||||
|
# Expo Configuration (optionnel)
|
||||||
|
EXPO_PUBLIC_API_URL=https://api.wallettracker.com
|
||||||
132
CHANGELOG.md
Normal file
132
CHANGELOG.md
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
Toutes les modifications notables de ce projet seront documentées dans ce fichier.
|
||||||
|
|
||||||
|
Le format est basé sur [Keep a Changelog](https://keepachangelog.com/fr/1.0.0/),
|
||||||
|
et ce projet adhère au [Semantic Versioning](https://semver.org/lang/fr/).
|
||||||
|
|
||||||
|
## [Non publié]
|
||||||
|
|
||||||
|
### À venir
|
||||||
|
- Notifications push pour les rappels d'abonnements
|
||||||
|
- Mode sombre
|
||||||
|
- Export des données en CSV/PDF
|
||||||
|
- Objectifs budgétaires mensuels
|
||||||
|
- Support multilingue (EN, ES)
|
||||||
|
- Widgets pour l'écran d'accueil
|
||||||
|
- Reconnaissance de tickets avec OCR
|
||||||
|
|
||||||
|
## [1.0.0] - 2025-10-23
|
||||||
|
|
||||||
|
### Ajouté
|
||||||
|
- **Authentification**
|
||||||
|
- Inscription avec email et mot de passe
|
||||||
|
- Connexion sécurisée via Firebase Auth
|
||||||
|
- Déconnexion
|
||||||
|
- Persistance de session avec AsyncStorage
|
||||||
|
- Gestion des erreurs d'authentification en français
|
||||||
|
|
||||||
|
- **Dashboard**
|
||||||
|
- Vue d'ensemble mensuelle du budget
|
||||||
|
- Affichage du solde actuel (revenus - dépenses)
|
||||||
|
- Statistiques mensuelles (total revenus, total dépenses)
|
||||||
|
- Liste des 5 dernières transactions
|
||||||
|
- Boutons d'action rapide pour ajouter dépense/revenu
|
||||||
|
- Pull-to-refresh pour actualiser les données
|
||||||
|
|
||||||
|
- **Gestion des transactions**
|
||||||
|
- Ajout de dépenses et revenus
|
||||||
|
- Sélection de catégorie avec icônes
|
||||||
|
- Ajout de notes optionnelles
|
||||||
|
- Affichage de la liste complète des transactions
|
||||||
|
- Tri par date (plus récentes en premier)
|
||||||
|
- Synchronisation temps réel avec Firestore
|
||||||
|
|
||||||
|
- **Gestion des abonnements**
|
||||||
|
- Ajout d'abonnements récurrents
|
||||||
|
- Fréquences supportées : quotidien, hebdomadaire, mensuel, annuel
|
||||||
|
- Calcul automatique de la prochaine date de paiement
|
||||||
|
- Affichage du nombre de jours avant prélèvement
|
||||||
|
- Mise en évidence des abonnements proches (< 3 jours)
|
||||||
|
- Calcul du total mensuel des abonnements
|
||||||
|
|
||||||
|
- **Analyses et statistiques**
|
||||||
|
- Graphique en camembert par catégorie
|
||||||
|
- Basculement entre dépenses et revenus
|
||||||
|
- Sélection du mois à analyser
|
||||||
|
- Statistiques détaillées par catégorie (montant, nombre, pourcentage)
|
||||||
|
- Affichage du total mensuel
|
||||||
|
|
||||||
|
- **Catégories**
|
||||||
|
- 10 catégories de dépenses par défaut
|
||||||
|
- 5 catégories de revenus par défaut
|
||||||
|
- Icônes et couleurs personnalisées
|
||||||
|
- Initialisation automatique au premier usage
|
||||||
|
|
||||||
|
- **Navigation**
|
||||||
|
- Bottom tabs avec 4 onglets principaux
|
||||||
|
- Navigation fluide entre les écrans
|
||||||
|
- Indicateurs visuels pour l'onglet actif
|
||||||
|
|
||||||
|
- **Composants réutilisables**
|
||||||
|
- Button : Bouton personnalisable avec variantes
|
||||||
|
- InputText : Champ de saisie avec validation
|
||||||
|
- TransactionCard : Carte d'affichage de transaction
|
||||||
|
- SubscriptionCard : Carte d'affichage d'abonnement
|
||||||
|
|
||||||
|
- **Services Firebase**
|
||||||
|
- authService : Gestion de l'authentification
|
||||||
|
- transactionService : CRUD des transactions
|
||||||
|
- subscriptionService : CRUD des abonnements
|
||||||
|
- categoryService : Gestion des catégories
|
||||||
|
|
||||||
|
- **Utilitaires**
|
||||||
|
- Helpers : Fonctions de formatage et validation
|
||||||
|
- Constants : Couleurs, espacements, messages
|
||||||
|
- Sample data : Générateur de données de test
|
||||||
|
|
||||||
|
- **Documentation**
|
||||||
|
- README.md complet
|
||||||
|
- QUICKSTART.md pour démarrage rapide
|
||||||
|
- FIREBASE_SETUP.md pour configuration Firebase
|
||||||
|
- TESTING.md avec checklist de tests
|
||||||
|
- DEPLOYMENT.md pour le déploiement
|
||||||
|
- CONTRIBUTING.md pour les contributions
|
||||||
|
|
||||||
|
- **Sécurité**
|
||||||
|
- Règles Firestore pour protéger les données
|
||||||
|
- Validation côté client et serveur
|
||||||
|
- Stockage sécurisé des tokens
|
||||||
|
|
||||||
|
### Technique
|
||||||
|
- React Native 0.81.5
|
||||||
|
- Expo SDK 54
|
||||||
|
- TypeScript 5.9
|
||||||
|
- Firebase 12.4
|
||||||
|
- React Navigation 7
|
||||||
|
- React Native Chart Kit 6.12
|
||||||
|
|
||||||
|
## [0.1.0] - 2025-10-23
|
||||||
|
|
||||||
|
### Ajouté
|
||||||
|
- Configuration initiale du projet Expo
|
||||||
|
- Structure de base des dossiers
|
||||||
|
- Configuration TypeScript
|
||||||
|
- Installation des dépendances
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Types de changements
|
||||||
|
|
||||||
|
- `Ajouté` pour les nouvelles fonctionnalités
|
||||||
|
- `Modifié` pour les changements aux fonctionnalités existantes
|
||||||
|
- `Déprécié` pour les fonctionnalités bientôt supprimées
|
||||||
|
- `Supprimé` pour les fonctionnalités supprimées
|
||||||
|
- `Corrigé` pour les corrections de bugs
|
||||||
|
- `Sécurité` pour les vulnérabilités corrigées
|
||||||
|
|
||||||
|
## Liens
|
||||||
|
|
||||||
|
- [Non publié]: https://github.com/yourusername/wallettracker/compare/v1.0.0...HEAD
|
||||||
|
- [1.0.0]: https://github.com/yourusername/wallettracker/releases/tag/v1.0.0
|
||||||
|
- [0.1.0]: https://github.com/yourusername/wallettracker/releases/tag/v0.1.0
|
||||||
381
CONTRIBUTING.md
Normal file
381
CONTRIBUTING.md
Normal file
@@ -0,0 +1,381 @@
|
|||||||
|
# 🤝 Guide de contribution - WalletTracker
|
||||||
|
|
||||||
|
Merci de votre intérêt pour contribuer à WalletTracker ! Ce guide vous aidera à démarrer.
|
||||||
|
|
||||||
|
## 📋 Table des matières
|
||||||
|
|
||||||
|
- [Code de conduite](#code-de-conduite)
|
||||||
|
- [Comment contribuer](#comment-contribuer)
|
||||||
|
- [Structure du projet](#structure-du-projet)
|
||||||
|
- [Standards de code](#standards-de-code)
|
||||||
|
- [Process de développement](#process-de-développement)
|
||||||
|
- [Soumettre une Pull Request](#soumettre-une-pull-request)
|
||||||
|
|
||||||
|
## Code de conduite
|
||||||
|
|
||||||
|
En participant à ce projet, vous acceptez de respecter notre code de conduite :
|
||||||
|
|
||||||
|
- Soyez respectueux et inclusif
|
||||||
|
- Acceptez les critiques constructives
|
||||||
|
- Concentrez-vous sur ce qui est le mieux pour la communauté
|
||||||
|
- Faites preuve d'empathie envers les autres membres
|
||||||
|
|
||||||
|
## Comment contribuer
|
||||||
|
|
||||||
|
### Signaler un bug
|
||||||
|
|
||||||
|
1. Vérifiez que le bug n'a pas déjà été signalé dans les [Issues](https://github.com/yourusername/wallettracker/issues)
|
||||||
|
2. Créez une nouvelle issue avec le template "Bug Report"
|
||||||
|
3. Incluez :
|
||||||
|
- Description claire du problème
|
||||||
|
- Steps to reproduce
|
||||||
|
- Comportement attendu vs actuel
|
||||||
|
- Screenshots si applicable
|
||||||
|
- Version de l'app et de l'OS
|
||||||
|
|
||||||
|
### Proposer une fonctionnalité
|
||||||
|
|
||||||
|
1. Vérifiez que la fonctionnalité n'a pas déjà été proposée
|
||||||
|
2. Créez une issue avec le template "Feature Request"
|
||||||
|
3. Expliquez :
|
||||||
|
- Le problème que cela résout
|
||||||
|
- La solution proposée
|
||||||
|
- Des alternatives considérées
|
||||||
|
- Des mockups si applicable
|
||||||
|
|
||||||
|
### Contribuer au code
|
||||||
|
|
||||||
|
1. Fork le projet
|
||||||
|
2. Créez une branche pour votre fonctionnalité (`git checkout -b feature/AmazingFeature`)
|
||||||
|
3. Committez vos changements (`git commit -m 'Add some AmazingFeature'`)
|
||||||
|
4. Push vers la branche (`git push origin feature/AmazingFeature`)
|
||||||
|
5. Ouvrez une Pull Request
|
||||||
|
|
||||||
|
## Structure du projet
|
||||||
|
|
||||||
|
```
|
||||||
|
WalletTracker/
|
||||||
|
├── src/
|
||||||
|
│ ├── components/ # Composants réutilisables
|
||||||
|
│ ├── config/ # Configuration (Firebase, etc.)
|
||||||
|
│ ├── hooks/ # Custom hooks
|
||||||
|
│ ├── navigation/ # Configuration de navigation
|
||||||
|
│ ├── screens/ # Écrans de l'application
|
||||||
|
│ ├── services/ # Services (API, Firebase)
|
||||||
|
│ ├── types/ # Types TypeScript
|
||||||
|
│ └── utils/ # Fonctions utilitaires
|
||||||
|
├── assets/ # Images, fonts, etc.
|
||||||
|
└── App.tsx # Point d'entrée
|
||||||
|
```
|
||||||
|
|
||||||
|
## Standards de code
|
||||||
|
|
||||||
|
### TypeScript
|
||||||
|
|
||||||
|
- Utilisez TypeScript strict
|
||||||
|
- Définissez des types explicites
|
||||||
|
- Évitez `any`, utilisez `unknown` si nécessaire
|
||||||
|
- Utilisez des interfaces pour les objets
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
// ✅ Bon
|
||||||
|
interface User {
|
||||||
|
id: string;
|
||||||
|
email: string;
|
||||||
|
displayName?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ❌ Mauvais
|
||||||
|
const user: any = { ... };
|
||||||
|
```
|
||||||
|
|
||||||
|
### Naming Conventions
|
||||||
|
|
||||||
|
- **Composants** : PascalCase (`LoginScreen`, `Button`)
|
||||||
|
- **Fonctions** : camelCase (`formatCurrency`, `getUserData`)
|
||||||
|
- **Constantes** : UPPER_SNAKE_CASE (`API_URL`, `MAX_RETRIES`)
|
||||||
|
- **Fichiers** : Même nom que le composant principal
|
||||||
|
|
||||||
|
### Composants React
|
||||||
|
|
||||||
|
- Utilisez des functional components avec hooks
|
||||||
|
- Déstructurez les props
|
||||||
|
- Utilisez TypeScript pour typer les props
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
// ✅ Bon
|
||||||
|
interface ButtonProps {
|
||||||
|
title: string;
|
||||||
|
onPress: () => void;
|
||||||
|
variant?: 'primary' | 'secondary';
|
||||||
|
}
|
||||||
|
|
||||||
|
export const Button: React.FC<ButtonProps> = ({ title, onPress, variant = 'primary' }) => {
|
||||||
|
return (
|
||||||
|
<TouchableOpacity onPress={onPress}>
|
||||||
|
<Text>{title}</Text>
|
||||||
|
</TouchableOpacity>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
### Styles
|
||||||
|
|
||||||
|
- Utilisez StyleSheet.create()
|
||||||
|
- Groupez les styles par composant
|
||||||
|
- Utilisez les constantes pour les couleurs et espacements
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
import { COLORS, SPACING } from '../utils/constants';
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
container: {
|
||||||
|
padding: SPACING.lg,
|
||||||
|
backgroundColor: COLORS.white
|
||||||
|
}
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
### Imports
|
||||||
|
|
||||||
|
Organisez les imports dans cet ordre :
|
||||||
|
|
||||||
|
1. React et React Native
|
||||||
|
2. Bibliothèques tierces
|
||||||
|
3. Composants locaux
|
||||||
|
4. Services et utils
|
||||||
|
5. Types
|
||||||
|
6. Styles
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
import React, { useState, useEffect } from 'react';
|
||||||
|
import { View, Text } from 'react-native';
|
||||||
|
import { useNavigation } from '@react-navigation/native';
|
||||||
|
|
||||||
|
import { Button } from '../components/Button';
|
||||||
|
import { authService } from '../services/authService';
|
||||||
|
import { formatDate } from '../utils/helpers';
|
||||||
|
import { User } from '../types';
|
||||||
|
|
||||||
|
import styles from './styles';
|
||||||
|
```
|
||||||
|
|
||||||
|
### Commentaires
|
||||||
|
|
||||||
|
- Commentez le "pourquoi", pas le "quoi"
|
||||||
|
- Utilisez JSDoc pour les fonctions publiques
|
||||||
|
- Évitez les commentaires évidents
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
/**
|
||||||
|
* Calcule la prochaine date de paiement basée sur la fréquence
|
||||||
|
* @param currentDate - Date actuelle du paiement
|
||||||
|
* @param frequency - Fréquence de l'abonnement
|
||||||
|
* @returns La prochaine date de paiement
|
||||||
|
*/
|
||||||
|
export const calculateNextPaymentDate = (
|
||||||
|
currentDate: Date,
|
||||||
|
frequency: SubscriptionFrequency
|
||||||
|
): Date => {
|
||||||
|
// ...
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
## Process de développement
|
||||||
|
|
||||||
|
### 1. Setup
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/yourusername/wallettracker.git
|
||||||
|
cd wallettracker
|
||||||
|
npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Créer une branche
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git checkout -b feature/nom-de-la-fonctionnalite
|
||||||
|
```
|
||||||
|
|
||||||
|
Types de branches :
|
||||||
|
- `feature/` : Nouvelle fonctionnalité
|
||||||
|
- `fix/` : Correction de bug
|
||||||
|
- `refactor/` : Refactoring
|
||||||
|
- `docs/` : Documentation
|
||||||
|
- `test/` : Tests
|
||||||
|
|
||||||
|
### 3. Développer
|
||||||
|
|
||||||
|
- Écrivez du code propre et testé
|
||||||
|
- Suivez les standards de code
|
||||||
|
- Testez sur iOS et Android
|
||||||
|
- Vérifiez qu'il n'y a pas d'erreurs TypeScript
|
||||||
|
|
||||||
|
### 4. Tester
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Lancer l'app
|
||||||
|
npm start
|
||||||
|
|
||||||
|
# Vérifier TypeScript
|
||||||
|
npx tsc --noEmit
|
||||||
|
|
||||||
|
# Linter (si configuré)
|
||||||
|
npm run lint
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. Committer
|
||||||
|
|
||||||
|
Utilisez des messages de commit clairs :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git commit -m "feat: add dark mode support"
|
||||||
|
git commit -m "fix: resolve crash on transaction deletion"
|
||||||
|
git commit -m "docs: update README with new features"
|
||||||
|
```
|
||||||
|
|
||||||
|
Format des commits :
|
||||||
|
- `feat:` Nouvelle fonctionnalité
|
||||||
|
- `fix:` Correction de bug
|
||||||
|
- `docs:` Documentation
|
||||||
|
- `style:` Formatage, pas de changement de code
|
||||||
|
- `refactor:` Refactoring
|
||||||
|
- `test:` Ajout de tests
|
||||||
|
- `chore:` Maintenance
|
||||||
|
|
||||||
|
## Soumettre une Pull Request
|
||||||
|
|
||||||
|
### Checklist avant soumission
|
||||||
|
|
||||||
|
- [ ] Le code compile sans erreurs
|
||||||
|
- [ ] Les tests passent
|
||||||
|
- [ ] Le code suit les standards du projet
|
||||||
|
- [ ] La documentation est à jour
|
||||||
|
- [ ] Les commits sont bien formatés
|
||||||
|
- [ ] La PR a une description claire
|
||||||
|
|
||||||
|
### Template de PR
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
## Description
|
||||||
|
Brève description des changements
|
||||||
|
|
||||||
|
## Type de changement
|
||||||
|
- [ ] Bug fix
|
||||||
|
- [ ] Nouvelle fonctionnalité
|
||||||
|
- [ ] Breaking change
|
||||||
|
- [ ] Documentation
|
||||||
|
|
||||||
|
## Comment tester
|
||||||
|
1. Étape 1
|
||||||
|
2. Étape 2
|
||||||
|
3. Résultat attendu
|
||||||
|
|
||||||
|
## Screenshots (si applicable)
|
||||||
|
[Ajouter des screenshots]
|
||||||
|
|
||||||
|
## Checklist
|
||||||
|
- [ ] Code testé sur iOS
|
||||||
|
- [ ] Code testé sur Android
|
||||||
|
- [ ] Documentation mise à jour
|
||||||
|
- [ ] Pas de console.log
|
||||||
|
```
|
||||||
|
|
||||||
|
### Review process
|
||||||
|
|
||||||
|
1. Un mainteneur reviewera votre PR
|
||||||
|
2. Des changements peuvent être demandés
|
||||||
|
3. Une fois approuvée, la PR sera mergée
|
||||||
|
4. Votre contribution sera ajoutée au CHANGELOG
|
||||||
|
|
||||||
|
## 🎨 Design Guidelines
|
||||||
|
|
||||||
|
### UI/UX
|
||||||
|
|
||||||
|
- Suivez les guidelines Material Design (Android) et Human Interface (iOS)
|
||||||
|
- Utilisez des animations fluides
|
||||||
|
- Assurez l'accessibilité (contraste, taille de texte)
|
||||||
|
- Testez sur différentes tailles d'écran
|
||||||
|
|
||||||
|
### Couleurs
|
||||||
|
|
||||||
|
Utilisez les couleurs définies dans `src/utils/constants.ts`
|
||||||
|
|
||||||
|
### Espacements
|
||||||
|
|
||||||
|
Utilisez les espacements standardisés (8, 12, 16, 24, 32px)
|
||||||
|
|
||||||
|
## 🧪 Tests
|
||||||
|
|
||||||
|
### Tests manuels
|
||||||
|
|
||||||
|
Utilisez le guide dans `TESTING.md`
|
||||||
|
|
||||||
|
### Tests automatisés (à venir)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📝 Documentation
|
||||||
|
|
||||||
|
- Mettez à jour le README si nécessaire
|
||||||
|
- Documentez les nouvelles fonctionnalités
|
||||||
|
- Ajoutez des exemples d'utilisation
|
||||||
|
- Mettez à jour le CHANGELOG
|
||||||
|
|
||||||
|
## 🐛 Debugging
|
||||||
|
|
||||||
|
### Outils utiles
|
||||||
|
|
||||||
|
- React Native Debugger
|
||||||
|
- Flipper
|
||||||
|
- Reactotron
|
||||||
|
- Firebase Console
|
||||||
|
|
||||||
|
### Logs
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
// Développement
|
||||||
|
console.log('Debug info');
|
||||||
|
|
||||||
|
// Production
|
||||||
|
// Utilisez un service de logging (Sentry, etc.)
|
||||||
|
```
|
||||||
|
|
||||||
|
## 💡 Bonnes pratiques
|
||||||
|
|
||||||
|
### Performance
|
||||||
|
|
||||||
|
- Utilisez `React.memo` pour les composants lourds
|
||||||
|
- Évitez les re-renders inutiles
|
||||||
|
- Optimisez les images
|
||||||
|
- Utilisez FlatList pour les longues listes
|
||||||
|
|
||||||
|
### Sécurité
|
||||||
|
|
||||||
|
- Ne hardcodez jamais de secrets
|
||||||
|
- Validez toutes les entrées utilisateur
|
||||||
|
- Utilisez HTTPS uniquement
|
||||||
|
- Suivez les règles de sécurité Firebase
|
||||||
|
|
||||||
|
### Accessibilité
|
||||||
|
|
||||||
|
- Ajoutez des labels accessibles
|
||||||
|
- Testez avec VoiceOver/TalkBack
|
||||||
|
- Assurez un contraste suffisant
|
||||||
|
- Supportez les grandes tailles de texte
|
||||||
|
|
||||||
|
## 🆘 Besoin d'aide ?
|
||||||
|
|
||||||
|
- Consultez la [documentation](./README.md)
|
||||||
|
- Posez vos questions dans les [Discussions](https://github.com/yourusername/wallettracker/discussions)
|
||||||
|
- Rejoignez notre [Discord](https://discord.gg/wallettracker) (si applicable)
|
||||||
|
|
||||||
|
## 🙏 Remerciements
|
||||||
|
|
||||||
|
Merci à tous les contributeurs qui rendent ce projet possible !
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Happy coding! 🚀**
|
||||||
341
DEPLOYMENT.md
Normal file
341
DEPLOYMENT.md
Normal file
@@ -0,0 +1,341 @@
|
|||||||
|
# 🚀 Guide de déploiement - WalletTracker
|
||||||
|
|
||||||
|
Ce guide explique comment déployer WalletTracker en production.
|
||||||
|
|
||||||
|
## Prérequis
|
||||||
|
|
||||||
|
- Compte Expo (gratuit) : https://expo.dev/
|
||||||
|
- EAS CLI installé : `npm install -g eas-cli`
|
||||||
|
- Compte développeur Apple (pour iOS) ou Google Play (pour Android)
|
||||||
|
|
||||||
|
## Étape 1 : Configuration EAS
|
||||||
|
|
||||||
|
### Installer EAS CLI
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm install -g eas-cli
|
||||||
|
```
|
||||||
|
|
||||||
|
### Se connecter à Expo
|
||||||
|
|
||||||
|
```bash
|
||||||
|
eas login
|
||||||
|
```
|
||||||
|
|
||||||
|
### Initialiser EAS Build
|
||||||
|
|
||||||
|
```bash
|
||||||
|
eas build:configure
|
||||||
|
```
|
||||||
|
|
||||||
|
Cela créera un fichier `eas.json` avec la configuration de build.
|
||||||
|
|
||||||
|
## Étape 2 : Configurer les variables d'environnement
|
||||||
|
|
||||||
|
### Pour la production
|
||||||
|
|
||||||
|
Créez un fichier `.env.production` :
|
||||||
|
|
||||||
|
```env
|
||||||
|
FIREBASE_API_KEY=votre_clé_production
|
||||||
|
FIREBASE_AUTH_DOMAIN=votre_domaine_production
|
||||||
|
FIREBASE_PROJECT_ID=votre_projet_production
|
||||||
|
FIREBASE_STORAGE_BUCKET=votre_bucket_production
|
||||||
|
FIREBASE_MESSAGING_SENDER_ID=votre_sender_id
|
||||||
|
FIREBASE_APP_ID=votre_app_id
|
||||||
|
```
|
||||||
|
|
||||||
|
### Configurer les secrets EAS
|
||||||
|
|
||||||
|
```bash
|
||||||
|
eas secret:create --scope project --name FIREBASE_API_KEY --value "votre_clé"
|
||||||
|
eas secret:create --scope project --name FIREBASE_AUTH_DOMAIN --value "votre_domaine"
|
||||||
|
# ... répétez pour toutes les variables
|
||||||
|
```
|
||||||
|
|
||||||
|
## Étape 3 : Build pour iOS
|
||||||
|
|
||||||
|
### Configuration
|
||||||
|
|
||||||
|
1. Assurez-vous d'avoir un compte Apple Developer
|
||||||
|
2. Configurez votre Bundle Identifier dans `app.json`
|
||||||
|
|
||||||
|
### Lancer le build
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Build de développement
|
||||||
|
eas build --platform ios --profile development
|
||||||
|
|
||||||
|
# Build de preview (TestFlight)
|
||||||
|
eas build --platform ios --profile preview
|
||||||
|
|
||||||
|
# Build de production
|
||||||
|
eas build --platform ios --profile production
|
||||||
|
```
|
||||||
|
|
||||||
|
### Soumettre à l'App Store
|
||||||
|
|
||||||
|
```bash
|
||||||
|
eas submit --platform ios
|
||||||
|
```
|
||||||
|
|
||||||
|
## Étape 4 : Build pour Android
|
||||||
|
|
||||||
|
### Configuration
|
||||||
|
|
||||||
|
1. Configurez votre package name dans `app.json`
|
||||||
|
2. Générez un keystore (EAS le fait automatiquement)
|
||||||
|
|
||||||
|
### Lancer le build
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Build de développement
|
||||||
|
eas build --platform android --profile development
|
||||||
|
|
||||||
|
# Build de preview (Internal Testing)
|
||||||
|
eas build --platform android --profile preview
|
||||||
|
|
||||||
|
# Build de production
|
||||||
|
eas build --platform android --profile production
|
||||||
|
```
|
||||||
|
|
||||||
|
### Soumettre à Google Play
|
||||||
|
|
||||||
|
```bash
|
||||||
|
eas submit --platform android
|
||||||
|
```
|
||||||
|
|
||||||
|
## Étape 5 : Configuration eas.json
|
||||||
|
|
||||||
|
Exemple de configuration complète :
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"cli": {
|
||||||
|
"version": ">= 5.0.0"
|
||||||
|
},
|
||||||
|
"build": {
|
||||||
|
"development": {
|
||||||
|
"developmentClient": true,
|
||||||
|
"distribution": "internal",
|
||||||
|
"ios": {
|
||||||
|
"simulator": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"preview": {
|
||||||
|
"distribution": "internal",
|
||||||
|
"ios": {
|
||||||
|
"simulator": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"production": {
|
||||||
|
"env": {
|
||||||
|
"FIREBASE_API_KEY": "$FIREBASE_API_KEY",
|
||||||
|
"FIREBASE_AUTH_DOMAIN": "$FIREBASE_AUTH_DOMAIN",
|
||||||
|
"FIREBASE_PROJECT_ID": "$FIREBASE_PROJECT_ID",
|
||||||
|
"FIREBASE_STORAGE_BUCKET": "$FIREBASE_STORAGE_BUCKET",
|
||||||
|
"FIREBASE_MESSAGING_SENDER_ID": "$FIREBASE_MESSAGING_SENDER_ID",
|
||||||
|
"FIREBASE_APP_ID": "$FIREBASE_APP_ID"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"submit": {
|
||||||
|
"production": {
|
||||||
|
"ios": {
|
||||||
|
"appleId": "votre@email.com",
|
||||||
|
"ascAppId": "1234567890",
|
||||||
|
"appleTeamId": "ABCD123456"
|
||||||
|
},
|
||||||
|
"android": {
|
||||||
|
"serviceAccountKeyPath": "./google-service-account.json",
|
||||||
|
"track": "production"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Étape 6 : Over-The-Air (OTA) Updates
|
||||||
|
|
||||||
|
EAS Update permet de déployer des mises à jour sans passer par les stores.
|
||||||
|
|
||||||
|
### Configurer EAS Update
|
||||||
|
|
||||||
|
```bash
|
||||||
|
eas update:configure
|
||||||
|
```
|
||||||
|
|
||||||
|
### Publier une mise à jour
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Pour la branche de production
|
||||||
|
eas update --branch production --message "Fix bug XYZ"
|
||||||
|
|
||||||
|
# Pour la branche de preview
|
||||||
|
eas update --branch preview --message "New feature ABC"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Étape 7 : Monitoring et Analytics
|
||||||
|
|
||||||
|
### Sentry (erreurs)
|
||||||
|
|
||||||
|
1. Créez un compte sur https://sentry.io/
|
||||||
|
2. Installez le SDK :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm install @sentry/react-native
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Configurez dans `App.tsx` :
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
import * as Sentry from '@sentry/react-native';
|
||||||
|
|
||||||
|
Sentry.init({
|
||||||
|
dsn: 'votre_dsn_sentry',
|
||||||
|
enableInExpoDevelopment: false,
|
||||||
|
debug: false
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
### Firebase Analytics
|
||||||
|
|
||||||
|
Déjà inclus avec Firebase. Activez-le dans la console Firebase.
|
||||||
|
|
||||||
|
## Étape 8 : Checklist avant déploiement
|
||||||
|
|
||||||
|
### Code
|
||||||
|
|
||||||
|
- [ ] Tous les tests passent
|
||||||
|
- [ ] Pas de console.log en production
|
||||||
|
- [ ] Variables d'environnement configurées
|
||||||
|
- [ ] Version incrémentée dans `app.json`
|
||||||
|
- [ ] Changelog mis à jour
|
||||||
|
|
||||||
|
### Firebase
|
||||||
|
|
||||||
|
- [ ] Règles Firestore en mode production
|
||||||
|
- [ ] Règles Storage configurées
|
||||||
|
- [ ] Quotas vérifiés
|
||||||
|
- [ ] Backup configuré
|
||||||
|
- [ ] Monitoring activé
|
||||||
|
|
||||||
|
### App Stores
|
||||||
|
|
||||||
|
- [ ] Screenshots préparés
|
||||||
|
- [ ] Description de l'app rédigée
|
||||||
|
- [ ] Politique de confidentialité publiée
|
||||||
|
- [ ] Conditions d'utilisation publiées
|
||||||
|
- [ ] Icône et splash screen finalisés
|
||||||
|
|
||||||
|
### Sécurité
|
||||||
|
|
||||||
|
- [ ] HTTPS uniquement
|
||||||
|
- [ ] Pas de secrets hardcodés
|
||||||
|
- [ ] Validation côté serveur (règles Firestore)
|
||||||
|
- [ ] Rate limiting configuré
|
||||||
|
- [ ] Authentification sécurisée
|
||||||
|
|
||||||
|
## Étape 9 : Déploiement progressif
|
||||||
|
|
||||||
|
### Phase 1 : Beta Testing (1-2 semaines)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Build preview
|
||||||
|
eas build --platform all --profile preview
|
||||||
|
|
||||||
|
# Inviter des beta testeurs
|
||||||
|
eas build:list
|
||||||
|
```
|
||||||
|
|
||||||
|
### Phase 2 : Soft Launch (1 mois)
|
||||||
|
|
||||||
|
- Déployer dans un pays test
|
||||||
|
- Monitorer les métriques
|
||||||
|
- Corriger les bugs critiques
|
||||||
|
|
||||||
|
### Phase 3 : Production
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Build production
|
||||||
|
eas build --platform all --profile production
|
||||||
|
|
||||||
|
# Soumettre aux stores
|
||||||
|
eas submit --platform all
|
||||||
|
```
|
||||||
|
|
||||||
|
## Étape 10 : Post-déploiement
|
||||||
|
|
||||||
|
### Monitoring
|
||||||
|
|
||||||
|
- Surveiller les crashs (Sentry)
|
||||||
|
- Analyser les métriques (Firebase Analytics)
|
||||||
|
- Vérifier les performances (Firebase Performance)
|
||||||
|
- Lire les reviews utilisateurs
|
||||||
|
|
||||||
|
### Mises à jour
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Mise à jour mineure (bug fixes)
|
||||||
|
eas update --branch production --message "Bug fixes"
|
||||||
|
|
||||||
|
# Mise à jour majeure (nouvelles fonctionnalités)
|
||||||
|
# Nécessite un nouveau build
|
||||||
|
eas build --platform all --profile production
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📊 Métriques à surveiller
|
||||||
|
|
||||||
|
- **DAU/MAU** : Utilisateurs actifs quotidiens/mensuels
|
||||||
|
- **Retention** : Taux de rétention à J1, J7, J30
|
||||||
|
- **Crash rate** : Taux de crash < 1%
|
||||||
|
- **Performance** : Temps de chargement < 3s
|
||||||
|
- **Engagement** : Nombre de transactions par utilisateur
|
||||||
|
|
||||||
|
## 🔧 Dépannage
|
||||||
|
|
||||||
|
### Build échoue
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Nettoyer le cache
|
||||||
|
eas build:cancel
|
||||||
|
eas build --clear-cache --platform all
|
||||||
|
```
|
||||||
|
|
||||||
|
### Update ne fonctionne pas
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Vérifier la configuration
|
||||||
|
eas update:list --branch production
|
||||||
|
```
|
||||||
|
|
||||||
|
### Problèmes de certificats iOS
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Régénérer les certificats
|
||||||
|
eas credentials
|
||||||
|
```
|
||||||
|
|
||||||
|
## 💰 Coûts estimés
|
||||||
|
|
||||||
|
### Gratuit
|
||||||
|
- Expo (plan gratuit) : Builds limités
|
||||||
|
- Firebase (plan Spark) : Limité mais suffisant pour débuter
|
||||||
|
|
||||||
|
### Payant
|
||||||
|
- Apple Developer : 99€/an
|
||||||
|
- Google Play : 25€ (une fois)
|
||||||
|
- Expo (plan Production) : ~29$/mois (builds illimités)
|
||||||
|
- Firebase (plan Blaze) : Pay-as-you-go
|
||||||
|
|
||||||
|
## 📚 Ressources
|
||||||
|
|
||||||
|
- [EAS Build Documentation](https://docs.expo.dev/build/introduction/)
|
||||||
|
- [EAS Submit Documentation](https://docs.expo.dev/submit/introduction/)
|
||||||
|
- [EAS Update Documentation](https://docs.expo.dev/eas-update/introduction/)
|
||||||
|
- [App Store Guidelines](https://developer.apple.com/app-store/review/guidelines/)
|
||||||
|
- [Google Play Guidelines](https://play.google.com/about/developer-content-policy/)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Bon déploiement ! 🎉**
|
||||||
Reference in New Issue
Block a user