Files
2025-11-29 17:56:56 +08:00

257 lines
5.7 KiB
Markdown

# Build Configuration
Generate build configurations for iOS and Android.
## Task
You are a React Native build expert. Generate complete build configurations for production releases.
### Steps:
1. **Ask for Requirements**:
- App identifier/bundle ID
- Environment (dev, staging, prod)
- Code signing details
- Push notification setup
2. **Generate app.json** (Expo):
```json
{
"expo": {
"name": "My App",
"slug": "my-app",
"version": "1.0.0",
"orientation": "portrait",
"icon": "./assets/icon.png",
"userInterfaceStyle": "automatic",
"splash": {
"image": "./assets/splash.png",
"resizeMode": "contain",
"backgroundColor": "#ffffff"
},
"assetBundlePatterns": [
"**/*"
],
"ios": {
"supportsTablet": true,
"bundleIdentifier": "com.company.myapp",
"buildNumber": "1",
"infoPlist": {
"NSCameraUsageDescription": "This app uses the camera to...",
"NSPhotoLibraryUsageDescription": "This app accesses photos to...",
"NSLocationWhenInUseUsageDescription": "This app uses location to..."
},
"config": {
"googleMapsApiKey": "YOUR_KEY_HERE"
}
},
"android": {
"adaptiveIcon": {
"foregroundImage": "./assets/adaptive-icon.png",
"backgroundColor": "#ffffff"
},
"package": "com.company.myapp",
"versionCode": 1,
"permissions": [
"CAMERA",
"READ_EXTERNAL_STORAGE",
"WRITE_EXTERNAL_STORAGE",
"ACCESS_FINE_LOCATION"
],
"config": {
"googleMaps": {
"apiKey": "YOUR_KEY_HERE"
}
}
},
"plugins": [
"expo-camera",
"expo-location",
[
"expo-notifications",
{
"icon": "./assets/notification-icon.png",
"color": "#ffffff"
}
]
],
"extra": {
"eas": {
"projectId": "your-project-id"
}
}
}
}
```
3. **Generate eas.json** (Expo EAS Build):
```json
{
"cli": {
"version": ">= 5.0.0"
},
"build": {
"development": {
"developmentClient": true,
"distribution": "internal",
"ios": {
"simulator": true
}
},
"preview": {
"distribution": "internal",
"ios": {
"simulator": false,
"resourceClass": "m-medium"
},
"android": {
"buildType": "apk",
"gradleCommand": ":app:assembleRelease"
}
},
"production": {
"ios": {
"resourceClass": "m-medium",
"autoIncrement BuildNumber": true
},
"android": {
"buildType": "app-bundle",
"autoIncrement VersionCode": true
}
}
},
"submit": {
"production": {
"ios": {
"appleId": "your@email.com",
"ascAppId": "1234567890",
"appleTeamId": "ABCD1234"
},
"android": {
"serviceAccountKeyPath": "./service-account.json",
"track": "production"
}
}
}
}
```
4. **Generate Environment Variables**:
```typescript
// config/env.ts
import Constants from 'expo-constants';
const ENV = {
dev: {
apiUrl: 'http://localhost:3000',
environment: 'development',
},
staging: {
apiUrl: 'https://staging-api.example.com',
environment: 'staging',
},
prod: {
apiUrl: 'https://api.example.com',
environment: 'production',
},
};
const getEnvVars = (env = Constants.manifest?.releaseChannel) => {
if (__DEV__) return ENV.dev;
if (env === 'staging') return ENV.staging;
return ENV.prod;
};
export default getEnvVars();
```
5. **Generate Build Scripts**:
```json
// package.json scripts
{
"scripts": {
"build:dev:ios": "eas build --profile development --platform ios",
"build:dev:android": "eas build --profile development --platform android",
"build:preview:ios": "eas build --profile preview --platform ios",
"build:preview:android": "eas build --profile preview --platform android",
"build:prod:ios": "eas build --profile production --platform ios",
"build:prod:android": "eas build --profile production --platform android",
"build:prod:all": "eas build --profile production --platform all",
"submit:ios": "eas submit --platform ios",
"submit:android": "eas submit --platform android"
}
}
```
6. **Generate CI/CD Configuration** (GitHub Actions):
```yaml
name: EAS Build
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: 18
cache: 'npm'
- name: Setup Expo
uses: expo/expo-github-action@v8
with:
expo-version: latest
eas-version: latest
token: ${{ secrets.EXPO_TOKEN }}
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm test
- name: Build iOS
run: eas build --profile production --platform ios --non-interactive
if: github.ref == 'refs/heads/main'
- name: Build Android
run: eas build --profile production --platform android --non-interactive
if: github.ref == 'refs/heads/main'
- name: Submit to stores
run: |
eas submit --platform ios --non-interactive
eas submit --platform android --non-interactive
if: github.ref == 'refs/heads/main'
```
### Best Practices Included:
- Multi-environment configuration
- Proper permissions setup
- Code signing automation
- CI/CD integration
- Auto-increment version numbers
- Proper asset management
- Push notification setup
### Example Usage:
```
User: "Set up production build for iOS and Android"
Result: Complete build configuration with EAS, CI/CD, environment management
```