Files
Vorrania/ios
Scarriffle 96172c6fa0 iOS: Ablauf-Benachrichtigungen, je Server einstellbar
Die App zeigte "Bald ablaufend" nur beim Oeffnen. Jetzt erinnert sie aktiv vor
dem Ablauf - mit frei zusammenstellbaren Regeln, pro Server getrennt.

Eine Regel ist "X Tage/Wochen vor Ablauf", optional nur fuer eine Kategorie
(inklusive deren Unterkategorien), einmalig oder taeglich wiederkehrend. Eine
Kategorie-Regel ersetzt fuer ihre Produkte die allgemeine - so kann Molkerei
frueher warnen als Chips. Dazu am Ablauftag eine letzte, deutliche Warnung fuer
alle Produkte (eigener Schalter). Die Meldungen kommen als Tages-Sammelmeldung,
je Server eine, zur pro Server eingestellten Uhrzeit.

Weil Vorrania im Heimnetz laeuft und von unterwegs oft nicht erreichbar ist,
kann die App nicht zuverlaessig im Hintergrund abfragen - und iOS verlangt
ohnehin, dass lokale Benachrichtigungen im Voraus geplant werden. Also: aus den
Ablaufdaten kuenftige Termine berechnen und einplanen; aufgefrischt beim
Oeffnen, im Vordergrund und best-effort per Hintergrund-Aktualisierung. Geplant
wird fuer alle eingerichteten Server, jeder mit seinem Token aus dem Keychain;
unerreichbare werden uebersprungen. iOS erlaubt 64 ausstehende Meldungen je App,
deshalb die naechstliegenden zuerst und bei 60 gekappt.

Einstellungen sitzen hinter der Glocke je Server in der Server-Verwaltung (nicht
admin-beschraenkt, es ist eine Geraete-Einstellung). Getippt wechselt die
Meldung auf den betroffenen Server und oeffnet "Bald ablaufend". Keine
Backend-Aenderung: die Kategorie kommt aus /products, der Ablauf aus /expiring.

Die Rechenlogik (ExpiryPlanner) ist bewusst netz- und iOS-frei und mit einem
eigenstaendigen Swift-Harnisch geprueft: Kategorie-Vorrang, Unterkategorien,
Rueckfall auf die allgemeine Regel, einmalig vs. wiederkehrend und die letzte
Warnung. Modelle gegen echte /expiring- und /products-Antworten abgeglichen,
App startet ohne Absturz (auch die BGTask-Registrierung).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-23 21:15:09 +02:00
..
2026-07-23 17:35:45 +02:00
2026-07-23 17:35:45 +02:00

Vorrania iOS-App

Native SwiftUI-App zum Ein- und Auslagern per Barcode-Scan. Sie spricht dieselbe REST-API wie die Web-Oberfläche.

Stand: Läuft auf dem Gerät. Login, Scanner, Einlagern mit mehreren Chargen/MHDs, MHD per Texterkennung, Auslagern mit Chargenauswahl, Artikel anlegen aus Open Food Facts, Einkaufsliste, Ablaufliste sowie Produkte ansehen und bearbeiten.

Projekt in Xcode öffnen

Variante A mit XcodeGen (empfohlen)

brew install xcodegen
cd ios
xcodegen generate
open Vorrania.xcodeproj

project.yml beschreibt das Projekt vollständig (Bundle-ID, Info.plist, Shortcuts, URL-Schema).

Variante B ohne XcodeGen

  1. Xcode → File ▸ New ▸ Project…App, Interface SwiftUI, Sprache Swift
  2. Produktname Vorrania, Bundle-ID z. B. com.scarriffle.vorrania
  3. Die von Xcode erzeugte ContentView.swift und …App.swift löschen
  4. Den Ordner Sources/ per Drag & Drop ins Projekt ziehen („Copy items if needed")
  5. In den Target-Einstellungen die mitgelieferte Sources/Info.plist als Info.plist setzen (Build Settings ▸ Info.plist File) und Generate Info.plist File auf No stellen

Auf dem iPhone installieren

  1. iPhone per Kabel verbinden, in Xcode als Ziel auswählen
  2. Signing & Capabilities → dein Apple-Developer-Team wählen
  3. ▶︎ 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:

  1. Kurzbefehle ▸ + ▸ Aktion URL öffnen
  2. URL vorrania://checkin (bzw. vorrania://checkout) eintragen
  3. Kurzbefehl benennen, dann ▸ Zum Home-Bildschirm hinzufügen

Beide Wege öffnen die App direkt in der Kamera.

Aufbau der Quellen

Datei Inhalt
VorraniaApp.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)
ProductDetailView.swift Produkt bearbeiten, Chargen korrigieren und löschen
ListViews.swift Einkaufsliste, „bald ablaufend", Produktliste
DateScanView.swift / BestBeforeText.swift MHD per Texterkennung ablesen
DisplaySettings.swift Datumsformat und Einheiten-Beschriftungen vom Server
CategoryPicker.swift Kategorie-Auswahl und Gruppe anlegen

Gruppe und Kategorie zwei verschiedene Dinge

Gruppe dient der Bestandsrechnung: Mehl von Rewe, Aldi und Migros zählen zusammen, wichtig ist „ich habe 5 kg Mehl“. Eine Gruppe hat deshalb einen gemeinsamen Mindestbestand mit Einheit und EAN-Codes. Ordnest du einen Artikel einer Gruppe zu, erscheint sein EAN-Code automatisch dort; wechselt er die Gruppe, wandert der Code mit.

Kategorie dient allein dem Überblick („Süßwaren“, „Molkereiprodukte“) und ist verschachtelbar wie ein Lagerort (Süßwaren → Schokolade). Sie hat keinen Bestand, keinen Mindestbestand und keine EAN-Codes. Filterst du auf eine Oberkategorie, erscheinen die Artikel ihrer Unterkategorien mit. Beim Anlegen schlägt der Server eine Kategorie aus der Open-Food-Facts-Einordnung vor.

Noch offen

  • Push-Benachrichtigungen bei ablaufenden Produkten
  • Lagerort je Charge beim Einlagern wählbar