In der Chargenzeile beim Einlagern gibt es einen Knopf "MHD scannen". Er oeffnet die Texterkennung von VisionKit; erkannte Daten erscheinen als Vorschlag und werden erst uebernommen, wenn man sie antippt. Bewusst kein automatisches Uebernehmen: Eine Fehllesung beim MHD faellt sonst erst auf, wenn die Ware bereits falsch einsortiert ist. Der Parser deckt die Schreibweisen ab, die auf Verpackungen vorkommen - Tagesdaten (12.09.2026, 2026-09-12, 12/09/2026, 12.09.26) und Monatsangaben (09/2026, 09.2026, 2026-09, 09/26). Erkennt der Aufdruck nur Monat und Jahr, stellt sich die Eingabe sichtbar auf Monat/Jahr um. Damit aus Chargennummern und EAN-Codes keine Phantasiedaten werden, greifen mehrere Einschraenkungen: Muster mit Tag werden zuerst geprueft, ein bereits erkannter Textabschnitt wird nicht erneut ausgewertet, Monate ausserhalb 1-12 entfallen und das Jahr muss im Fenster von fuenf Jahren rueckwaerts bis dreissig vorwaerts liegen. Der Knopf erscheint nur, wenn das Geraet Texterkennung unterstuetzt (Neural Engine); sonst bleibt die Eingabe von Hand. Getestet: Der Parser wurde eigenstaendig uebersetzt und gegen 14 Faelle geprueft, alle korrekt - darunter, dass "12.09.2026" nicht als Monatsangabe gelesen wird, dass eine EAN keine Treffer erzeugt und dass unplausible Jahre und Monate verworfen werden. Der iOS-Geraetebuild laeuft fehlerfrei durch. Die Erkennung an einer echten Verpackung habe ich nicht selbst ausprobiert. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Project-Good – iOS-App
Native SwiftUI-App zum Ein- und Auslagern per Barcode-Scan. Sie spricht dieselbe REST-API wie die Web-Oberfläche.
Stand: Erste lauffähige Fassung (Login, Scanner, Einlagern mit mehreren Chargen/MHDs, Auslagern mit Chargenauswahl, Artikel anlegen aus Open Food Facts). Sie wurde bisher nicht in Xcode kompiliert – auf dem Entwicklungsrechner ist kein macOS/Xcode vorhanden. Rechne beim ersten Build mit Kleinigkeiten.
Projekt in Xcode öffnen
Variante A – mit XcodeGen (empfohlen)
brew install xcodegen
cd ios
xcodegen generate
open ProjectGood.xcodeproj
project.yml beschreibt das Projekt vollständig (Bundle-ID, Info.plist,
Shortcuts, URL-Schema).
Variante B – ohne XcodeGen
- Xcode → File ▸ New ▸ Project… → App, Interface SwiftUI, Sprache Swift
- Produktname
ProjectGood, Bundle-ID z. B.com.scarriffle.projectgood - Die von Xcode erzeugte
ContentView.swiftund…App.swiftlöschen - Den Ordner
Sources/per Drag & Drop ins Projekt ziehen („Copy items if needed") - In den Target-Einstellungen die mitgelieferte
Sources/Info.plistals Info.plist setzen (Build Settings ▸ Info.plist File) und Generate Info.plist File auf No stellen
Auf dem iPhone installieren
- iPhone per Kabel verbinden, in Xcode als Ziel auswählen
- Signing & Capabilities → dein Apple-Developer-Team wählen
- ▶︎ Run. Beim ersten Start auf dem iPhone unter Einstellungen ▸ Allgemein ▸ VPN & Geräteverwaltung dem Entwickler vertrauen
Erste Schritte in der App
Beim Start nach der Server-Adresse fragen lassen, z. B. http://192.168.1.50:8080
(dieselbe Adresse wie im Browser), dann mit deinem Benutzer anmelden. Adresse und
Token bleiben gespeichert – das Token liegt im Keychain.
Home-Screen-Shortcuts
Es gibt zwei Wege direkt in den Scan-Bildschirm:
Schnellaktionen – langer Druck auf das App-Symbol zeigt „Einlagern" und „Auslagern" (funktioniert ohne weitere Einrichtung).
Eigene Symbole auf dem Home-Bildschirm – über die Apple-App Kurzbefehle:
- Kurzbefehle ▸ + ▸ Aktion URL öffnen
- URL
projectgood://checkin(bzw.projectgood://checkout) eintragen - Kurzbefehl benennen, dann ▸ Zum Home-Bildschirm hinzufügen
Beide Wege öffnen die App direkt in der Kamera.
Aufbau der Quellen
| Datei | Inhalt |
|---|---|
ProjectGoodApp.swift |
App-Einstieg, Schnellaktionen, URL-Schema |
Session.swift |
Server-Adresse (UserDefaults) und Token (Keychain) |
APIClient.swift |
REST-Aufrufe gegen /api/... |
Models.swift |
Codable-Typen passend zu backend/app/schemas.py |
ScannerView.swift |
Kamera + Barcode-Erkennung (EAN-8/13, UPC-E, Code128, QR) |
RootView.swift |
Startbildschirm und Routing |
LoginView.swift |
Server + Anmeldung |
CheckInView.swift / CheckInFormView.swift |
Scan → Menge, mehrere Chargen mit MHD |
CheckOutView.swift |
Scan → Menge, Chargenauswahl oder FEFO |
ProductViews.swift |
Artikelsuche und Anlegen (mit OFF-Vorbefüllung) |
Noch offen
- Einkaufsliste und „bald ablaufend" in der App
- Gruppenauswahl beim Anlegen (aktuell wird die Gruppe aus dem gescannten EAN-Code übernommen, falls hinterlegt)
- Push-Benachrichtigungen bei ablaufenden Produkten
- App-Icon