Korrektur: das Apple-Konto ist ein kostenloses Personal Team
Der vorige Commit ging von einer bezahlten Mitgliedschaft aus und nannte als
Ausweg, die UDID auf developer.apple.com einzutragen. Das ist falsch.
Xcodes eigener Zwischenspeicher belegt das Gegenteil:
isFreeProvisioningTeam = 1, teamType = "Personal Team". Damit gibt es gar
keine Geräteverwaltung im Portal -- ein Gerät wird ausschließlich dadurch
bekannt, dass es angeschlossen und vertraut ist. Zusätzlich verfallen Profil,
App-ID und Geräteeintrag alle 7 Tage.
Auch die ältere Behauptung weiter oben in AGENTS.md ("Paul has an Apple
Developer Program") ist damit als falsch markiert.
Offen und bewusst als ungeprüft vermerkt: ob -exportArchive mit einem
Personal Team überhaupt eine brauchbare .ipa liefert. Der direkte Weg aufs
angeschlossene Gerät steht als Rückfallebene im Skriptkopf.
This commit is contained in:
@@ -1430,7 +1430,8 @@ wraps the web app for iPhone; a PWA home-screen install is the accepted intermed
|
||||
panel fix and feature from the six days since (HIG audit rounds, receipt upload, trip
|
||||
editing, Inspektion forecast, ...) existed only in `homeassistant/www/audi-dashboard-app.js`.
|
||||
User decision: port everything now, before any native build work (Android build itself
|
||||
deprioritized/uncertain per the user - Paul has an Apple Developer Program and will help with
|
||||
deprioritized/uncertain per the user - Paul has an Apple Developer Program **[WRONG, see
|
||||
section AI: it is a free Personal Team, not a paid membership]** and will help with
|
||||
iOS signing). Audited both codebases field-by-field (not by diffing the panel's CSS/markup,
|
||||
which doesn't transfer to `@audi-dash/ui` components) and found six real, mechanically
|
||||
distinct gaps, all fixed:
|
||||
@@ -4612,22 +4613,43 @@ What was verified on this machine (Xcode 26.4, Node 22.20, `main` at `2026.8.28.
|
||||
nothing but provisioning is missing.
|
||||
|
||||
**The blocker, verbatim from Apple:** `Communication with Apple failed: Your team has no devices
|
||||
from which to generate a provisioning profile.` The developer account authenticates fine (Xcode
|
||||
reached Apple and got a real answer, not an auth error) — team `RMACS9VLS4`, certificate
|
||||
from which to generate a provisioning profile.` The account authenticates fine (Xcode reached Apple
|
||||
and got a real answer, not an auth error) — team `RMACS9VLS4`, certificate
|
||||
`Apple Development: paul.nothaft@me.com (C9L892Z59P)`, valid until 2027-07-17. Apple issues a
|
||||
development profile only for **named devices**, and this team has none registered. No iPhone is
|
||||
connected (`xcrun devicectl list devices` → none), no device was ever paired with this Mac (no
|
||||
`~/Library/Developer/CoreDevice`, no iOS DeviceSupport), and no App Store Connect API key exists
|
||||
to register one remotely. There is no route around this from a machine with no phone attached:
|
||||
connected (`xcrun devicectl list devices` → none) and no device was ever paired with this Mac (no
|
||||
`~/Library/Developer/CoreDevice`, no iOS DeviceSupport). There is no route around this from a
|
||||
machine with no phone attached:
|
||||
|
||||
- development / ad-hoc profiles both require registered UDIDs;
|
||||
- an App-Store-method export needs no devices but produces an IPA that iOS refuses to sideload;
|
||||
- a locally `codesign`-ed `.app` without an embedded profile will not install either.
|
||||
|
||||
**What to do (owner, one minute, once):** connect the iPhone by cable and tap "Trust", then run
|
||||
the script below — Xcode registers the UDID itself via `-allowProvisioningUpdates`. Alternative if
|
||||
the phone is elsewhere: add its UDID under developer.apple.com → Certificates, Identifiers &
|
||||
Profiles → Devices. After that the device stays registered and the step never repeats.
|
||||
**Correction, same day: this is a FREE account, not a paid membership.** Xcode's own cache says so
|
||||
— `defaults read com.apple.dt.Xcode` → `IDEProvisioningTeamByIdentifier`:
|
||||
`teamName = "Paul Nothaft (Personal Team)"`, `teamType = "Personal Team"`,
|
||||
**`isFreeProvisioningTeam = 1`**. The note further up this file claiming "Paul has an Apple
|
||||
Developer Program" (section on the 2026-08-17 port) is therefore **wrong** and must not be relied
|
||||
on. Consequences, all confirmed against Apple's membership comparison and the free-provisioning
|
||||
limits:
|
||||
|
||||
- **There is no portal route to register a device.** Certificates, Identifiers & Profiles device
|
||||
management is a paid-membership feature. A free team registers a device only by having it
|
||||
**physically connected to this Mac and trusted**; Xcode then does it via
|
||||
`-allowProvisioningUpdates`. So "add the UDID on the website" is not an option here.
|
||||
- **Everything expires after 7 days** — provisioning profile, App ID and device registration alike.
|
||||
The app stops launching and has to be rebuilt and reinstalled, forever, every week.
|
||||
- Ceilings: 3 devices per platform, 10 App IDs per 7 days.
|
||||
- Whether `-exportArchive` even yields a usable `.ipa` for a free team is **untested and doubtful**
|
||||
— free provisioning is built around "Run straight onto the connected device" from Xcode, not
|
||||
around exporting a redistributable archive. If the export step fails once a phone is attached,
|
||||
install directly instead of debugging the export.
|
||||
|
||||
**What to do (owner):** connect the iPhone by cable, tap "Trust", then run the script below. That
|
||||
is the only path with this account type. If the weekly re-install turns out to be intolerable, the
|
||||
paid Apple Developer Program (99 €/year) is what buys the 1-year signature, portal-side UDID
|
||||
registration without the phone present, and 100 devices — `UMSETZUNGSPLAN.md` Phase 10 already
|
||||
flagged this as an owner decision, and it is now a decision with a known answer on one side.
|
||||
|
||||
**What was built instead of a hand-clicked Xcode signature:** `companion-app/scripts/ios-signieren.sh`
|
||||
— build → `cap sync` → signed archive → `.ipa` export, one command. It exists because `ios/` is
|
||||
|
||||
+9
-5
@@ -460,11 +460,15 @@ nicht ein Riesencommit.
|
||||
(baut Webbündel, synchronisiert die Hülle, archiviert signiert, exportiert die `.ipa`).
|
||||
Die Team-Kennung steht im Skript, weil `ios/` gitignored ist und jede in Xcode geklickte
|
||||
Einstellung beim nächsten `npx cap add ios` verschwinden würde.
|
||||
⚠️ **Einmalige Voraussetzung, die kein Skript herstellen kann:** das iPhone muss dem Team
|
||||
bekannt sein — Kabel anschließen und vertrauen, oder UDID unter developer.apple.com
|
||||
eintragen. Sonst: „Your team has no devices from which to generate a provisioning profile".
|
||||
⚠️ Entscheidungspunkt für den Besitzer: mit kostenlosem Apple-Konto läuft die Signatur nach
|
||||
**7 Tagen** ab (App neu aufspielen); ein bezahltes Entwicklerkonto (99 €/Jahr) macht 1 Jahr.
|
||||
⚠️ **Voraussetzung, die kein Skript herstellen kann:** das iPhone muss **per Kabel an diesem
|
||||
Mac hängen und vertraut sein**. Sonst: „Your team has no devices from which to generate a
|
||||
provisioning profile". Die UDID stattdessen auf developer.apple.com einzutragen geht **nicht** —
|
||||
das ist ein Recht der bezahlten Mitgliedschaft, und das Konto ist ein kostenloses Personal Team
|
||||
(`isFreeProvisioningTeam = 1`, belegt 2026-08-29, siehe `AGENTS.md` Abschnitt AI).
|
||||
⚠️ Entscheidungspunkt für den Besitzer, jetzt mit bekannter Faktenlage: das Konto **ist**
|
||||
kostenlos, die Signatur läuft also alle **7 Tage** ab (Profil, App-ID und Geräteeintrag
|
||||
gleichermaßen — App wöchentlich neu aufspielen). Ein bezahltes Entwicklerkonto (99 €/Jahr)
|
||||
macht daraus 1 Jahr und erlaubt die Geräteregistrierung ohne angeschlossenes Telefon.
|
||||
Bei 7-Tage-Schmerz ist die PWA-Stufe die Alltagslösung, Capacitor das Extra für Keychain/QR.
|
||||
8. ✅ Fertig wenn: App startet nativ auf dem iPhone, Token liegt im Keychain (Test: App löschen und
|
||||
neu installieren → Token weg; Backup/Restore-Verhalten notieren), QR-Einrichtung funktioniert
|
||||
|
||||
@@ -77,10 +77,11 @@ dort niemals Markendateien ablegen.
|
||||
(`src/api/ablageNativ.ts`, von `main.tsx` aktiviert) und wird automatisch
|
||||
aktiv, sobald die Hülle existiert
|
||||
- Signierte `.ipa`: `scripts/ios-signieren.sh` baut und signiert in einem
|
||||
Durchlauf, **sobald das iPhone dem Entwicklerteam bekannt ist** (Kabel
|
||||
anschließen und vertrauen, oder UDID unter developer.apple.com eintragen).
|
||||
Durchlauf, **sobald das iPhone per Kabel am Mac hängt und vertraut ist**.
|
||||
Vorher bricht Apple den Profilabruf ab - das ist die einzige verbleibende
|
||||
Hürde, der Gerätebau selbst läuft fehlerfrei durch
|
||||
Hürde, der Gerätebau selbst läuft fehlerfrei durch. Das Konto ist ein
|
||||
kostenloses Personal Team: die UDID lässt sich nicht auf developer.apple.com
|
||||
nachtragen, und die Signatur verfällt alle 7 Tage
|
||||
- QR-Einrichtung als Alternative zum Einfügen des Tokens
|
||||
- Live-Ansicht der laufenden Fahrt: gebaut, aber über
|
||||
`src/funktionen.ts` abgeschaltet, bis der FMM003 echte Werte liefert
|
||||
|
||||
@@ -8,12 +8,26 @@
|
||||
# `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.
|
||||
# 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)"
|
||||
|
||||
Reference in New Issue
Block a user