90 lines
3.5 KiB
Bash
Executable File

#!/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