Skip to content

Versand & Sync

Wie Datensätze von Apple Health zu deinen Servern gelangen, was die Zustände bedeuten und was Courier beim Timing verspricht (und ehrlicherweise nicht verspricht).

Auslöser

  1. Hintergrundzustellung — Apple Health empfängt neue Schlaf-/Workout-Daten und iOS weckt Courier kurz auf; die App liest das Delta und versendet.
  2. Öffnen der App — Vordergrund-Sync beim Start und bei der Rückkehr.
  3. Manuell — die Versand-Aktionen in der App oder der Kurzbefehl Jetzt versenden.
  4. Stapelversand — Redaktion → Stapelversand: Zeitraum wählen und die Historie an einen beliebigen Abonnenten nachliefern.

Alle vier speisen dieselbe Pipeline.

Eintragszustände

Jeder ausgehende Datensatz durchläuft eine explizite Zustandsmaschine, die persistiert wird, damit ein erzwungenes Beenden oder ein Neustart nichts aus den Augen verliert:

ZustandBedeutung
queuedWartet, bis es dran ist
awaitingRouteOutdoor-Workout, dessen GPS-Track noch nicht von der Watch angekommen ist — Courier wartet, statt einen unvollständigen Datensatz zu senden
sendingAnfrage unterwegs
sentZugestellt (2xx). Im Journal festgehalten
failedFehlgeschlagen und quittiert — wird nie automatisch erneut versucht; nutze den manuellen erneuten Versand
needsAttentionFehlgeschlagen/unvollständig und noch nicht quittiert: Wiederholungen erschöpft, Route nie angekommen oder die Quelldaten sind verschwunden. Roter Punkt + Mitteilung

Wiederholungen

  • Vordergrund-Versände wiederholen Netzwerkfehler mit exponentiellem Backoff (2 s → 4 s → 8 s → 16 s).
  • Hintergrund-Versände bekommen einen einzigen Versuch mit 15 Sekunden Timeout — Hintergrundzeit unter iOS ist knapp, und Courier verzockt sie nicht. Fehlschläge reihen sich einfach zur Prüfung ein.
  • Nichts wird jemals automatisch wiederholt, sobald es failed erreicht hat — du behältst die Kontrolle darüber, was erneut gesendet wird.

Idempotenz

Jede Anfrage trägt einen Idempotency-Key-Header:

  • Normale Sendungen und manuelle Wiederholungen verwenden die stabile canonical id des Datensatzes — ein Endpunkt, der anhand des Schlüssels dedupliziert, speichert dasselbe Workout nie doppelt, egal wie oft die Zustellung wiederholt wird.
  • Absichtliche Duplikate („noch eine Kopie senden") rotieren den Schlüssel zu id#2, id#3, …, damit idempotente Endpunkte gewollte Kopien trotzdem annehmen können.

Wenn dein Server Idempotency-Key respektiert (oder per data.id upsertet), wird die gesamte Pipeline an jedem Punkt gefahrlos wiederholbar.

Das Journal

Redaktion → Versandverlauf zeigt jeden Versand mit Zeitstempel, Abonnent, HTTP-Status und Antwort-Ausschnitt. Das Journal bewahrt 6 Monate Historie auf; ältere Einträge werden automatisch aufgeräumt — die zugestellten Inhalte selbst liegen natürlich weiter auf deinen Endpunkten.

Timing, ganz ehrlich

Die Hintergrundzustellung wird von iOS gedrosselt. Rechne mit Minuten bis etwa einer Stunde Verzögerung; im schlimmsten Fall passiert der Versand beim nächsten Öffnen der App. Courier macht das in seinen UI-Texten sichtbar, statt Echtzeit vorzutäuschen. Wenn du eine garantierte Sendung sofort brauchst: Öffne die App oder nutze den Kurzbefehl Jetzt versenden.

Mitteilungen

Zwei Modi (Redaktion → Mitteilungen):

  • Immer — eine zusammenfassende Mitteilung nach jeder automatischen Versandrunde, ob Erfolg oder Fehlschlag. Standard.
  • Nur bei Fehlern — Stille, außer etwas braucht dich.

Mitteilungen benötigen die Systemberechtigung; wurde sie verweigert, zeigt Courier den echten Status und eine Abkürzung zu den iOS-Einstellungen, statt so zu tun, als würde es funktionieren.

Zu Hause gedruckt · © 2026 Xheldon