Die App zeigt kein Update an, obwohl das neue Archiv bereits auf dem Server liegt.

Schnellster Weg: Prüfen Sie die komplette Kette aus Update-Quelle, Sparkle-Archivsignatur und Appcast mit einer tatsächlich installierten älteren Version. Erst wenn diese Version das Update lädt, installiert und startet, ist der Release-Ablauf geprüft. Da Build, Signierung und Abnahmetest macOS benötigen, kann ein Remote Mac die Veröffentlichungsumgebung übernehmen, ohne dass dafür ein lokaler Mac bereitstehen muss.

Dieser Leitfaden richtet sich an Entwickler, die erstmals automatische Updates in eine macOS-App integrieren.
Auch Maintainer mit bereits veröffentlichten Versionen finden hier Prüfschritte für Kompatibilität und Signierung.
Kleine Teams ohne lokalen Mac können anhand der Entscheidungspunkte bewerten, ob ein Remote Mac zu ihrem Release-Ablauf passt.

01

Vor dem ersten Release: Verteilungsweg und Altversionen festlegen

Sparkle ist für Updates einer App gedacht, die außerhalb des Mac App Store verteilt wird. Vermischen Sie diesen Ablauf nicht mit App-Store-Updates: Die Distributionswege haben unterschiedliche Anforderungen und Zuständigkeiten. Apple erläutert die Wege zur Verteilung von macOS-Software und die Voraussetzungen für Developer ID.

Für eine außerhalb des Stores angebotene App prüfen Sie anhand der aktuellen Apple-Vorgaben, ob Developer-ID-Signierung und Notarisierung für Ihren konkreten Verteilungsweg erforderlich sind. Notarisierung ist Apples eigener Prüf- und Verteilungsprozess; sie ersetzt weder Sparkles Signatur des Update-Archivs noch die Veröffentlichung eines erreichbaren Appcasts. Apple beschreibt die Anforderungen in der Dokumentation zur Notarisierung von macOS-Software vor der Verteilung.

Erstellen Sie vor der Konfiguration eine Bestandsaufnahme der ausgelieferten App-Versionen. Entscheidend ist nicht nur, was der aktuelle Quellcode unterstützt, sondern welche Sparkle-Funktionen und Archivformate die bereits installierten Clients tatsächlich verstehen. Ein neues Feed-Format oder ein geänderter Signaturpfad hilft nicht, wenn eine ältere App ihn nicht auswerten kann.

Halten Sie für jede noch relevante veröffentlichte Version fest:

  • Welche Sparkle-Version und welche Update-Funktionen wurden damit ausgeliefert?
  • Welches Archivformat wurde für das Update verwendet?
  • Wie wurde das Update signiert und wie lautet die konfigurierte Feed-Adresse?
  • Welche Versionskennung sehen Benutzer in der App, und welche Build-Kennung wird für das Update verwendet?

Die Antworten gehören in ein internes Release-Dokument. Vergleichen Sie sie mit den Hinweisen zum Upgrade und zur Kompatibilität in Sparkle. Gehen Sie nicht davon aus, dass alle historischen Clients automatisch mit einer neuen Konfiguration umgehen können.

Achtung: Bewahren Sie eine bekannte funktionierende Release-Konfiguration auf, bis ein Update von einer tatsächlich installierten Altversion erfolgreich abgeschlossen ist. Ein lokal gebautes Archiv allein beweist keine Kompatibilität mit bereits verteilten Apps.

02

Beim Einrichten: Sparkle-Quelle von Downloadseite und Archiv trennen

Für Sparkle automatische Updates bereitstellen bedeutet zuerst, die drei Adressen und Aufgaben auseinanderzuhalten:

  • Downloadseite: Dort können Interessierte die App manuell beziehen.
  • Appcast-URL: Die App fragt dort nach verfügbaren Releases.
  • Archiv-URL: Von dort lädt Sparkle das konkrete Update-Archiv.

Die Adressen können auf derselben Domain liegen, erfüllen aber verschiedene Funktionen. Tragen Sie die Update-Quelle in der App-Konfiguration ein und kontrollieren Sie, dass die ausgelieferte App diese Konfiguration tatsächlich enthält. Sparkles Dokumentation zu Einrichtung und Anpassung erklärt die unterstützten Einstellungen. Prüfen Sie dort insbesondere die tatsächlich verwendeten Schlüssel, darunter SUFeedURL für die Quelle und – sofern die gewählte Signaturkonfiguration es vorsieht – SUPublicEDKey für den öffentlichen Schlüssel.

Verwenden Sie in Beispielen und internen Dokumenten Platzhalter statt echter App- oder Kontodaten. Ein schematischer Eintrag kann so aussehen:

<key>SUFeedURL</key>
<string>https://updates.example.invalid/appcast.xml</string>

<key>SUPublicEDKey</key>
<string>ÖFFENTLICHER_SCHLÜSSEL_PLATZHALTER</string>

example.invalid und der Schlüsseltext sind Platzhalter. Vor einer Veröffentlichung müssen sie durch die überprüften Werte der eigenen App ersetzt werden. Verwenden Sie keine private Signaturinformation in einer solchen Konfiguration.

Legen Sie außerdem eine klare Versionsregel fest. Die sichtbare Versionsanzeige und die Build-Kennung können unterschiedliche Zwecke haben. Entscheidend ist, dass Sparkle eine neuere Veröffentlichung zuverlässig als neuer erkennt und die Kennungen in App, Archiv und Appcast zusammenpassen. Dokumentieren Sie, welches Feld Sie für die Benutzeranzeige und welches für den Updatevergleich nutzen. Verlassen Sie sich nicht auf eine Änderung des Marketingnamens oder der Release-Notiz als Versionssignal.

Die Sparkle-Grundlagendokumentation ist die Referenz für die unterstützte Integration. Prüfen Sie die dort beschriebene Konfiguration für die tatsächlich eingesetzte Version, anstatt Einstellungen aus einem alten Blogbeitrag ungeprüft zu übernehmen.

03

Vor dem Verpacken: Apple-Signierung und Sparkle-Signatur unterscheiden

Ein Release kann mehrere voneinander getrennte Vertrauensprüfungen enthalten. Behandeln Sie diese nicht als eine einzige „Signierung“:

  • Developer-ID-Code-Signierung ordnet die macOS-App einem Entwickler zu und gehört zum Distributionsweg außerhalb des Mac App Store.
  • Notarisierung ist ein separater Apple-Prozess, dessen Anwendbarkeit und Anforderungen Sie für Ihren Vertriebsweg anhand der offiziellen Apple-Dokumentation prüfen.
  • Sparkle-Archivsignierung ermöglicht dem Updateprozess, ein Update-Archiv mit dem in der App hinterlegten öffentlichen Schlüssel abzugleichen.
  • Appcast-Signierung ist nicht dasselbe wie die Signatur des Update-Archivs. Verwechseln Sie außerdem die Appcast-Datei nicht mit dem heruntergeladenen Archiv.

Sparkle dokumentiert die Rolle von Schlüsseln und Signaturen in den Hinweisen zu Sicherheit und Zuverlässigkeit. Wenn Sie EdDSA verwenden, folgt der öffentliche Schlüssel in die App-Konfiguration; der private Schlüssel bleibt auf der Signierseite. Sparkle beschreibt die Einrichtung und den Umgang mit EdDSA in der offiziellen Dokumentation.

Erzeugen Sie die Signatur mit den von Sparkle vorgesehenen Werkzeugen. Kontrollieren Sie vor dem Upload, ob das erzeugte Archiv und die dazugehörige Signatur zusammengehören und ob der öffentliche Schlüssel in der App zum verwendeten Signaturverfahren passt. Ein erfolgreicher lokaler Befehl genügt nicht, wenn anschließend ein anderes Archiv hochgeladen oder der falsche Schlüssel in die App eingebaut wird.

Schreiben Sie private Schlüssel weder in das Repository noch in Beispiele, Build-Protokolle oder öffentlich zugängliche Release-Dateien. Legen Sie intern fest, wer Zugriff erhält, wie der Signierzugriff im Veröffentlichungsablauf erfolgt und wie ein Schlüsselwechsel vorab getestet wird. Versprechen Sie keine absolute Sicherheit aufgrund einer bestimmten Ablageform. Maßgeblich ist ein überprüfbarer Prozess mit eingeschränktem Zugriff und einer dokumentierten Wiederherstellungs- und Migrationsplanung.

04

Beim ersten Appcast: Archiv, Metadaten und erreichbare Dateien zusammenführen

Das Appcast ist nicht bloß eine Release-Notiz. Es vermittelt zwischen der installierten App und dem konkreten Update: Der Feed muss die passende Version beschreiben und auf ein tatsächlich erreichbares Archiv verweisen. Sparkles Anleitung zur Veröffentlichung von Updates beschreibt den Veröffentlichungsablauf und die vorgesehenen Werkzeuge, darunter die automatische Erzeugung von Release-Dateien.

Ein automatisches Werkzeug kann wiederkehrende Metadaten aus dem Archiv ableiten und dadurch manuelle Eingabefehler verringern. Es nimmt Ihnen aber nicht die Prüfung der Eingaben und der ausgelieferten Dateien ab. Eine manuell gepflegte Appcast-Datei kann sinnvoll sein, wenn Sie Sonderfälle kontrollieren müssen; sie verlangt dafür eine entsprechend sorgfältige Prüfung jeder Referenz und jedes Eintrags.

Gehen Sie für das erste Release in dieser Reihenfolge vor:

  1. Erzeugen Sie das vorgesehene Update-Archiv aus dem zu veröffentlichenden Build.
  2. Signieren und prüfen Sie genau dieses Archiv mit dem festgelegten Sparkle-Verfahren.
  3. Erstellen oder aktualisieren Sie das Appcast mit den Werten dieses Releases.
  4. Kontrollieren Sie die Versionsangaben sowie die Zuordnung zwischen Eintrag und Archiv.
  5. Veröffentlichen Sie Archiv und Appcast in einer Reihenfolge, bei der der Feed nicht auf eine noch fehlende Datei zeigt.
  6. Rufen Sie Appcast und Archiv aus einer Umgebung ab, die nicht auf lokale Build-Dateien zugreifen kann.

Diese Liste macht eine wichtige Fehlerklasse sichtbar: Ein gültig signiertes Archiv nützt nichts, wenn die im Appcast eingetragene Adresse ins Leere führt. Umgekehrt kann ein abrufbarer Download trotzdem abgelehnt werden, wenn Signatur oder Versionsdaten nicht zur installierten App passen. Prüfen Sie daher Erreichbarkeit, Inhalt und Verknüpfung getrennt.

Erfahrung aus dem Ablauf: Testen Sie nicht nur, ob die Appcast-Datei im Browser angezeigt wird. Entscheidend ist, ob die installierte App den Feed mit ihrer eingebauten Konfiguration abruft und danach genau das zugehörige Archiv verarbeitet.

05

Beim ersten Upgrade: die Altversion als Prüfgerät verwenden

Die aussagekräftigste Abnahme beginnt mit einer installierten Version, die noch auf dem bisherigen Stand ist. Starten Sie nicht ausschließlich die gerade gebaute Version und erklären Sie den Ablauf für abgeschlossen. Ein neuer Client kann funktionieren, während die bereits verteilten Apps eine andere Konfiguration oder ein älteres Updateverhalten haben.

Führen Sie einen vollständigen Test aus:

  1. Installieren und starten Sie eine repräsentative Altversion.
  2. Lassen Sie diese App nach Updates suchen und prüfen Sie, ob sie die erwartete Appcast-Quelle verwendet.
  3. Prüfen Sie, ob der angebotene Release-Eintrag als neuer erkannt wird.
  4. Lassen Sie die App das angegebene Archiv laden und die Sparkle-Signatur prüfen.
  5. Schließen Sie die Installation ab und starten Sie die aktualisierte App.
  6. Vergleichen Sie angezeigte App-Version, Build-Kennung, Archiv und Appcast-Eintrag mit dem Release-Dokument.

Notieren Sie das Ergebnis pro Testlauf. Wenn ein Fehler auftritt, unterscheiden Sie die Ursachen, statt denselben Schritt wiederholt auszuführen:

  • Quelle nicht erreichbar: Appcast-Adresse, Zugriffsschutz, TLS-Verbindung und Bereitstellung kontrollieren.
  • Update wird nicht angeboten: Versionsvergleich und die vom alten Client ausgewerteten Feed-Daten prüfen.
  • Signaturprüfung schlägt fehl: Prüfen, ob der öffentliche Schlüssel zur App passt und ob exakt das signierte Archiv veröffentlicht wurde.
  • Installation gelingt, App startet aber nicht wie erwartet: Das installierte Produkt und den Release-Build untersuchen; nicht den Appcast als einzige Fehlerquelle behandeln.

Diese Abnahme prüft die reale Kette vom installierten Client bis zum gestarteten Release. Sie beweist nicht, dass jede denkbare ältere App-Version unterstützt wird. Wenn mehrere historische Konfigurationen im Umlauf sind, testen Sie die relevanten Varianten gezielt und planen Sie einen separaten Kompatibilitätspfad, falls ein direkter Sprung nicht möglich ist.

06

Für wiederkehrende Releases: Aktualisierung und Rückfallweg gemeinsam pflegen

Ein einzelner erfolgreicher Test macht den Ablauf noch nicht wartbar. Legen Sie fest, wer Appcast, Archiv, Release-Notizen und interne Freigabe synchronisiert. Bewahren Sie pro Veröffentlichung die Zuordnung zwischen Quellstand, Build-Kennung, signiertem Archiv und veröffentlichtem Feed-Eintrag auf. Damit lässt sich später nachvollziehen, was Benutzer tatsächlich angeboten bekommen haben.

Vor jeder Veröffentlichung sollten Sie mindestens diese Punkte abhaken:

  • [ ] Der Verteilungsweg ist weiterhin derselbe; Anforderungen an Developer ID und Notarisierung wurden nicht ungeprüft übernommen.
  • [ ] App-Konfiguration und Appcast zeigen auf die vorgesehenen Werte.
  • [ ] Die Signatur wurde für das hochzuladende Archiv erzeugt und geprüft.
  • [ ] Der Feed verweist auf Dateien, die aus der vorgesehenen Abrufumgebung verfügbar sind.
  • [ ] Ein Upgrade aus einer repräsentativen älteren Version wurde getestet.
  • [ ] Release-Dateien und Zuordnungen sind für Fehleranalyse und Rückfall dokumentiert.
  • [ ] Änderungen an Signaturschlüsseln wurden mit den noch relevanten Clients auf Kompatibilität geprüft.

Wenn ein EdDSA-Schlüssel ersetzt oder der Signaturablauf geändert werden soll, behandeln Sie das als Migration und nicht als reine Wartungsänderung. Prüfen Sie die Schritte in Sparkles Hinweisen zur EdDSA-Migration, bevor Sie neue Schlüssel oder Konfigurationen veröffentlichen. Verifizieren Sie insbesondere, ob die installierte App den geplanten Übergang unterstützt. Ein vorbereiteter Release mit Rückfallmöglichkeit ist sicherer als ein Schlüsselwechsel, der erstmals im Produktivlauf geprüft wird.

07

Bei fehlendem lokalem Mac: Entscheidung nach Build- und Prüfbedarf treffen

macOS App automatisch aktualisieren lässt sich nicht allein durch einen erreichbaren Webserver absichern. Für Bau, Code-Signierung und den Test einer installierten macOS-App benötigen Sie einen passenden macOS-Arbeitsplatz. Ein Remote Mac kann diese Rolle übernehmen, ist aber nicht automatisch ein vollständig eingerichteter, unbeaufsichtigter Release-Dienst.

Nutzen Sie diese Entscheidungszweige:

  • Wenn Builds nur gelegentlich erstellt werden und die Tests manuell erfolgen können, dann reicht ein verfügbarer Mac-Arbeitsplatz möglicherweise aus. Prüfen Sie zuerst, ob sich Ihre bestehenden Geräte für Build und Abnahme eignen.
  • Wenn keine lokale Mac-Hardware vorhanden ist, aber macOS-Build, Signierung und Updateprüfung regelmäßig anstehen, dann kann ein gemieteter Remote Mac eine Alternative zum Hardwarekauf sein. Prüfen Sie den Zugang, den Umgang mit Signierschlüsseln und die Möglichkeit, den vollständigen Release-Test auszuführen.
  • Wenn Signierung und Releases vollständig unbeaufsichtigt laufen sollen, dann behandeln Sie die Remote-Verbindung nicht als Nachweis einer funktionierenden Automatisierung. Testen Sie Aufgabensteuerung, Schlüsselzugriff, Fehlerprotokolle und Rückfallverfahren separat.
  • Wenn ein Release zwingend lokale physische Schnittstellen oder eine dauerhaft kontrollierte eigene Hardwareumgebung benötigt, dann ist ein Remote Mac nicht ohne Weiteres ein Ersatz. Behalten Sie die passende lokale Infrastruktur bei oder trennen Sie diese Aufgaben vom Remote-Build.

Für Remote Mac macOS veröffentlichen gilt damit: Die Umgebung kann Build und Release-Abnahme bereitstellen, doch die korrekte Appcast-Veröffentlichung und ein erfolgreicher Clienttest bleiben Prozessaufgaben. Ein Remote-Desktop, der sich öffnen lässt, beweist weder, dass der Signiervorgang korrekt läuft, noch dass eine Altversion das Update installieren kann.

Beim Vergleich eines eigenen Mac mit einer gemieteten Umgebung sollten Sie nicht nur den Anschaffungspreis betrachten. Eigene Hardware verursacht Kapitalbindung, Wartungsaufwand und die Verantwortung für Verfügbarkeit. Eine Remote-Umgebung vermeidet den lokalen Kauf, setzt aber eine geeignete Verbindung, sorgfältige Zugangskontrolle und einen verlässlichen Anbieter voraus. Prüfen Sie die eigenen Buildintervalle, den benötigten Zugriff und die Schlüsselrichtlinien, bevor Sie sich festlegen. Informationen zu den Remote-Mac-Angeboten von MESHLAUNCH können als Ausgangspunkt für diese Prüfung dienen. Auch eine Mac-mini-Option ist nur dann passend, wenn sie die tatsächlichen Anforderungen Ihres Build- und Signierablaufs erfüllt.

Wenn der aktuelle Ablauf manuelle Downloads, lokal gebundene Builds und schwer nachvollziehbare Signierschritte kombiniert, löst der Kauf eines Macs allein diese Schwachstellen nicht. Eine angemietete Mac-Umgebung kann die Arbeit bündeln, ohne dass Sie zusätzliche lokale Hardware anschaffen müssen; sie ersetzt aber weder die Prüfung von Appcast und Signatur noch einen Test mit einer älteren App-Version. Wenn ein eigener Rechner für dauerhafte Last oder physische Schnittstellen besser passt, bleiben Sie dabei. Wenn Sie dagegen eine macOS-Umgebung für zeitweise Builds und Release-Abnahmen benötigen, prüfen Sie MESHLAUNCH anhand Ihres konkreten Signier- und Freigabeprozesses.