CI/CD 2026.09.18

Wie konfiguriert man einen Unternehmensproxy für Swift Package Manager? Mac-CI-Leitfaden 2026

Dieser Leitfaden zeigt IT-Verantwortlichen, wie sie Abhängigkeitsverkehr in einer Mac-CI trennen, Proxy- und Zertifikatsbereiche korrekt zuordnen und die Konfiguration mit dem echten Dienstkonto prüfen. Die Anleitung reicht von der Verkehrskarte bis zum Neustarttest und behandelt auch isolierte Remote-Mac-Knoten.

Der Administrator-Terminal löst die Swift-Abhängigkeiten auf, aber der CI-Dienstkonto-Job läuft in einen Timeout oder meldet einen Zertifikatsfehler.

Die schnellste belastbare Lösung lautet: Trennen Sie zuerst Quellcode-Repositories, Swift Package Registry, Binärartefakte und Apple-Dienste; konfigurieren Sie danach System-Git, Anmeldedaten, Proxy-Ausnahmen und interne Zertifikate getrennt und nehmen Sie alles im echten CI-Dienstkonto mit einem sauberen Arbeitsbereich ab.

01 Für wen diese zeitliche Anleitung gedacht ist

Dieser Beitrag richtet sich an IT-Verantwortliche, die Unternehmensproxy, Firewall und interne CA für Mac-Build-Knoten betreiben und eine einheitliche Ausgangsstrategie etablieren müssen.

Ebenso angesprochen sind Plattformteams, die Xcode-Pipelines und Swift-Abhängigkeiten verantworten und den Unterschied zwischen lokalem Erfolg und fehlschlagender CI beseitigen wollen. Technische Entscheider erhalten außerdem ein Prüfverfahren für eigene Geräte und Remote-Mac-Knoten.

02 Vor dem ersten Konfigurationsschritt: den Abhängigkeitsverkehr kartieren

Ein Unternehmensproxy für Swift Package Manager ist keine einzelne Einstellung. Eine Pipeline kann gleichzeitig mehrere Werkzeuge und Netzwerkpfade verwenden. Wenn nur HTTP_PROXY und HTTPS_PROXY im Runner gesetzt werden, bleibt beispielsweise eine Git-SSH-Verbindung unberührt. Ein importiertes Zertifikat löst wiederum keinen fehlenden Registry-Login und keine falsche Proxy-Ausnahme.

Erstellen Sie deshalb vor jeder Änderung eine Verkehrskarte mit mindestens diesen vier Klassen:

  • Quellcode-Repositories: HTTPS-Git, SSH-Git und gegebenenfalls URL-Umschreibungen.
  • Swift Package Registry: Registry-Endpunkt, Paketmetadaten und Authentifizierung.
  • Binärartefakte und Plugins: vorgefertigte Targets, Plugin-Abhängigkeiten und deren Download-Mechanismus.
  • Apple-Dienste: Dienste für Software, Xcode oder Plattformbetrieb, die nach der Unternehmensrichtlinie nicht wie interne Quellen behandelt werden dürfen.

Für jede Klasse gehören fünf Angaben in die Karte: Zielhostname, verwendeter Prozess, Authentifizierungsart, erwarteter Netzwerkpfad und tatsächliches Ausführungskonto. Eine nicht aufgelöste Variable ist dabei kein Beweis für eine Proxy-Störung. Der Fehler kann ebenso bei DNS, TLS, einer Anwendungsauthentifizierung oder einer fehlenden SSH-Konfiguration liegen.

Die Git-Dokumentation zu Proxy- und Netzwerkeinstellungen beschreibt, dass Git seine Konfiguration aus mehreren Ebenen beziehen kann. Genau deshalb müssen Sie den Ursprung einer wirksamen Einstellung dokumentieren, statt eine funktionierende Administrator-Shell als Referenz zu verwenden.

Hinweis: Verwenden Sie für die Baseline eine neue Arbeitsumgebung ohne vorhandenen Paket- oder Build-Cache. Ein erfolgreicher Download aus dem Cache beweist weder die aktuelle Proxy-Konfiguration noch die Erreichbarkeit der Quelle.

03 In der ersten Stunde: Wirkungskreise und Dienstkonto festlegen

Die wichtigste organisatorische Entscheidung fällt vor dem ersten Build: Welches Konto führt den Job tatsächlich aus? Das kann ein Jenkins-Dienstkonto, ein GitHub-Actions-Runner, ein GitLab-Runner oder ein anderer CI-Agent sein. Die Umgebung einer interaktiven Administratorsitzung darf nicht als Ersatz dienen.

Prüfen Sie im realen Job getrennt:

  • macOS-Systemproxy und mögliche Einstellungen für den jeweiligen Netzwerkdienst,
  • HTTP_PROXY, HTTPS_PROXY und NO_PROXY in der Prozessumgebung,
  • Git-Konfiguration auf System-, Benutzer- und Repository-Ebene,
  • SSH-Konfiguration sowie den verwendeten Agent,
  • Keychain-Zugriff und Zertifikatsvertrauen,
  • Arbeitsverzeichnis, Cache-Verzeichnisse und Schreibrechte.

Diese Bereiche bilden keine automatische Gesamtkonfiguration. Ein Systemproxy kann für eine Anwendung relevant sein, während ein Shell-Prozess nur Umgebungsvariablen liest. Git kann eine eigene HTTP-Proxy-Einstellung verwenden, während SSH über eine separate Host-Regel läuft. Ein Zertifikat in der Administrator-Keychain ist außerdem nicht automatisch für das CI-Dienstkonto verfügbar.

Wie übernimmt ein Mac-CI-Dienstkonto Proxy- und Zertifikatseinstellungen?

Es übernimmt sie nur, wenn diese Einstellungen im Wirkungskreis des Dienstes eingerichtet und nach einem Neustart erneut verfügbar sind. Die korrekte Reihenfolge ist daher: Dienstkonto identifizieren, dessen Umgebung ausgeben, die Quelle jeder Einstellung anzeigen, eine minimale Verbindung prüfen und anschließend den Agent neu starten. Persönliche Proxy-Anmeldedaten, private Keychains oder Administratorprofile gehören nicht auf einen gemeinsam genutzten Knoten.

Für die Diagnose reichen zunächst kleine, nachvollziehbare Prüfungen:

id
env | grep -Ei 'proxy|no_proxy'
git config --show-origin --get-regexp 'http\..*proxy|url\..*insteadOf'
ssh -G git.example.invalid

Die Platzhalteradresse ist bewusst kein produktiver Test. In der tatsächlichen Prüfung muss die Netzwerk- und Sicherheitsgruppe die freigegebenen Zielsysteme bestimmen. Vermeiden Sie es, aus einem Beispiel ungeprüfte Hostnamen, Ports oder Ausnahmen in eine Firewall zu übernehmen.

Die Git-Konfigurationsreferenz zu HTTP-Proxy und TLS ist für die genaue Bedeutung der Git-Optionen maßgeblich. Besonders wichtig ist die Trennung zwischen Proxy-Konfiguration und TLS-Prüfung: Eine fehlende Vertrauenskette darf nicht durch das Abschalten der Zertifikatsvalidierung „gelöst“ werden.

04 Danach: Git, Registry und Artefakte getrennt funktionsfähig machen

Beginnen Sie mit dem einfachsten reproduzierbaren Pfad und erweitern Sie erst danach die Pipeline. Für HTTPS-Git prüfen Sie, ob der Prozess des Dienstkontos die Quelle über den vorgesehenen Proxy erreicht und ob das Zertifikat bis zu einer freigegebenen internen CA validiert wird. Für SSH-Git prüfen Sie dagegen Hostregel, Schlüssel, Agent und Netzwerkpfad separat. Ein erfolgreicher HTTPS-Test sagt nichts über SSH aus.

Warum lädt Swift Package Manager im Unternehmensproxy keine Abhängigkeiten herunter?

Typische Ursachen sind ein nicht vererbtes Dienstkonto-Umfeld, eine Git-Konfiguration außerhalb des gültigen Wirkungskreises, eine Registry mit eigener Authentifizierung, ein von HTTPS-Interception verändertes Zertifikat oder eine NO_PROXY-Ausnahme, die den vorgesehenen Weg umgeht. Deshalb sollte der Fehler immer einer der vier Verkehrsklassen und einer konkreten Prozessspur zugeordnet werden.

Für Registry-basierte Pakete dokumentiert die offizielle Swift-Package-Registry-Anleitung eigene Nutzungs- und Authentifizierungsmechanismen. Behandeln Sie eine Registry daher nicht automatisch wie ein gewöhnliches Git-Repository. Die Pipeline muss nachweisen, welcher Endpunkt angesprochen wird und wo das Dienstkonto die benötigte Berechtigung erhält.

Bei Binär-Targets und Plugins ist zusätzlich zu prüfen, ob der Download vom Swift Package Manager, von Git oder von einem anderen Build-Werkzeug ausgeführt wird. Das ist ein häufiger Grund, warum die Quellcodeauflösung funktioniert, der anschließende Build aber trotzdem scheitert. Dokumentieren Sie für jedes Artefakt den ausführenden Prozess und die Zertifikatskette.

Wie kann xcodebuild die System-Git-Konfiguration verwenden?

Behandeln Sie das nicht als automatische Zusage. xcodebuild kann im Rahmen der Paketauflösung weitere Werkzeuge und Prozesse anstoßen; entscheidend ist, welche Git- und Netzwerkumgebung der tatsächliche CI-Prozess sieht. Führen Sie deshalb die Paketauflösung mit xcodebuild im Dienstkonto aus und prüfen Sie anschließend die von Git verwendete Konfigurationsquelle. Eine erfolgreiche interaktive Ausführung mit demselben Befehl genügt nicht.

Für eine gezielte Prüfung kann die Pipeline die Paketauflösung und den Build als getrennte Phasen protokollieren:

xcodebuild -resolvePackageDependencies
xcodebuild -showBuildSettings

Die konkreten Workspace-, Scheme- und Zielparameter müssen aus der jeweiligen Anwendung stammen. Die Apple-Anleitung für Swift-Pakete und CI-Workflows beschreibt den relevanten CI-Kontext; sie ersetzt jedoch nicht die Prüfung der eigenen Runner-Umgebung.

Halten Sie Package.resolved unter Versionskontrolle, wenn das Projekt eine reproduzierbare Auflösung benötigt. In der CI sollte der Job deutlich machen, ob er bestehende Auflösungsdaten verwendet oder eine neue Versionsermittlung anstößt. Ein identischer Commit ist nur dann ein belastbarer Vergleichspunkt, wenn Paketstand, Registry-Zugriff und Arbeitsverzeichnis kontrolliert sind.

05 Nach der Netzwerkkonfiguration: TLS, Apple-Ausnahmen und interne CA prüfen

Unternehmensproxy und HTTPS-Interception müssen getrennt bewertet werden. Bei internen Git-Servern, internen Registries und firmeneigenen Artefaktquellen kann eine interne CA Teil des vorgesehenen Vertrauensmodells sein. Bei Apple-Diensten gelten dagegen die Anforderungen der Apple-Netzwerk- und Update-Dokumentation. Die Apple-Informationen zu Unternehmensnetzwerken und Softwareupdates sollten für freizugebende Dienste und mögliche Interception-Ausnahmen herangezogen werden.

Kann HTTPS-Interception im Unternehmen die Swift-Paketauflösung stören?

Ja, wenn der Proxy das Zertifikat ersetzt und der konkrete Prozess der Zertifikatskette nicht vertraut, oder wenn ein Apple-Dienst eine solche Prüfung nicht unterstützt. Die Diagnose muss drei Ebenen unterscheiden:

  • Proxyweiterleitung: Wird die Verbindung zum vorgesehenen Ziel überhaupt aufgebaut?
  • TLS-Prüfung: Passt die Zertifikatskette zum Vertrauen des Dienstkontos und des verwendeten Prozesses?
  • Anwendungsebene: Werden danach Registry-, Git- oder Apple-Anmeldedaten akzeptiert?

Installieren Sie interne CA-Zertifikate ausschließlich über den etablierten Unternehmensprozess für Bereitstellung, Ablauf und Widerruf. Ein globales Abschalten der Zertifikatsprüfung kann eine Pipeline scheinbar reparieren, entfernt aber die Sicherheitsgarantie für alle Ziele. Eine Ausnahme muss auf den konkret erlaubten Dienst und die dokumentierte Unternehmensrichtlinie begrenzt sein.

Erfassen Sie bei einem Fehler den Zielhost, die Zertifikatskette, den ausführenden Prozess und das Dienstkonto. Entfernen Sie personenbezogene Token aus den Logs. Bei privaten Abhängigkeiten geht es in diesem Leitfaden nicht darum, einzelne Repository-Anmeldedaten zu kopieren, sondern um die belastbare Zuordnung von Netzwerk- und Vertrauensgrenzen.

06 Mit der ersten echten Pipeline die Abnahme durchführen

Eine erfolgreiche Einzelverbindung ist keine Produktionsabnahme. Führen Sie stattdessen eine vollständige Pipeline aus einem sauberen Arbeitsbereich aus und trennen Sie mindestens diese Phasen:

  1. Abhängigkeiten auflösen.
  2. Quellcode und Binärartefakte beziehen.
  3. Anwendung oder Paket bauen.
  4. Tests ausführen.
  5. Das vorgesehenen Test- oder Release-Artefakt erzeugen.
  6. Logs und Auflösungsstand unverändert archivieren.

Jede Phase benötigt ein klares Ergebnis: Netzwerk erreichbar, Abhängigkeit auflösbar, Build reproduzierbar oder Aufgabe wiederherstellbar. Ein Fehler muss mit Ziel, Prozess und Zertifikats- oder Authentifizierungsnachweis belegt werden. „Download erfolgreich“ ist als alleinige Abnahmekriterien zu schwach.

Erweitern Sie die Prüfung danach um den Betriebszustand des Knotens:

  • [ ] Der Job läuft mit dem produktiven CI-Dienstkonto.
  • [ ] Proxyvariablen und NO_PROXY sind im Prozess sichtbar und dokumentiert.
  • [ ] Git zeigt die wirksame Konfiguration samt Herkunft.
  • [ ] HTTPS-Git und SSH-Git wurden als getrennte Pfade geprüft.
  • [ ] Swift Package Registry und Binärartefakte wurden unabhängig getestet.
  • [ ] Interne CA und Zertifikatskette sind im Dienstkonto wirksam.
  • [ ] Apple-Dienste sind gemäß der Unternehmensrichtlinie ausgenommen oder freigegeben.
  • [ ] Package.resolved und der Auflösungsmodus sind festgelegt.
  • [ ] Der Job wurde aus einem sauberen Arbeitsbereich gestartet.
  • [ ] Der Agent wurde neu gestartet und danach erneut geprüft.
  • [ ] Ein Test mit ungültigem oder rotiertem Zugang schlägt kontrolliert fehl.
  • [ ] Ein nicht verfügbarer Proxy führt zu einer erkennbaren, dokumentierten Fehlermeldung.
  • [ ] Der Wiederanlauf nach einem Neustart ist ohne interaktive Administratorsitzung möglich.

07 In der ersten Betriebswoche: Knotenpool und Remote-Mac-Grenze festlegen

Beginnen Sie mit einem isolierten Knoten für nicht produktive Aufgaben. Erst wenn Abhängigkeitsauflösung, Build, Zertifikatsvertrauen und Neustartwiederherstellung stabil dokumentiert sind, sollte der Knoten produktive Aufgaben übernehmen. Produktionssignierung benötigt weiterhin eine eigene Vertrauens- und Berechtigungsgrenze, auch wenn öffentliche Abhängigkeiten erfolgreich erreichbar sind.

Trennen Sie Knoten mit Zugriff auf interne Netzwerke von elastischen Knoten, die ausschließlich öffentliche Quellen benötigen. Für beide Gruppen gelten unterschiedliche NO_PROXY-Regeln, Firewallfreigaben, Keychain-Anforderungen und Wiederherstellungsprozesse. Die Netzwerkarchitektur sollte nicht durch eine einzelne globale Umgebungsvariable vereinheitlicht werden.

Wie greift ein Remote Mac auf ein Unternehmens-Git und eine interne Package Registry zu?

Er muss wie jeder andere Build-Knoten in die genehmigte Netzwerktopologie aufgenommen werden: Zielpfade kartieren, Proxy- oder VPN-Weg festlegen, interne CA über den Unternehmensprozess bereitstellen, Dienstkonto einrichten und anschließend eine saubere CI-Ausführung prüfen. Der Remote-Zugriff ersetzt keine Netzwerkfreigabe und macht aus einer interaktiven Terminal-Sitzung keinen produktionsfähigen Runner.

Wenn ein vorhandener Mac diese Regeln nicht dauerhaft ausführen kann, keine verlässliche Neustartwiederherstellung besitzt oder nur über manuelle Sitzungen administrierbar ist, vergleichen Sie drei Wege: technische Nachrüstung, ein dedizierter eigener Knoten oder ein isolierter Remote-Mac-Knotenpool. Für die PoC-Planung können Sie die Übersicht für Remote-Mac-Infrastruktur als Ausgangspunkt verwenden. Die Entscheidung sollte erst nach derselben Verkehrskarte und Abnahmeliste fallen.

08 Die Entscheidung vor dem Rollout

Entscheidungspunkt Eigener Mac im Unternehmensnetz Isolierter Remote-Mac-Knoten
Interne Git- und Registry-Zugriffe Direkter Bestandteil der bestehenden Netzwerktopologie, aber mit eigener Segmentierung zu prüfen Erfordert ausdrücklich freigegebenen Zugangspfad, Proxy- oder VPN-Design und CA-Bereitstellung
Proxy- und Zertifikatskontrolle Meist vollständig durch die eigene IT steuerbar Muss mit Anbieter, Standort und Dienstkonto reproduzierbar abgenommen werden
Kapazität bei schwankender CI-Last Zusätzliche Hardware- und Wartungsplanung erforderlich Knoten können für PoC oder zeitweise Kapazität getrennt bereitgestellt werden
Neustart und Fernwiederherstellung Von Stromversorgung, Management und lokalem Betrieb abhängig Vor Nutzung anhand echter Neustart- und Dienstkonto-Tests prüfen
Geeigneter Einsatz Dauerhafte, stark regulierte Aufgaben mit physischer Infrastruktur Temporäre Builds, neue Teams, Kapazitätstests und klar isolierte Netzpfade

Damit diese Tabelle nicht zu einer pauschalen Kauf-oder-Miet-Empfehlung wird, müssen Sie die tatsächlichen Randbedingungen bewerten: Benötigt der Job interne Ressourcen? Muss er dauerhaft signieren? Ist eine physische Schnittstelle erforderlich? Oder geht es zunächst um eine kontrollierte CI-Kapazität, einen PoC und reproduzierbare Netzwerktests?

Wenn eigener Mac-Betrieb bereits vorhanden ist, liegen die Nachteile häufig in gebundener Hardwarekapazität, zusätzlicher Wartung, manueller Wiederherstellung und langsamem Ausbau. Eine ungeprüfte Remote-Lösung hätte dagegen andere Nachteile: externe Netzwerkfreigaben, zusätzliche Abstimmung bei internen CAs und die Notwendigkeit, Standort- und Wiederanlaufverhalten nachzuweisen. Deshalb ist JEXCLOUD erst dann die sinnvollere Option, wenn ein isolierter Remote Mac dieselbe Abnahmeliste erfüllt und keine physische Schnittstelle oder dauerhaft lokale Vertrauenszone benötigt wird.

Für einen kontrollierten Versuch kann der Bestellbereich für einen Remote Mac als nächster Schritt dienen. Verwenden Sie dabei nicht sofort produktive Signaturgeheimnisse: Wiederholen Sie zuerst Verkehrskarte, Registry-Auflösung, Zertifikatsprüfung, sauberen Build und Neustarttest. Bestehen Proxy, interne Abhängigkeiten und unbeaufsichtigte Wiederherstellung gemeinsam, lässt sich der einzelne Knoten sachlich zu einem Team-Pool erweitern.

JEXCLOUD

Mac-CI mit JEXCLOUD zuverlässig ausführen

Mieten Sie einen dedizierten Remote-Mac für reproduzierbare Builds und kontrollierte Swift-Package-Abhängigkeiten.

Nutzen Sie isolierte Mac-Knoten für Tests, Signierung und automatisierte CI-Pipelines.

Jetzt mieten