Der Build scheitert, obwohl der Mac im Browser Internetzugriff hat, weil CI-Abhängigkeiten, Apple-Dienste oder Signatur-Endpunkte in einem anderen Netzwerk- und Identitätskontext aufgerufen werden.
Schnellste Lösung: Konfigurieren Sie die Xcode 27 CI-Netzwerk-Whitelist nicht als pauschale Freigabe aller Apple-Domains, sondern trennen Sie Quellcode, Abhängigkeiten, Xcode-Komponenten, Signierung, Veröffentlichung sowie Benachrichtigungs- und Verwaltungsdienste. Jede Regel muss durch einen echten Pipeline-Schritt belegbar sein; Produktions-Signaturknoten benötigen einen engeren Ausgang als normale Build-Knoten.
Für wen dieser Leitfaden gedacht ist
Netzwerk- und Sicherheitsverantwortliche benötigen eine prüfbare Grundlage für minimale ausgehende Berechtigungen und Regeländerungen.
Plattformverantwortliche liefern Xcode 27, Apple-Silicon-Knoten und CI-Runner aus.
Einkaufs- und Infrastrukturverantwortliche müssen beurteilen, ob ein gemieteter Mac-Knoten Proxy-, Private-Network- und Wiederherstellungsanforderungen nachweisbar erfüllt.
Zuletzt aktualisiert am 21.09.2026. Die Angaben wurden anhand der offiziellen Xcode-27-Release-Notes, der Apple-Dokumentation zu Unternehmenshosts und Ports, der Apple-Notary-Dokumentation und der offiziellen Runner-Dokumentation geprüft. Bei Änderungen am Xcode-Status, an Apple-Endpunkten oder an Ihrer Proxy-Policy ist die Abnahme erneut durchzuführen.
SECTION 01 Warum funktioniert der Mac, aber der CI-Build nicht?
Ein interaktiver Test im Administrator-Terminal beweist nur, dass ein bestimmter Benutzer unter einer bestimmten Proxy-, DNS- und Zertifikatskonfiguration eine Verbindung herstellen konnte. Ein CI-Dienstkonto kann dagegen ohne dieselbe Schlüsselbundfreigabe, ohne identische Umgebungsvariablen oder ohne Zugriff auf den privaten Paketserver laufen. Auch ein Runner, der für einen anderen Netzwerkbereich registriert ist, kann denselben Build an einem unerwarteten Ort ausführen.
Die entscheidende Diagnosefrage lautet deshalb nicht „Ist der Mac online?“, sondern: An welcher Stelle der Pipeline scheitert welcher Request mit welchem Dienstkonto?
Eine vollständige Xcode-27-Pipeline lässt sich in sechs überprüfbare Datenflussgruppen zerlegen:
- Quellcode und Git-Metadaten,
- Paket- und Binärabhängigkeiten,
- Xcode-Komponenten und Simulator-Runtimes,
- Entwicklerkonto, Zertifikate und Signaturdienste,
- Archiv, Upload, TestFlight und Notarisierung,
- Ergebnisrückgabe, Benachrichtigung und Runner-Verwaltung.
Apple verweist für Unternehmensnetze auf konkrete Hosts und Ports; diese Liste ersetzt jedoch nicht die Dokumentation Ihrer Git-, Paket- und internen Artefaktquellen. Eine Apple-Freigabe darf daher nicht automatisch den gesamten Abhängigkeitsverkehr legitimieren. Die Apple-Übersicht zu TCP- und UDP-Ports ist als Referenz für die Transportebene nützlich, aber die tatsächliche Regel muss zum konkreten Dienst und zum konkreten Pipeline-Schritt passen.
Das Fehlerprotokoll vor jeder Firewalländerung
Erfassen Sie bei jedem Fehlschlag mindestens:
- Commit oder Build-ID,
- ausführendes Dienstkonto,
- Runner-Name, Label und Netzwerkzone,
- Zielhostname und aufgelöste Adresse,
- verwendetes Protokoll und Zielport,
- Proxy-Entscheidung und TLS-Ergebnis,
- HTTP- oder API-Status,
- relevante Logzeilen aus dem CI-System,
- Zeitpunkt der letzten erfolgreichen Ausführung.
Ein ping oder das Öffnen einer Website im Browser genügt nicht. ICMP kann blockiert sein, während TCP funktioniert; umgekehrt kann eine TCP-Verbindung zustande kommen, aber die TLS-Prüfung oder die API-Authentifizierung scheitern.
SECTION 02 Welche Ausgänge braucht die Xcode-27-Buildmaschine?
Die folgende Zuordnung ist kein Freigabeautomat, sondern ein Arbeitsmodell für die Regelprüfung. Die Zielhosts müssen aus den offiziellen Apple-Dokumenten, Ihrer Repository-Konfiguration und Ihren Unternehmensaufzeichnungen übernommen werden. Platzhalter sind absichtlich besser als erfundene Domains.
| Datenfluss | Zweck | Typische Regelgrenze | Nachweis in der Pipeline |
|---|---|---|---|
| Quellcode | Git-Repository, Submodule, Git LFS | Nur bekannte Repository-Hosts und erforderliche Protokolle | Checkout, Submodule-Update, LFS-Abruf |
| Swift Package Manager | Öffentliche und private Swift-Pakete | Paketquellen getrennt von Apple-Diensten behandeln | Auflösung, Package.resolved-Prüfung, Cache-Neuaufbau |
| CocoaPods und Binärartefakte | Spezifikationen, Archive, interne Frameworks | Nur definierte Spezifikations- und Artefaktquellen | Installation ohne vorhandenen Cache |
| Xcode-Komponenten | Zusätzliche Komponenten und Simulator-Runtimes | Apple-Ziele gemäß offizieller Dokumentation, nicht pauschal alle Domains | Download und Installation auf einem Testknoten |
| Entwickler- und Signaturdienste | Konto, Profile, Zertifikats- und Gerätestatus | Auf den Signatur- und Verwaltungszweck begrenzen | Archivierung mit kontrollierter Identität |
| Veröffentlichung und Notarisierung | Upload, Status, Log und Ticket | Produktionsknoten separat und credential-spezifisch freigeben | Upload, Statusabfrage, Logabruf, Ticketprüfung |
| CI-Rückkanal | Status, Logs, Artefakte, Benachrichtigungen | CI-Endpunkt und erlaubte API-Routen dokumentieren | Erfolgreiche Rückmeldung nach absichtlichem Fehler |
Für Xcode-Komponenten sollten Sie nicht nur den ersten Download testen. Die Apple-Anleitung zum Nachinstallieren von Xcode-Komponenten beschreibt den Funktionsbereich, den Sie bei einem Cacheverlust reproduzieren müssen. Ein bereits gefüllter lokaler Cache kann eine zu weit gefasste Regel jahrelang verdecken.
Die Bezeichnung „Apple-Dienste“ ist für eine Genehmigung zu unscharf. Ihre Regelbeschreibung sollte stattdessen Dienstzweck, Ziel, Transport, Proxybedarf, verantwortliche Person und Rückfallverhalten enthalten. Wenn ein Ziel nicht eindeutig einem Pipeline-Schritt zugeordnet werden kann, gehört es nicht ungeprüft in die Produktions-Whitelist.
SECTION 03 Wie entwerfen Sie Mac-CI-Proxy und Firewall-Whitelist?
Ein kontrollierter Ausgang über einen expliziten Proxy oder eine zentral verwaltete Firewall erleichtert die Protokollierung, erzeugt aber zusätzliche Fehlerstellen. Entscheidend ist, dass DNS-Auflösung, TCP-Verbindung, TLS-Handshake, Authentifizierung, Geschäftsanforderung und Pipeline-Ergebnis getrennt sichtbar werden.
| Prüfschicht | Was Sie testen | Typischer Befund bei einer Blockade | Erforderlicher Beleg |
|---|---|---|---|
| DNS | Auflösung des Zielhostnamens unter dem CI-Konto | Interne Antwort, NXDOMAIN oder falscher Resolver | Resolver- und Auflösungsprotokoll |
| TCP | Aufbau zum dokumentierten Zielport | Timeout, Reset oder Firewall-Drop | Firewall-Log mit Regel-ID |
| TLS | Zertifikatskette, SNI und interne CA | Zertifikatsfehler oder TLS-Abbruch | TLS-Ausgabe und CA-Zuordnung |
| Authentifizierung | Token, SSH-Schlüssel, API-Key oder Dienstkonto | 401, 403 oder fehlende Schlüsselbundberechtigung | Reduzierter Authentifizierungsnachweis |
| Geschäftsanforderung | Paketabruf, Upload, Status- oder Logabfrage | URL erreichbar, Funktion aber abgelehnt | API- oder Tool-Log |
| Pipeline-Ergebnis | Vollständiger Buildschritt und Rückkanal | Schritt hängt oder Status wird nicht zurückgegeben | Build-ID, Exit-Code und Artefakt |
TLS-Entschlüsselung ist bei Apple-Endpunkten, Quellcode-Hosts und Paketquellen nicht pauschal als zulässig anzunehmen. Prüfen Sie für jeden Dienst, ob die Unternehmensrichtlinie, die Zertifikatskette und die verwendete Client-Software diese Behandlung unterstützen. Eine Ausnahme muss dokumentiert, zeitlich überprüft und einem Verantwortlichen zugewiesen werden; „Der Browser akzeptiert das Zertifikat“ ist kein Nachweis für xcodebuild, Swift Package Manager oder ein Upload-Werkzeug.
Private Abhängigkeiten und Dienstkonten
Git, Git LFS, Swift Package Manager, CocoaPods und private Binär-Repositories bilden unterschiedliche Vertrauensbereiche. Erlauben Sie nicht automatisch den gesamten Datenverkehr, nur weil ein Build ein privates Paket benötigt. Legen Sie fest, welche Repository-Gruppe ein bestimmter Runner erreichen darf und ob der Abruf über einen Unternehmensproxy oder eine interne Route erfolgt.
Führen Sie die Prüfung mit dem tatsächlichen CI-Dienstkonto durch. Ein Administrator-Test kann sonst erfolgreich sein, obwohl:
- der SSH-Schlüssel nur im Benutzerprofil des Administrators liegt,
- das Dienstkonto keinen Zugriff auf den Schlüsselbund besitzt,
- Proxy-Variablen nur in einer interaktiven Shell gesetzt sind,
- eine private CA nicht im System- oder Tool-Schlüsselspeicher liegt,
- der Paket-Cache einen fehlenden Netzwerkzugriff kaschiert.
Löschen oder umgehen Sie den Cache für mindestens einen Abnahmelauf. Prüfen Sie danach die Integrität von Package.resolved, die erwarteten Commit-Stände und die Herkunft der geladenen Artefakte. Für selbst gehostete Runner müssen zusätzlich Labels und Runner-Gruppen mit der Netzwerkzone übereinstimmen. Die Dokumentation zu selbst gehosteten Runnern und die Anleitung zur Label-Zuordnung zeigen, warum eine unpräzise Routing-Regel einen Auftrag an einen ungeeigneten Knoten senden kann.
Ein Runner ohne privaten Ausgang darf keinen Auftrag erhalten, der ein internes Repository benötigt. Umgekehrt sollte ein Produktions-Signaturknoten nicht als allgemeiner Debug-Runner für untrusted Branches dienen. Diese Trennung reduziert nicht nur Fehlermeldungen, sondern auch die gemeinsame Angriffsfläche von Quellcode, Abhängigkeiten und Signaturmaterial.
SECTION 04 Welche Rechte braucht ein Signatur- und Veröffentlichungsserver?
Signatur, Upload und Notarisierung sind nicht derselbe Vorgang. Ein normaler Pull-Request-Build benötigt typischerweise weniger sensible Berechtigungen als ein Archivierungs- oder Veröffentlichungsjob. Teilen Sie deshalb mindestens in normale Build-Knoten, Abhängigkeitsknoten, Produktions-Signaturknoten und Disaster-Recovery-Knoten auf.
Apple dokumentiert für App Store Connect die Erstellung von API-Schlüsseln in der offiziellen API-Key-Dokumentation. Der Schlüsselumfang, seine Ablage und der erlaubte Knoten müssen mit dem tatsächlichen Veröffentlichungsprozess übereinstimmen. Ein global verwendetes Konto auf mehreren Runnern erschwert die Zuordnung im Audit und vergrößert den Schaden bei einer Fehlkonfiguration.
Für die macOS-Notarisierung sollten Sie nicht nur den Upload testen. Die Apple-Notary-API-Dokumentation beschreibt den automatisierten Weg, bei dem Einreichung, Statusabfrage und Ergebnisverarbeitung voneinander zu prüfen sind. Ihre Abnahme muss daher mindestens diese Nachweise enthalten:
- erfolgreiche Einreichung eines definierten Artefakts,
- Statusabfrage mit derselben Vorgangskennung,
- Abruf der Notarisierungsdetails oder des Logs,
- Prüfung des Ergebnisses im vorgesehenen Fehlerfall,
- anschließende Ticket-Prüfung beziehungsweise Ticket-Anbringung,
- nachvollziehbare Zuordnung zu Build-ID und Freigabe.
Öffnen Sie für einen Produktionsknoten nicht einfach alle Ziele, die ein Entwickler-Mac irgendwann benötigt. Ein Signaturknoten sollte möglichst keine unkontrollierten Feature-Branches, beliebigen Paketquellen und interaktiven Debug-Sitzungen gleichzeitig bedienen. Die sicherere Konstruktion besteht aus getrennten Runner-Gruppen, separaten Identitäten, begrenzten Ausgangsregeln und einem dokumentierten manuellen Freigabepunkt für die Veröffentlichung.
SECTION 05 Abnahmeplan für die Unternehmensliste
Die Netzwerk-Whitelist ist erst dann lieferfähig, wenn sie nicht nur genehmigt, sondern reproduzierbar getestet wurde. Verwenden Sie für jeden Knoten eine eigene Regelnummer und bewahren Sie die Belege gemeinsam mit dem Infrastruktur-Change auf.
Durchführbare Abnahmeliste
- [ ] Knotenrolle festgelegt: normaler Build, Abhängigkeiten, Signierung oder Disaster Recovery.
- [ ] CI-Dienstkonto, Runner-Label und Netzwerkzone dokumentiert.
- [ ] Jede Zieladresse einem konkreten Pipeline-Schritt zugeordnet.
- [ ] Interne Repository-, Git-LFS-, Swift-Package-, CocoaPods- und Artefaktquellen getrennt erfasst.
- [ ] Apple-Ziele anhand der offiziellen Host- und Port-Dokumentation geprüft.
- [ ] Xcode-Komponenten und Simulator-Runtime ohne vorhandenen Cache getestet.
- [ ] DNS-Auflösung unter dem CI-Dienstkonto protokolliert.
- [ ] TCP-Verbindung und Firewall-Regel-ID nachgewiesen.
- [ ] TLS-Zertifikatskette, SNI und interne CA geprüft.
- [ ] Authentifizierung mit dem vorgesehenen Token, Schlüssel oder Dienstkonto ausgeführt.
- [ ] Fachlicher Request erfolgreich abgeschlossen, nicht nur der Socket-Test.
- [ ] Vollständiger Build mit Rückgabe von Status und Artefakt durchgeführt.
- [ ] Signatur-, Upload- und Notarisierungsrechte vom normalen Buildbereich getrennt.
- [ ] Private Abhängigkeiten nach Cache-Invalidierung aufgelöst.
- [ ] Proxy-Ausnahmen, TLS-Inspektion und DNS-Umschreibungen dokumentiert.
- [ ] Regelverantwortlicher, Genehmiger, Änderungsgrund und nächste Überprüfung eingetragen.
- [ ] Rückfallregel und Wiederherstellung für eine blockierende Änderung definiert.
- [ ] Runner-Routing verhindert, dass private Aufträge auf ungeeigneten Knoten landen.
Bewerten Sie das Ergebnis mit vier klaren Zuständen:
- Freigegeben: Alle erforderlichen Pipeline-Schritte sind mit dokumentierten Regeln reproduzierbar.
- Befristet freigegeben: Der Build funktioniert, aber ein Beleg, eine Eigentümerschaft oder eine Rückfallregel fehlt.
- Isolierter Pilot: Der Knoten darf kontrollierte Testaufträge ausführen, jedoch keine Produktionssignierung.
- Nicht freigegeben: Ein erforderlicher Datenfluss ist unbekannt, pauschal erlaubt oder nicht reproduzierbar.
Für eine ausgelagerte oder gemietete Mac-Umgebung gelten dieselben Nachweise. Fragen Sie nicht nur nach „Internetzugang“, sondern nach dem tatsächlich verfügbaren Ausgangsmodell, Proxy-Unterstützung, privater Erreichbarkeit, Knotenisolierung und Verhalten nach einer Unterbrechung. Wenn Sie diese Punkte für einen PoC dokumentieren wollen, können Sie die VPSNIX-Hilfedokumentation als Einstieg für die technischen Rückfragen verwenden. Für sicherheitskritische Automatisierung ist außerdem die Abgrenzung von Build- und Agentenrechten relevant; dazu passt die interne Übersicht zur Isolation von Xcode 27 AI Agent.
SECTION 06 Entscheidung zwischen eigenem Mac und gemietetem Mac-Knoten
Ein eigener Mac im Büro oder Rechenzentrum gibt Ihnen maximale Kontrolle über Switches, Routing, Hardwarezugriff und physische Schlüssel. Dafür müssen Sie Beschaffung, Ersatzgerät, Betriebssystempflege, Stromversorgung, Monitoring, Ersatzteilplanung und sichere Fernadministration selbst verantworten. Besonders bei wechselnden Kapazitäten entstehen außerdem ungenutzte Hardwarekosten, wenn der Knoten außerhalb von Release-Phasen kaum ausgelastet wird.
Ein gemieteter Mac-Knoten kann für einen Pilot oder eine zeitlich begrenzte CI-Kapazität sinnvoller sein, wenn Sie die Ausgangsregeln, Proxy-Anbindung, private Abhängigkeiten und Wiederherstellung vorab schriftlich abnehmen. Die Nachteile liegen in der Abhängigkeit von der bereitgestellten Netzarchitektur, in möglichen Einschränkungen bei physischen Schnittstellen und darin, dass interne Compliance- oder Standortvorgaben nicht automatisch erfüllt sind. Eine Mietlösung ist deshalb kein Ersatz für die Prüfung, sondern ein weiterer Knoten in Ihrer Kontrollmatrix.
Wenn Ihr aktueller Ansatz einen gemeinsam genutzten Büro-Mac, unklare Firewall-Ausnahmen und manuell verteilte Signaturschlüssel kombiniert, fehlen meist drei Dinge: nachvollziehbare Identität pro Auftrag, reproduzierbare Netzwerkbelege und eine saubere Trennung zwischen Entwicklungs- und Produktionszugriff. Für einen begrenzten PoC oder wechselnde Buildkapazität kann die Miete eines Mac-Knotens über VPSNIX die Infrastrukturprüfung vereinfachen, sofern Sie die genannten Netzwerk- und Wiederanlauftests vor der Freigabe durchführen. Die verfügbaren Optionen können Sie in der VPSNIX-Übersicht zur Mac-Miete prüfen; entscheiden sollte jedoch die bestandene Abnahmematrix, nicht allein die Verfügbarkeit eines Rechners.