da85a2c0d6
Phase 10 Schritt 7 lässt sich nicht abschließen, aber alles bis zur Signatur ist gebaut und belegt: Simulator- und Gerätebau (arm64, Release) laufen fehlerfrei durch, 146/146 Tests grün, Typecheck sauber. Die Signatur scheitert allein daran, dass dem Entwicklerteam kein Gerät bekannt ist -- Apple erzeugt ein Development-Profil nur für konkrete UDIDs. Kein iPhone angeschlossen, keins je mit diesem Mac gepaart, kein App-Store-Connect-Schlüssel zum Nachtragen. Neu: companion-app/scripts/ios-signieren.sh macht Bauen, Synchronisieren, Signieren und den .ipa-Export zu einem Befehl. Nötig, weil ios/ absichtlich gitignored ist und jede in Xcode geklickte Signatureinstellung beim nächsten npx cap add ios wieder verschwinden würde -- die Team-Kennung braucht eine versionierte Heimat. Bewusst nicht getan: eine unsignierte .ipa als Platzhalter einchecken. Sie wäre nicht installierbar und läge als Binärdatei dauerhaft in der Historie.
76 lines
2.6 KiB
Bash
Executable File
76 lines
2.6 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 dem
|
|
# Entwicklerteam bekannt sein. Apple erzeugt ein Development-Profil nur fuer
|
|
# konkrete Geraete. Also entweder das iPhone per Kabel anschliessen und
|
|
# vertrauen (Xcode meldet die Geraetekennung dann selbst an), oder die UDID
|
|
# unter developer.apple.com/account eintragen. Ohne das bricht der Archivschritt
|
|
# mit "Your team has no devices" ab - das ist kein Fehler im Projekt.
|
|
set -euo pipefail
|
|
|
|
HIER="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
APP="$(dirname "$HIER")"
|
|
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
|
|
|
|
# Die Exportart heisst seit Xcode 16 offiziell "debugging"; "development" ist
|
|
# weiterhin als Synonym gueltig und funktioniert auch mit aelteren Xcode-
|
|
# Versionen, deshalb bleibt es hier stehen.
|
|
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>development</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
|
|
|
|
echo
|
|
echo "Fertig: $AUSGABE/App.ipa"
|
|
echo "Aufs Geraet: xcrun devicectl device install app --device <UDID> $AUSGABE/App.ipa"
|