233 lines
6.4 KiB
Markdown

# ReBreak Native — Deploy & Dev Scripts
## Quick Start
### Development
```bash
# Default = iPhone USB + Native-Build:
./dev.sh
# Schneller UI-Loop (kein Rebuild, App schon installiert):
./dev.sh ios --no-build
./dev.sh android --no-build
# iOS Dev auf physischem iPhone (USB) mit Build:
./dev.sh ios --device
# iOS Dev auf iPhone via WiFi (Kabel ab):
./dev.sh ios --wifi
# iOS Simulator:
./dev.sh ios --simulator
# Android Dev (Build + Install + Launch):
./dev.sh android
# Nur Metro starten:
./dev.sh metro
# iOS Clean + Rebuild:
./dev.sh clean --build
# Release-Build auf iPhone installieren:
./dev.sh install ios
```
### Deployment
```bash
# Full Release (alle Plattformen):
./deploy.sh all --bump
# Nur iOS TestFlight:
./deploy.sh testflight --bump
# Nur iOS MDM (Ad-Hoc):
./deploy.sh mdm --bump
# Nur Android:
./deploy.sh android --bump
# Dry-Run zum Testen:
./deploy.sh all --bump --dry-run
```
---
## `./deploy.sh` — Multi-Platform Release
### Subcommands
- `all` (default) — Alle drei Targets (testflight + mdm + android)
- `testflight` — iOS TestFlight via App Store Connect
- `mdm` — iOS Ad-Hoc IPA + scp Upload zu MDM-Server
- `android` — Android APK/AAB via Gradle + Play Console
### Flags
- `--bump` — Bump Build-Number (iOS + Android versionCode)
- `--version X.Y.Z` — Explizite Version setzen
- `--build N` — Explizite iOS Build-Nummer
- `--android-version-code N` — Override Android versionCode
- `--skip-clean` — clean-ios.sh überspringen (iOS)
- `--skip-validate` — altool --validate-app überspringen (TF)
- `--skip-submit` — Play-Console-Submit überspringen (Android)
- `--dry-run` — Alles simulieren, nichts ausführen
### Credentials
**iOS TestFlight:**
- `APPLE_APP_SPECIFIC_PASSWORD` (oder)
- `ASC_API_KEY_PATH` + `ASC_API_KEY_ID` + `ASC_API_KEY_ISSUER`
**iOS MDM:**
- SSH-Access zu `rebreak-mdm` Server (VPN muss laufen)
**Android:**
- ⚠️ **NICHT READY** — siehe Setup unten
---
## `./dev.sh` — Development Tooling
### Subcommands
- `ios` (default) — iOS Dev (Metro + Xcode/Simulator/Device)
- `android` — Android Dev (Metro + Gradle build + install)
- `metro` — Nur Metro starten
- `clean` — iOS Nuclear Clean (Pods, DerivedData, Archives)
- `install ios` — Release-Build auf iPhone USB installieren
- `install android` — Debug-APK auf Android Device installieren
### Flags (ios)
- `--device` — Build auf physisches iPhone via USB **(default)**
- `--simulator` — Build auf iOS Simulator
- `--xcode` — Nur Xcode öffnen (manueller Build)
- `--wifi` — Metro mit --host lan (für WiFi-Dev, kein Native-Build)
- `--no-build`**KEIN Native-Rebuild** → nur Metro starten (App muss schon installiert sein, schnellster UI/JS-Loop)
### Flags (android)
- `--no-build`**KEIN Gradle-Rebuild** → nur Metro starten (APK muss schon installiert sein, schnellster UI/JS-Loop)
- `--no-launch` — Build+Install, aber kein Auto-Launch
- `--wifi` — Metro mit --host lan (nur in Kombi mit `--no-build`)
### Flags (metro)
- `--keep` — Cache behalten (kein --clear)
### Flags (clean)
- `--build` — + iOS build am Ende
- `--xcode` — + Xcode öffnen am Ende
---
## `./eas-release.sh` — EAS Cloud-Build
**SEPARATER WORKFLOW** — Cloud-Build via Expo Application Services (kein lokaler Build).
```bash
# iOS only (build + TestFlight):
./eas-release.sh
# Android AAB + Play Console Internal:
./eas-release.sh --android
# iOS + Android parallel:
./eas-release.sh --both
# Nur Build, kein Submit:
./eas-release.sh --build-only
```
**Voraussetzungen:**
- `eas login` einmalig durchgeführt
- Android: `serviceAccountKeyPath` in eas.json gesetzt
- iOS: Apple-Connect-Login beim ersten Run
**Hinweis:** Bleibt unangetastet — wird NICHT in `deploy.sh` integriert, da völlig anderer Workflow (Cloud vs. lokal).
---
## ⚠️ Android Deployment Setup — NOCH NICHT READY
### Fehlende Credentials
**1. Release Keystore:**
```bash
# Keystore generieren:
keytool -genkey -v -keystore ~/rebreak-release.keystore \
-alias rebreak -keyalg RSA -keysize 2048 -validity 10000
# Keystore nach android/app/ kopieren (nach prebuild):
npx expo prebuild --platform android --no-install
cp ~/rebreak-release.keystore android/app/
```
**2. Signing Config:**
```bash
# key.properties erstellen (NIEMALS committen):
cat > android/key.properties << EOF
storePassword=<dein-password>
keyPassword=<dein-password>
keyAlias=rebreak
storeFile=rebreak-release.keystore
EOF
# .gitignore prüfen (sollte bereits vorhanden sein):
# android/key.properties
# android/app/*.keystore
```
**3. Play Console Service-Account JSON (für Submit):**
```bash
# 1. Google Cloud Console → Service Accounts → Create → JSON-Key
# 2. Play Console → Setup → API-Access → Service-Account linken
# 3. Permissions: "Releases" (Edit + Read)
# 4. JSON-Key ablegen:
mkdir -p ~/secrets
mv ~/Downloads/rebreak-play-*.json ~/secrets/rebreak-play-service-account.json
# Optional: ENV-Variable setzen (in ~/.zshrc):
export PLAY_SERVICE_ACCOUNT_JSON=~/secrets/rebreak-play-service-account.json
```
**URLs:**
- Google Cloud Console: https://console.cloud.google.com/iam-admin/serviceaccounts
- Play Console API Access: https://play.google.com/console → Setup → API Access
### Status-Check
```bash
# Prüfen ob alles vorhanden:
ls -la android/key.properties
ls -la android/app/*.keystore
ls -la ~/secrets/rebreak-play-service-account.json
# Wenn alle drei Dateien existieren:
./deploy.sh android --bump
```
**Ohne Service-Account-JSON:**
```bash
# Build-only (kein Submit zu Play Store):
./deploy.sh android --bump --skip-submit
# AAB dann manuell uploaden:
# Play Console → Releases → Internal Testing → Create Release
# Upload: android/app/build/outputs/bundle/release/app-release.aab
```
---
## Changelog
**2026-05-30 — Script-Konsolidierung:**
-`deploy.sh` ersetzt `deploy-app.sh`, `deploy-adhoc.sh`, `deploy-tf.sh`
-`dev.sh` ersetzt `dev-build.sh`, `dev-ios.sh`, `dev-iphone.sh`, `install-ios.sh`, `install-android.sh`, `clean-ios.sh`, `metro.sh`
-`eas-release.sh` bleibt separat (Cloud-Build-Workflow)
- ✓ Coloured brew-style output (✓/✗, Sections)
-`--help` für alle Scripts
- ⚠️ Android-Deploy: Credentials fehlen (siehe Setup oben)
**Legacy Scripts gelöscht:**
- `deploy-app.sh`, `deploy-adhoc.sh`, `deploy-tf.sh`
- `dev-build.sh`, `dev-ios.sh`, `dev-iphone.sh`
- `install-ios.sh`, `install-android.sh`
- `clean-ios.sh`, `metro.sh`
- `DEPLOY_APP_USAGE.md` (Info in `--help` integriert)