Files
Vorrania/ios/Sources/Info.plist
T
ScarriffleandClaude Opus 5 09a763a823 NFC-Tags fuer Einzelstuecke: beschreiben und lesen
Ein aufgeklebtes QR-Etikett uebersteht keine Waesche. Kleidungsstuecke bekommen
deshalb eingenaehte NFC-Tags. Auf das Tag kommt genau das, was auch im QR steckt
(vorrania://i/<UID>) - damit bleibt das Einlesen inhaltlich unveraendert, nur die
Erfassungsart ist neu. Backend und Web brauchten nichts: die UID vergibt der
Server, und GET /items/by-uid/<UID> gibt es laengst.

Gelesen wird nur bei geoeffneter App. iOS startet Apps beim Antippen im
Hintergrund ausschliesslich ueber https-Universal-Links auf einer beanspruchten
Domain und ignoriert eigene Schemes dabei - eine feste Domain ist fuer einen
selbstgehosteten Dienst aber gerade der falsche Weg (siehe f981f41).

Die /i/-Zerlegung lag dreifach kopiert in CheckInView, LookupScanView und
AssignScanView und steckt jetzt in einzelstueckCode(aus:). Die nackte UID wird
nur fuer NFC akzeptiert: eine achtstellige EAN-8 kann zufaellig genau wie eine
UID aussehen, und die Kamera sieht fremde Barcodes - ein Tag haben wir selbst
beschrieben.

Zwei Altlasten in denselben Dateien mit erledigt:
- project.yml deklarierte die applinks-Domain weiter, obwohl f981f41 sie
  entfernt hat. XcodeGen erzeugt die Entitlements aus diesem Block und schrieb
  sie bei jedem "generate" zurueck; die Domain existiert laengst nicht mehr.
- AssignScanView sendete ItemUpdateRequest ohne priceCents/currency. Da encode
  immer alle Felder schreibt (auch null), hat ein Zuordnen per Scan Kaufpreis
  und Waehrung stillschweigend geloescht.

Ebenfalls raus: QRImage und qrLink(forUid:) in ItemViews - ungenutzt, und
qrLink baute noch das alte https-Format.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-12 13:37:24 +02:00

125 lines
4.5 KiB
Plaintext

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<!-- Von Xcode aus den Build-Einstellungen gefuellt -->
<!-- Deutsch als Sprache der App: Sonst zeichnet iOS DatePicker und
Monatsnamen auf Englisch ("10. Dec 2027"). -->
<key>CFBundleDevelopmentRegion</key>
<string>de</string>
<key>CFBundleLocalizations</key>
<array>
<string>de</string>
</array>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleDisplayName</key>
<string>Vorrania</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<!-- App-Store-Kategorie. Muss hier stehen: Das Projekt nutzt ein eigenes
Info.plist (GENERATE_INFOPLIST_FILE = NO), deshalb wird die
INFOPLIST_KEY_LSApplicationCategoryType-Build-Einstellung NICHT in das
gebaute Info.plist uebernommen. -->
<key>LSApplicationCategoryType</key>
<string>public.app-category.utilities</string>
<!-- Export-Compliance: Die App nutzt nur die Standard-Verschluesselung des
Systems (HTTPS ueber Apples Betriebssystem) und faellt damit unter die
Ausnahme. Mit diesem Schluessel entfaellt die "App Encryption
Documentation"-Rueckfrage bei jedem Upload nach App Store Connect. -->
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
<key>UILaunchScreen</key>
<dict/>
<!-- Am iPhone bewusst nur Hochkant - damit sich beim Drehen nichts
verstellt. Am iPad verlangt das System alle Ausrichtungen, solange die
App nicht auf Vollbild besteht. -->
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<!-- Kamera für den Barcode-Scan -->
<key>NSCameraUsageDescription</key>
<string>Die Kamera wird zum Scannen von Barcodes beim Ein- und Auslagern verwendet.</string>
<!-- NFC für die eingenähten Tags an Einzelstücken -->
<key>NFCReaderUsageDescription</key>
<string>NFC wird zum Lesen und Beschreiben der Tags an Einzelstücken verwendet.</string>
<!-- Lokaler Server ohne HTTPS (Heimnetz) -->
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsLocalNetworking</key>
<true/>
</dict>
<!-- Hintergrund-Aktualisierung: die App frischt gelegentlich den Plan der
Ablauf-Benachrichtigungen auf. Zeitpunkt bestimmt iOS. -->
<key>UIBackgroundModes</key>
<array>
<string>fetch</string>
</array>
<key>BGTaskSchedulerPermittedIdentifiers</key>
<array>
<string>com.scarriffle.vorrania.refresh</string>
</array>
<!-- Schnellaktionen beim langen Druck auf das App-Symbol -->
<key>UIApplicationShortcutItems</key>
<array>
<dict>
<key>UIApplicationShortcutItemType</key>
<string>com.scarriffle.vorrania.checkin</string>
<key>UIApplicationShortcutItemTitle</key>
<string>Einlagern</string>
<key>UIApplicationShortcutItemIconType</key>
<string>UIApplicationShortcutIconTypeAdd</string>
</dict>
<dict>
<key>UIApplicationShortcutItemType</key>
<string>com.scarriffle.vorrania.checkout</string>
<key>UIApplicationShortcutItemTitle</key>
<string>Auslagern</string>
<key>UIApplicationShortcutItemIconType</key>
<string>UIApplicationShortcutIconTypeRemove</string>
</dict>
</array>
<!-- vorrania://checkin bzw. vorrania://checkout -->
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>com.scarriffle.vorrania</string>
<key>CFBundleURLSchemes</key>
<array>
<string>vorrania</string>
</array>
</dict>
</array>
</dict>
</plist>