e1ebe6d694
Systematischer Bildvergleich der companion-app gegen das HA-Panel (companion-app/AGENTS.md Kapitel 1-11): Farbtoken/Radien aus dem falschen Stylesheet gelesen (iOS-Overlay statt Basis-CSS, betraf fast jede Kachel/Farbe/Radius app-weit), vier app-weite @audi-dash/ui-Bugs (Switch/Seg/Feld rot statt neutral bzw. falsche Feldbreite), Reifen-Seite strukturell neu gebaut (beide Radsätze gleichzeitig statt Umschalter, editierbare Felder, Anzugsmoment-/km-Korrektur), Standort-Feature komplett neu (fehlte bisher ganz), sowie diverse Struktur-/Typografie-/Datenlücken in MeinAudi/Service/Versicherung/Sicherheit/Fahrten/Tanken/Statistik/Batterie/Einstellungen. Manifest auf 2026.8.30.2 angehoben, OTA-Bündel neu gebaut und in audi_ha_test verifiziert (sauberer Neustart, keine Tracebacks). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
125 lines
5.1 KiB
Bash
Executable File
125 lines
5.1 KiB
Bash
Executable File
#!/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"
|
|
|
|
# Ohne diese Pruefung baut/signiert das Skript zuverlaessig - aber nur den
|
|
# Stand, der gerade lokal ausgecheckt ist. Ein vergessenes `git pull` waere
|
|
# damit ein stiller Veraltungsfehler wie schon mehrfach an anderer Stelle in
|
|
# diesem Projekt (Cache-Busting, OTA-Buendel-Abgleich, VERSIONIERUNG.md) - hier
|
|
# stattdessen ein lauter Abbruch statt eines optisch/inhaltlich alten Builds.
|
|
echo "==> Git-Stand pruefen"
|
|
if [ -n "$(git status --porcelain)" ]; then
|
|
echo "FEHLER: Uncommittete Aenderungen im Arbeitsverzeichnis." >&2
|
|
git status --short >&2
|
|
echo "Erst committen oder stashen, dann erneut versuchen." >&2
|
|
exit 1
|
|
fi
|
|
git fetch origin
|
|
LOKAL="$(git rev-parse HEAD)"
|
|
FERN="$(git rev-parse origin/main)"
|
|
if [ "$LOKAL" != "$FERN" ]; then
|
|
echo "FEHLER: Lokaler Stand ($LOKAL) weicht von origin/main ($FERN) ab." >&2
|
|
echo "Erst 'git pull' ausfuehren - sonst signiert dieses Skript einen veralteten Stand." >&2
|
|
exit 1
|
|
fi
|
|
echo " HEAD == origin/main ($LOKAL), aktuell."
|
|
|
|
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"
|