#!/usr/bin/env bash
# Baut die native iOS-Huelle und signiert sie zu einer installierbaren .ipa.
# Nur auf einem Mac mit Xcode lauffaehig. Siehe ../../UMSETZUNGSPLAN.md Phase 10.
#
# Warum es dieses Skript gibt: `ios/` ist absichtlich gitignored (aus dem
# Webbuendel jederzeit wiederherstellbar). Damit verschwindet aber auch jede
# Signatureinstellung, die man in Xcode von Hand setzt, beim naechsten
# `npx cap add ios` wieder. Die Team-Kennung gehoert deshalb hierher - in eine
# versionierte Datei - und wird dem Build von aussen mitgegeben.
#
# Voraussetzung, die dieses Skript nicht herstellen kann: das iPhone muss
# per Kabel an diesem Mac haengen und vertraut sein. Apple erzeugt ein
# Development-Profil nur fuer konkrete Geraete, und dieses Konto ist ein
# kostenloses Personal Team - da gibt es keine Geraeteverwaltung auf
# developer.apple.com, das Anmelden der Geraetekennung macht Xcode selbst ueber
# -allowProvisioningUpdates am angeschlossenen Telefon. Ohne Telefon bricht der
# Archivschritt mit "Your team has no devices" ab; das ist kein Fehler im
# Projekt.
#
# Ebenfalls Folge des kostenlosen Kontos: Profil, App-ID und Geraeteeintrag
# verfallen nach 7 Tagen, die App muss dann neu aufgespielt werden.
#
# Ungeprueft, weil bisher kein Geraet zur Verfuegung stand: ob der
# -exportArchive-Schritt mit einem Personal Team ueberhaupt eine brauchbare
# .ipa liefert. Kostenloses Signieren ist auf "direkt aufs angeschlossene
# Geraet starten" ausgelegt, nicht auf ein weitergebbares Archiv. Scheitert der
# Export, ist der direkte Weg der richtige, nicht die Fehlersuche am Export:
#   xcodebuild -project ios/App/App.xcodeproj -scheme App \
#     -destination 'id=<UDID>' -allowProvisioningUpdates \
#     DEVELOPMENT_TEAM=$TEAM install
set -euo pipefail

HIER="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
APP="$(dirname "$HIER")"
# Dieselbe Kennung wie zu Zeiten des kostenlosen Kontos: die bezahlte
# Mitgliedschaft hat das bestehende Team hochgestuft, statt ein neues
# anzulegen. Zwischenzeitlich stand hier das Gegenteil - widerlegt am
# 2026-08-29 durch das ausgestellte Profil (Team RMACS9VLS4, Laufzeit ein
# Jahr statt sieben Tage). Ueberschreibbar ueber APPLE_TEAM_ID.
TEAM="${APPLE_TEAM_ID:-RMACS9VLS4}"
AUSGABE="$APP/ios/build"
ARCHIV="$AUSGABE/DataMetric360.xcarchive"

cd "$APP"

echo "==> Webbuendel bauen"
npm run build

echo "==> Native Huelle synchronisieren"
if [ ! -d ios ]; then
  echo "==> ios/ fehlt, wird neu erzeugt"
  npx cap add ios
fi
npx cap sync ios

echo "==> Archiv bauen und signieren (Team $TEAM)"
rm -rf "$AUSGABE"
mkdir -p "$AUSGABE"
xcodebuild \
  -project ios/App/App.xcodeproj \
  -scheme App \
  -configuration Release \
  -destination 'generic/platform=iOS' \
  -archivePath "$ARCHIV" \
  -allowProvisioningUpdates \
  DEVELOPMENT_TEAM="$TEAM" \
  archive

# Ad-hoc, nicht development: das ist die von Apple vorgesehene Art fuer die
# Installation ueber die Luft (siehe ios-luftweg.sh) und deckt den Weg per
# Kabel gleich mit ab. Sie verlangt ein Apple-Distribution-Zertifikat, das
# -allowProvisioningUpdates bei Bedarf selbst anlegt - moeglich erst seit der
# bezahlten Mitgliedschaft. Die Signatur laeuft damit ein Jahr.
cat > "$AUSGABE/ExportOptions.plist" <<PLIST
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>method</key><string>ad-hoc</string>
  <key>teamID</key><string>$TEAM</string>
  <key>signingStyle</key><string>automatic</string>
  <key>stripSwiftSymbols</key><true/>
</dict>
</plist>
PLIST

echo "==> .ipa exportieren"
xcodebuild -exportArchive \
  -archivePath "$ARCHIV" \
  -exportOptionsPlist "$AUSGABE/ExportOptions.plist" \
  -exportPath "$AUSGABE" \
  -allowProvisioningUpdates

# Die fertige .ipa liegt versioniert unter auslieferung/, weil ios/ gitignored
# ist und das Ergebnis sonst nur auf diesem einen Mac existierte.
mkdir -p "$APP/auslieferung"
cp "$AUSGABE/App.ipa" "$APP/auslieferung/App.ipa"

echo
echo "Fertig: $APP/auslieferung/App.ipa"
echo "Ueber die Luft: bash scripts/ios-luftweg.sh https://<host>"
echo "Per Kabel:      xcrun devicectl device install app --device <UDID> $APP/auslieferung/App.ipa"
