docs: Uebergabe und README sagen nicht mehr, dass es kein Xcode gibt

Die wichtigste Aussage der Uebergabe war ueberholt: auf dieser Maschine liegt
Xcode 27, Stufe 1 ist gebaut, getestet und im Simulator gestartet. Wer das
nicht weiss, schreibt weiter blind und hinterlaesst dem Nutzer Fehler.

Dazu neu festgehalten: der Befehl nach jeder neuen Datei (xcodegen generate),
was beim Bauen auffiel (nur Swift 5, nicht Swift 6), und der naechste
Stolperstein - App Transport Security laesst nur https zu, auch kein
http://localhost. Ueber die Verbindung geht die Geraetemarke, ein Vollzugang;
die Ausnahme ist deshalb eine Entscheidung des Nutzers, keine Nebensache.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Guido
2026-10-21 05:47:23 +02:00
co-authored by Claude Opus 5
parent ffe1870bb8
commit e2f4e755f1
3 changed files with 89 additions and 49 deletions
+36 -21
View File
@@ -1,28 +1,38 @@
# Certain für iOS
Native App zum Certain-Backend. Der Code hier ist **nie übersetzt worden** — auf
der Maschine, auf der er entstanden ist, gibt es kein Xcode. Rechne beim ersten
Bauen mit Fehlern und schick sie mir; das ist eingeplant.
Native App zum Certain-Backend.
> **Wer hier weiterarbeitet, liest zuerst [UEBERGABE.md](UEBERGABE.md).** Dort
> steht, was entschieden ist, was fertig ist, was als Nächstes dran ist und
> welche Eigenheiten das Backend hat. Dieses README erklärt nur, wie man den
> Code ins Projekt bekommt.
> welche Eigenheiten das Backend hat. Dieses README erklärt nur das Projekt.
## Projekt anlegen
## Bauen und starten
1. Xcode → neues Projekt → **App**, Schnittstelle **SwiftUI**, Sprache **Swift**.
2. Mindestversion auf **iOS 26** stellen.
3. Als Geräte **iPhone und iPad** ankreuzen.
4. Die Datei `ContentView.swift`, die Xcode anlegt, **löschen** — `App/` bringt
einen eigenen Einstiegspunkt mit.
5. Die Ordner aus `ios/` per Ziehen ins Projekt übernehmen, mit *Create groups*
(nicht *folder references*).
6. `Texte/de.lproj` und `Texte/en.lproj` übernehmen und unter
*Project → Info → Localizations* **Deutsch** und **Englisch** eintragen.
Deutsch ist die Grundsprache.
Einfach `Certain.xcodeproj` öffnen — es liegt mit im Repository.
Der Ordner `Tests/` gehört in ein Test-Ziel, nicht in das App-Ziel.
Die Wahrheit ist aber `project.yml`: eine XcodeGen-Spezifikation, aus der das
Projekt entsteht. **Wer eine Swift-Datei anlegt, läuft danach einmal
`xcodegen generate`**, sonst kennt Xcode sie nicht. Ein neuer *Ordner* will
ausserdem eine Zeile unter `sources:`.
```
brew install xcodegen # einmalig
cd ios && xcodegen generate
xcodebuild -project Certain.xcodeproj -scheme Certain \
-destination 'platform=iOS Simulator,name=iPhone 17 Pro' build
xcodebuild -project Certain.xcodeproj -scheme Certain \
-destination 'platform=iOS Simulator,name=iPhone 17 Pro' test
```
Festgelegt sind dort: Bündelkennung `com.scarriffle.certain`, Team
`PP34X97WS3`, iPhone und iPad, Grundsprache Deutsch, **iOS 26** als
Mindestversion, Sprachfassung Swift 5. Wer mit einem anderen Apple-Konto baut,
trägt seine Team-ID in `project.yml` ein.
**Nur https.** App Transport Security steht auf der Voreinstellung, ein Server
unter `http://…` wird also abgewiesen — auch `http://localhost` beim
Entwickeln. Das ist Absicht: über die Verbindung geht die Gerätemarke, ein
Vollzugang. Wer eine Ausnahme braucht, trägt sie bewusst in `project.yml` ein.
## Was wohin gehört
@@ -90,12 +100,17 @@ heraus, dass `created_at` ohne Zeitzone und mit Mikrosekunden kommt
(`2026-10-20T14:18:15.780705`) — dafür hat `Zeitpunkt` einen dritten Leser,
und `GrundlagenTests` deckt den Fall ab.
**Nicht geprüft:** Ob das Ganze übersetzt. Kein Xcode auf der Maschine, auf
der es entstanden ist.
**Ebenfalls geprüft:** Dass es übersetzt. Ein einziger Fehler in 2600 blind
geschriebenen Zeilen (`[:]` statt `[]` in `CertainClient.schickeDatei`), danach
keine Warnung im eigenen Code, 28 Tests grün, Start im Simulator bis zur
Serverabfrage.
### Wo es beim ersten Bauen am ehesten klemmt
**Nicht geprüft:** Der Weg gegen ein echtes Backend — anmelden, zweiter Faktor,
Marke anlegen, Konten laden.
Nach abnehmender Wahrscheinlichkeit:
### Wo es beim ersten Bauen am ehesten klemmte
Nichts davon trat ein; die Liste bleibt als Landkarte der heiklen Stellen.
1. **`@testable import Certain`** in `Tests/GrundlagenTests.swift` — muss auf
den Namen deines App-Ziels zeigen. Heisst es anders, anpassen.