#!/usr/bin/env bash # Rebreak Native — Build standalone iOS Release on connected iPhone. # Bundle ist eingebettet → läuft OHNE Metro / OHNE WiFi-zum-Mac. # Backend zeigt auf staging.rebreak.org (siehe extra.apiUrl in app.config.ts). # # Usage: # ./install-ios.sh # Release-Build + Install + Launch # ./install-ios.sh --debug # Debug-Build (braucht Metro!) — nur fürs Testen # # Voraussetzungen (einmalig): # - Xcode installiert + Apple-ID in Xcode → Settings → Accounts hinzugefügt # - iPhone via USB angeschlossen, "Diesem Computer vertrauen?" bestätigt # - In Xcode: Window → Devices and Simulators → iPhone → 'Use for Development' # - Auf iPhone (nach erstem Install): Einstellungen → Allgemein → VPN & Geräteverwaltung # → Apple-Dev-Profil "Vertrauen" # # Free-Apple-Account-Hinweis: Release-Build läuft 7 Tage, danach muss neu installiert werden. # Mit Paid Developer Account: 1 Jahr. set -euo pipefail cd "$(dirname "$0")" CONFIGURATION="Release" while [[ $# -gt 0 ]]; do case "$1" in --debug) CONFIGURATION="Debug"; shift ;; -h|--help) awk '/^#!/{next} /^#/{sub(/^# ?/, ""); print; next} {exit}' "$0"; exit 0 ;; *) echo "Unbekanntes Flag: $1"; exit 1 ;; esac done if ! command -v xcrun >/dev/null 2>&1; then echo "Xcode Command-Line-Tools fehlen. Installieren:" echo " xcode-select --install" exit 1 fi # Device-Detection via xctrace. # == Devices == → physisch connected + entsperrt + trusted # == Devices Offline == → schon mal gepairt, aber gerade nicht erreichbar # (iPhone gesperrt, abgesteckt, oder Trust-Dialog wartet) XCTRACE_OUT=$(xcrun xctrace list devices 2>&1) ONLINE=$(printf '%s\n' "$XCTRACE_OUT" \ | awk '/^== Devices ==/{f=1; next} /^== /{f=0} f' \ | grep -E "iPhone|iPad" || true) OFFLINE=$(printf '%s\n' "$XCTRACE_OUT" \ | awk '/^== Devices Offline ==/{f=1; next} /^== /{f=0} f' \ | grep -E "iPhone|iPad" || true) if [[ -z "$ONLINE" ]]; then echo "Kein iPhone/iPad ONLINE." if [[ -n "$OFFLINE" ]]; then echo "" echo "Aber diese Geräte sind gepairt aber offline:" printf '%s\n' "$OFFLINE" | sed 's/^/ /' echo "" echo "Häufigste Ursachen:" echo " 1. iPhone ist gesperrt → entsperren, Mac wartet darauf" echo " 2. Kabel nur Strom, keine Daten → anderes Kabel probieren" echo " 3. 'Diesem Computer vertrauen?'-Dialog → bestätigen" echo " 4. Erst kürzlich angesteckt → 5-10 Sek warten und erneut probieren" else echo "" echo "Setup nötig:" echo " - iPhone via USB-Kabel anschließen + entsperren" echo " - 'Diesem Computer vertrauen?' am iPhone bestätigen" echo " - Xcode öffnen, dort einmalig 'Use for Development' aktivieren" fi exit 1 fi echo "→ Gerät online: $(printf '%s\n' "$ONLINE" | head -1)" echo "→ Building iOS $CONFIGURATION bundle + installing on device..." echo " (erster Release-Build dauert 5-10 min wegen Pod-Install + Bundle)" echo "" # expo run:ios kümmert sich um Pods + xcodebuild + Code-Signing + Install + Launch. # --device wählt ein USB-Gerät statt Simulator. # --configuration Release embeddet das JS-Bundle → keine Metro-Verbindung nötig. npx expo run:ios --device --configuration "$CONFIGURATION" echo "" echo "Fertig — App läuft jetzt standalone auf deinem iPhone." if [[ "$CONFIGURATION" == "Release" ]]; then echo "Backend: https://staging.rebreak.org (siehe extra.apiUrl in app.config.ts)" echo "Free-Account: 7 Tage gültig, danach Skript erneut laufen lassen." fi