Merge remote-tracking branch 'origin/main'
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
# AGENTS.md — Project state, review findings, open items, and working rules
|
||||
|
||||
**Last updated: 2026-08-23** (merged the `umsetzung-datametric360` branch — companion app phases
|
||||
**Last updated: 2026-08-29** (iOS signing prepared end to end — device build verified, signature
|
||||
blocked on a device registration at Apple, see section AI; 2026-08-23: merged the
|
||||
`umsetzung-datametric360` branch — companion app phases
|
||||
1–10 done, see `UMSETZUNGSPLAN.md`; 2026-08-13: cleaned up remaining EU Data Act residue, fixed
|
||||
oversized toggle switches, and fixed a desktop-layout audit (settings button / rings logo / popups
|
||||
overflowing past the capped content column) — see `DESIGN_AUDIT_2026-08-13.md`; 2026-08-16: fixed
|
||||
@@ -1435,7 +1437,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:
|
||||
@@ -4601,6 +4604,78 @@ via log (single `audi_dashboard` loader warning, no traceback).
|
||||
|
||||
---
|
||||
|
||||
## AI. iOS signing prepared, and the one thing that blocks it (2026-08-29)
|
||||
|
||||
Task was: build the iOS app, sign it, commit the result — `UMSETZUNGSPLAN.md` Phase 10 step 7, the
|
||||
last open item of that phase. **Result: everything except the signature itself is done and
|
||||
verified; the signature is blocked on a fact about the Apple account, not on this repo.**
|
||||
|
||||
What was verified on this machine (Xcode 26.4, Node 22.20, `main` at `2026.8.28.18`):
|
||||
|
||||
- `npm run typecheck` clean, `npm test` 146/146 green, `npm run build` clean, `npx cap sync ios`
|
||||
clean (both plugins found: secure-storage 8.0.0, capgo/updater 8.51.14).
|
||||
- **Simulator build (Release) succeeds.**
|
||||
- **Device build (Release, `generic/platform=iOS`, arm64) succeeds** with signing switched off —
|
||||
8.5 MB `App.app`. So the code, the plugins and the Swift-package graph are all fine on device;
|
||||
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 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) 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.
|
||||
|
||||
**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
|
||||
gitignored on purpose (regenerable from the web bundle), which means **any signing setting clicked
|
||||
in Xcode is silently lost at the next `npx cap add ios`**. A versioned script is the only place the
|
||||
team ID can survive. `APPLE_TEAM_ID` overrides it; output lands in `ios/build/App.ipa` (already
|
||||
covered by the `ios/` ignore, no build artifact enters git). Verified by running it end to end: it
|
||||
passes build, sync and archive setup and stops exactly at Apple's device requirement, nowhere else.
|
||||
|
||||
Deliberately **not** done: committing an unsigned `.ipa` as a stand-in. It is not what was asked
|
||||
for, it cannot be installed as-is, and a per-build ~6 MB binary would sit in the git history
|
||||
forever. The OTA path already covers "new UI without Xcode" (section above) — Xcode is only needed
|
||||
when native code or the signature itself changes.
|
||||
|
||||
Phase 10 step 7 therefore stays **unchecked** in `UMSETZUNGSPLAN.md`: the app is not on the phone
|
||||
yet, and marking it done would be exactly the silent staleness this project keeps designing against.
|
||||
|
||||
---
|
||||
|
||||
## Working conventions (observed — keep them)
|
||||
|
||||
- German is the project language: identifiers, comments, commits, UI texts. Exceptions:
|
||||
|
||||
Reference in New Issue
Block a user