Deployment - PlugImt/transat-app GitHub Wiki
Deployment
🚀 Deployment Overview
Transat 2.0 uses Expo Application Services (EAS) for building and deploying the mobile application to both iOS App Store and Google Play Store.
🏗️ Build Configuration
EAS Build Setup
The project uses EAS Build for creating production-ready binaries. Configuration is defined in eas.json
:
{
"cli": {
"version": ">= 6.1.0"
},
"build": {
"development": {
"developmentClient": true,
"distribution": "internal",
"ios": {
"resourceClass": "m-medium"
}
},
"preview": {
"distribution": "internal",
"android": {
"buildType": "apk"
},
"ios": {
"simulator": true
}
},
"production": {
"autoIncrement": true,
"env": {
"NODE_ENV": "production"
}
}
},
"submit": {
"production": {}
}
}
Build Profiles
Development Build
- Purpose: Testing with development client
- Distribution: Internal team only
- Features: Debug symbols, development tools enabled
eas build --profile development --platform all
Preview Build
- Purpose: Testing and QA
- Distribution: Internal stakeholders
- Format: APK for Android, Simulator build for iOS
eas build --profile preview --platform all
Production Build
- Purpose: App store submission
- Distribution: Public release
- Features: Optimized, minified, production-ready
eas build --profile production --platform all
📱 Platform-Specific Configuration
iOS Configuration
App Store Connect Setup
- Bundle Identifier:
fr.resel.transat
- Team ID: Configured in Expo account
- Certificates: Managed automatically by EAS
- Provisioning Profiles: Auto-generated
iOS Build Settings
{
"ios": {
"icon": {
"dark": "./assets/images/ios-icon.png",
"light": "./assets/images/ios-icon.png",
"tinted": "./assets/images/ios-icon-tint.png"
},
"supportsTablet": true,
"bundleIdentifier": "fr.resel.transat",
"infoPlist": {
"ITSAppUsesNonExemptEncryption": false,
"NSCameraUsageDescription": "This app needs access to camera to update your profile picture.",
"NSPhotoLibraryUsageDescription": "This app needs access to photo library to update your profile picture."
}
}
}
iOS Capabilities
- Push Notifications
- Background App Refresh
- Camera and Photo Library Access
- Network Extensions
Android Configuration
Google Play Console Setup
- Package Name:
com.yohann69.transat2_0
- Signing Key: Managed by EAS
- Google Services: Firebase integration
- Play Console Access: Team credentials
Android Build Settings
{
"android": {
"adaptiveIcon": {
"foregroundImage": "./assets/images/icon.png",
"backgroundColor": "#ffffff"
},
"package": "com.yohann69.transat2_0",
"googleServicesFile": "./google-services.json",
"permissions": [
"android.permission.RECORD_AUDIO",
"android.permission.CAMERA",
"android.permission.READ_EXTERNAL_STORAGE"
]
}
}
🔐 Environment Management
Environment Variables
Production Environment
# API Configuration
EXPO_PUBLIC_API_URL=https://api.transat.resel.fr
# Authentication
EXPO_PUBLIC_JWT_SECRET=production_secret_key
# Services
EXPO_PUBLIC_SENTRY_DSN=https://sentry.io/organizations/plugimt/projects/transat-app/
EXPO_PUBLIC_ANALYTICS_ID=analytics_tracking_id
# Push Notifications
EXPO_PUBLIC_FCM_SERVER_KEY=firebase_server_key
Secrets Management
Local Development
# .env.local (not committed)
EXPO_PUBLIC_API_URL=http://localhost:8080
EXPO_PUBLIC_DEBUG_MODE=true
📦 Release Process
Version Management
Semantic Versioning
The app follows semantic versioning (semver):
- Major (X.0.0): Breaking changes
- Minor (X.Y.0): New features, backward compatible
- Patch (X.Y.Z): Bug fixes, backward compatible
Version Bumping
# Automatic version increment in app.json
{
"expo": {
"version": "2.1.3",
"ios": {
"buildNumber": "23"
},
"android": {
"versionCode": 23
}
}
}
Release Checklist
Pre-Release
- All tests passing
- Code review completed
- Changelog updated
- Version bumped
- Environment variables verified
- Dependencies updated
- Security scan completed
Release Steps
-
Create Release Branch
git checkout -b release/v2.1.0 git push origin release/v2.1.0
-
Build and Test
eas build --profile production --platform all
-
Internal Testing
- Deploy to internal testing group
- Verify core functionality
- Test on multiple devices
-
Create GitHub Release
- Tag the release
- Generate release notes
- Attach build artifacts
-
Submit to Stores
eas submit --platform all
Post-Release
- Monitor crash reports
- Check user feedback
- Update documentation
- Plan next iteration
🏪 App Store Submission
iOS App Store
App Store Connect Configuration
-
App Information
- Name: Transat 2.0
- Bundle ID: fr.resel.transat
- Primary Language: French
- Category: Education
-
App Store Optimization
- Keywords: campus, IMT Atlantique, student life
- Screenshots: iPhone and iPad versions
- App Preview: Feature demonstration videos
Review Guidelines Compliance
- Privacy Policy: Link to privacy policy
- Terms of Service: Clear terms and conditions
- Age Rating: 4+ (Educational content)
- Content Description: Campus utility app
Google Play Store
Play Console Configuration
-
Store Listing
- App Title: Transat 2.0
- Short Description: Campus life companion
- Full Description: Detailed feature list
-
Content Rating
- Target Audience: Everyone
- Content Guidelines: Educational app
- Sensitive Permissions: Justified usage
Release Management
# Submit to internal testing
eas submit --platform android --track internal
# Promote to production
eas submit --platform android --track production
📊 Monitoring & Analytics
Sentry Integration
Error Monitoring
import * as Sentry from '@sentry/react-native';
Sentry.init({
dsn: process.env.EXPO_PUBLIC_SENTRY_DSN,
environment: __DEV__ ? 'development' : 'production',
enableAutoSessionTracking: true,
integrations: [
new Sentry.ReactNativeTracing({
enableUserInteractionTracing: true,
}),
],
});