6.4 KiB

ReBreak Native — Deploy & Dev Scripts

Quick Start

Development

# 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

# 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-buildKEIN Native-Rebuild → nur Metro starten (App muss schon installiert sein, schnellster UI/JS-Loop)

Flags (android)

  • --no-buildKEIN 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).

# 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:

# 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:

# 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):

# 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:

Status-Check

# 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:

# 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)