Tankstelle zweizeilig und antippbar, Belegkarte ohne toten Knopf (2026.9.4.5)

Sieben Meldungen des Eigentuemers, beide Codebasen.

Karte im Einzelbeleg: "Position laedt nicht" und "der Button funktioniert
nicht" waren dieselbe Stelle - ohne aufloesbaren Ort malte das Panel einen
beliebigen Ausschnitt und liess den Zentrieren-Knopf fuer immer disabled.
Beide zeigen jetzt die Auskunft statt einer Karte und unterscheiden dabei
"steht nicht im Beleg" von "findet niemand". Dazu ein echter Paritaetsmangel:
die App schlug nur station_address nach, das Panel faellt seit jeher auf den
Namen zurueck - von 16 Testbelegen tragen vier eine Anschrift.

Der Suchbegriff darf Name und Anschrift NICHT zusammensetzen: gemessen findet
Nominatim "Pascalstr. 8, 85057 Ingolstadt", mit dem Betreibernamen davor
nichts. Jetzt zwei Kandidaten nacheinander (Anschrift, dann Name); fuer den
Kartendienst dagegen beides zusammen, weil Apple und Google Betriebsnamen
kennen.

Tankstelle steht ueber die volle Kachelbreite, zweizeilig (Tankstelle und
Strasse / Ort) und fuehrt beim Tippen in den Standard-Kartendienst - Apple
Karten auf Apple-Geraeten, sonst Google Maps. Dieselbe Wahl jetzt auch fuer
Fahrzeugstandort und Autohaus.

SmartDeal-Ersparnis brach um, weil die dt-Spalte 150,00px breit war und ihr
Inhalt 150,20px - zwei Zehntel Pixel, Zeile dadurch 44,8 statt 26,4px hoch.

Der Regler "Fahrt beenden" schreibt nicht mehr beim Loslassen: derselbe Wert
stellt den Schlaf-Timeout des Dongles, das soll bewusst ausgeloest werden.
Speichern/Verwerfen erscheinen nur bei echter Aenderung.

Share-Erweiterung: an der ausgelieferten .ipa gemessen trug sie 1.0, die App
2026.9.3.3 - iOS registriert eine Erweiterung mit abweichender Versionsnummer
nicht, sie fehlt dann im Teilen-Blatt. ios-signieren.sh schreibt die Version
jetzt in beide Ziele und liest die fertige .ipa gegen. Zwischenablage: dritter
Weg ueber UIPasteboard.itemProviders, und ein fehlender nativer Teil wird als
solcher gemeldet statt als "Kein Zugriff".

Am Geraet gesetzt: 1003 Network Ping Timeout 0 -> 60 s, 1004 ACK Type
TCP/IP -> AVL. Beide liegen bei flespi als pending bereit.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-04 10:10:55 +02:00
parent 7f386d19ea
commit 43f25e2e0d
17 changed files with 1000 additions and 60 deletions
+27 -2
View File
@@ -18,12 +18,19 @@
// auch `com.adobe.pdf`. Der Preis ist derselbe wie im Web iOS zeigt beim
// Zugriff seine eigene Einfügen-Rückfrage, und das ist richtig so.
//
// ZWEI FORMEN, IN DENEN EIN PDF IN DER ZWISCHENABLAGE LIEGT
// DREI FORMEN, IN DENEN EIN PDF IN DER ZWISCHENABLAGE LIEGT
// ---------------------------------------------------------
// 1. Als Daten unter `com.adobe.pdf` so legen es die meisten Apps ab.
// 2. Als Datei-URL Mail kopiert einen Anhang oft nur als Verweis auf eine
// temporäre Kopie. Ohne den zweiten Weg bliebe genau der Fall übrig, für
// den der Knopf gedacht ist.
// 3. Als Zusage (`NSItemProvider`) die Datei existiert dann noch gar nicht,
// die kopierende App liefert sie erst auf Anforderung. `data(forPasteboardType:)`
// gibt dabei nil zurück und `urls` bleibt leer; nur der Anbieter kennt sie.
// Das ist Apples eigener, empfohlener Weg und der einzige, der auch eine
// Datei aus einer Sandbox einer anderen App zuverlässig herausgibt Weg 2
// scheitert dort am Lesezugriff. Er ist asynchron, deshalb steht er hier
// zuletzt: die beiden schnellen Wege sollen nicht auf ihn warten.
//
// DIESE DATEI IST VERSIONIERT, ios/ NICHT.
// `npx cap add ios` erzeugt den nativen Ordner neu und würde alles darin
@@ -69,6 +76,24 @@ public class BelegZwischenablagePlugin: CAPPlugin, CAPBridgedPlugin {
}
}
call.resolve([:])
// Dritter Weg: die Datei liegt nur als Zusage vor.
let anbieter = ablage.itemProviders.first {
$0.hasItemConformingToTypeIdentifier(UTType.pdf.identifier)
}
guard let anbieter else {
return call.resolve([:])
}
anbieter.loadDataRepresentation(forTypeIdentifier: UTType.pdf.identifier) { daten, _ in
guard let daten, !daten.isEmpty else {
// Kein Fehler: die Oberfläche sagt zu einem leeren Ergebnis
// ohnehin das Passende (zwischenablage.ts).
return call.resolve([:])
}
let name = anbieter.suggestedName.map { $0.hasSuffix(".pdf") ? $0 : $0 + ".pdf" }
call.resolve([
"base64": daten.base64EncodedString(),
"name": name ?? "beleg.pdf",
])
}
}
}