90 lines
3.5 KiB
Bash
Executable File
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
|