Die Tuist-Änderung vom 08.09.2026 beschreibt die Wiederverwendung von Cache-Blöcken, reduziert damit aber nicht automatisch jede langsame Pipeline. Wenn wiederholte Compilerarbeit den größten Anteil ausmacht, testen Sie zuerst Tuist Xcode Cache. Wenn Ihre Jobs auf freie Mac Runner warten oder Simulator- und Signierungsschritte dominieren, erweitern oder trennen Sie die Remote-Mac-Kapazität. Treten beide Symptome gemeinsam auf, fahren Sie Cache und Kapazität im Dual-Track.
Symptom → schnellste Maßnahme
- Gleicher Quellcode wird immer wieder kompiliert: Cache-Versuch mit sauberer Vergleichsmessung.
- Der Job wartet vor dem Start oder auf eine freie grafische Sitzung: zusätzliche oder getrennte Remote-Mac-Knoten.
- Cache-Treffer sind sichtbar, die Lieferung bleibt weiterhin langsam: Cache behalten, Netzwerk und Aufteilung der Runner prüfen.
Zuletzt geprüft am 15.09.2026. Die Aussagen zu Cache-Verhalten, Übertragungsmechanismus, Xcode-Messung und Runner-Zuständen wurden anhand der in diesem Artikel verlinkten offiziellen Dokumentation geprüft.
SECTION 01Für wen diese Entscheidung relevant ist
Diese Anleitung richtet sich an Sie, wenn Sie ein großes iOS- oder macOS-Projekt betreuen und identische Abhängigkeiten oder Quellcodedateien wiederholt kompilieren.
Sie ist ebenso für DevOps-Ingenieure mit selbstverwaltetem Mac CI gedacht, die zwischen langer Einzelbuild-Zeit und belegten Runnern unterscheiden müssen. Entwicklungs- und Plattformverantwortliche erhalten ein Verfahren, mit dem sich Optimierung, zusätzliche Mietkapazität oder ein paralleler Betrieb begründen lassen.
SECTION 02Die tatsächlich langsame Zeitphase bestimmen
Bevor Sie Cache-Einstellungen ändern, zerlegen Sie den Ablauf in getrennte Messgrößen. Eine Pipeline kann im Dashboard als „langsam“ erscheinen, obwohl die Compilerphase normal läuft und der eigentliche Verlust vor dem Start, beim Herunterladen von Artefakten oder während der UI-Tests entsteht.
Unterscheiden Sie mindestens diese fünf Zeiten:
- Wartezeit: Der Auftrag wartet auf einen passenden Runner.
- Kalte Build-Zeit: Der Quellstand wird ohne verwertbare lokale oder entfernte Artefakte gebaut.
- Inkrementelle Build-Zeit: Nur geänderte Eingaben und ihre Abhängigkeiten werden verarbeitet.
- Cache-Übertragung: Artefakte werden geprüft, hochgeladen oder heruntergeladen.
- Auslieferungszeit: Simulator, UI-Test, Archivierung, Signierung und Veröffentlichungslogik laufen nach dem Kompilieren.
Die Apple-Dokumentation zu schnelleren inkrementellen Builds beschreibt, warum Build-Eingaben und Abhängigkeiten die Wiederverwendbarkeit beeinflussen. Für Ihre Entscheidung ist deshalb nicht die Gesamtzeit allein relevant, sondern die längste tatsächlich beeinflussbare Phase.
Ein typischer Konflikt in der Praxis
Nehmen Sie an, ein Pull-Request baut nach kleinen Änderungen erneut große Abhängigkeitsbäume. Der Compiler benötigt lange, der Runner ist jedoch sofort verfügbar. In diesem Fall passt ein Cache-Versuch.
In einem anderen Projekt endet der Compiler schnell, aber der Auftrag wartet, weil ein einziger Mac bereits einen Simulator-Test oder eine Archivierung ausführt. Ein Cache kann die belegte Sitzung nicht parallelisieren. Hier ist ein zusätzlicher oder anders gerouteter Remote-Mac die passendere Maßnahme.
Beides kann gleichzeitig auftreten: Wiederholte Builds verbrauchen viel CPU, während wenige Runner die Aufträge zusätzlich stauen. Dann wäre es falsch, Cache gegen Kapazität auszuspielen.
SECTION 03Tuist Xcode Cache gezielt für Xcode einsetzen
Tuist Xcode Cache kann gemeinsam nutzbare Xcode-Kompilierungsartefakte bereitstellen. Die offizielle Tuist-Anleitung zu Xcode Cache nennt dafür Umgebungsanforderungen, CI-Konfiguration, Upload-Strategien und Zustände für Cache-Treffer. Das macht die Funktion besonders interessant, wenn dieselben Eingaben regelmäßig in sauberen CI-Umgebungen verarbeitet werden.
Sie sollten den Cache-Versuch beginnen, wenn alle folgenden Bedingungen erfüllt sind:
- Mehrere Jobs verwenden dieselben oder sehr ähnliche Commit-Stände.
- Die Build-Timing-Ausgabe zeigt einen hohen Anteil wiederholter Compilerarbeit.
- Toolchain, Zielarchitektur, Build-Einstellungen und Abhängigkeitsschloss sind reproduzierbar.
- Die Verbindung zum Cache-Dienst ist aus den betroffenen Runnern erreichbar.
- Die Identität des CI-Auftrags darf Artefakte lesen und, falls vorgesehen, hochladen.
- Die zusätzliche Übertragung ist nicht bereits langsamer als die eingesparte Compilerarbeit.
Die entscheidende Frage lautet daher nicht „Wie hoch ist die Cache-Trefferquote?“, sondern: Wie viel ausführbare Compilerarbeit wird bei einem erfolgreichen Treffer tatsächlich vermieden, und was kostet die Prüfung sowie Übertragung?
Eine allgemein gültige Trefferquote, ab der Tuist Xcode Cache immer sinnvoll ist, lässt sich aus der offiziellen Dokumentation nicht ableiten. Die Quote hängt von Projektstruktur, Eingaben, Toolchain, Zielarchitektur, Cache-Schlüssel und CI-Verhalten ab. Verwenden Sie deshalb Ihre eigenen Jobdaten statt eines fremden Schwellenwerts.
Warum ein Treffer nicht automatisch eine schnelle Pipeline bedeutet
Ein Cache kann korrekt funktionieren, während die Lieferung weiterhin langsam bleibt. Das passiert beispielsweise, wenn große Artefakte aus einer weit entfernten Region übertragen werden, wenn viele Dateien einzeln geprüft werden oder wenn nach dem Kompilieren noch ein langer UI-Test läuft.
Die Tuist-Änderungsnotiz vom 08.09.2026 beschreibt die Wiederverwendung von Blöcken im Übertragungsmechanismus. Daraus folgt eine begrenzte, aber wichtige Aussage: Es kann weniger Übertragungsarbeit anfallen, wenn bereits passende Teile vorhanden sind. Daraus folgt nicht, dass jedes Projekt denselben prozentualen Build-Gewinn erzielt.
Behalten Sie den Cache, wenn die Compilerphase messbar sinkt und Übertragungszeit sowie Fehlerquote beherrschbar bleiben. Begrenzen Sie Uploads oder ändern Sie den Cache-Endpunkt, wenn ungenutzte Artefakte den Netzwerkpfad belasten. Stoppen Sie den Versuch zunächst, wenn sich Cache-Eingaben bei identischem Commit und identischem Toolchain-Kontext unerwartet verändern.
SECTION 04Cache-Probleme und Remote-Mac-Wartezeit unterscheiden
Ein wartender Auftrag und ein langsamer Compiler erzeugen im Dashboard oft denselben falschen Eindruck: „Xcode ist zu langsam.“ Sie müssen deshalb den Zeitstempel des Auftragseingangs, die Zuweisung des Runners und den Beginn der eigentlichen Build-Ausführung getrennt protokollieren.
Die Regeln für selbstverwaltete Runner erklären, dass Labels und Runner-Gruppen die Auswahl eines passenden Ausführers beeinflussen. Ein Auftrag kann also warten, obwohl irgendwo ein Mac online ist, wenn dieser Mac die geforderten Merkmale, Gruppe oder Berechtigungen nicht erfüllt.
Prüfen Sie in dieser Reihenfolge:
- Erfassen Sie den Zeitpunkt, zu dem der CI-Auftrag in die Warteschlange gelangt.
- Erfassen Sie den Zeitpunkt, zu dem ein konkreter Mac Runner zugewiesen wird.
- Vergleichen Sie diese Wartezeit mit dem Beginn von
xcodebuild. - Aktivieren Sie die Build-Timing-Ausgabe und trennen Sie Compiler- und Skriptphasen.
- Markieren Sie Cache-Prüfung, Download, Upload und lokalen Build separat.
- Prüfen Sie, ob Simulator, Archivierung oder Signierung nach dem Build den größten Restanteil erzeugen.
Wenn die Wartezeit regelmäßig vor der Runner-Zuweisung entsteht, kann Cache allein die Kapazität nicht ersetzen. Ein Cache verkürzt einen Teil eines laufenden Auftrags; er macht einen belegten oder inkompatiblen Runner nicht frei.
Cache-Treffer mit schlechter Gesamtzeit
Ein sinnvoller Diagnosefall sieht so aus:
- Der gleiche Commit erzeugt einen Cache-Treffer.
- Die Compilerphase wird kürzer.
- Die Warteschlange bleibt unverändert.
- Der Simulator-Test belegt weiterhin denselben Runner.
- Die effektive Lieferzeit verbessert sich kaum.
Die richtige Reaktion ist hier nicht, den Cache sofort abzuschalten. Bewerten Sie zunächst, ob der Cache seine Teilaufgabe erfüllt. Wenn die Compilerzeit sinkt, aber die Pipeline durch Queue oder Tests bestimmt wird, behalten Sie ihn und ergänzen Sie Kapazität beziehungsweise eine getrennte Testklasse.
Für die Authentifizierung und CI-Anbindung sollten Sie die Tuist-Hinweise zur kontinuierlichen Integration direkt gegen Ihre verwendete Identität und deren Berechtigungen prüfen. Ein lokal funktionierender Cache beweist nicht, dass der CI-Dienst mit derselben Umgebung lesen oder schreiben darf.
SECTION 05Grenzen von Cache bei UI-Tests und Signierung
Tuist Cache kann kompilierte Eingaben wiederverwenden. Er ersetzt jedoch nicht die Schritte, die eine App tatsächlich starten, mit einem Simulator oder Gerät verbinden, archivieren oder signieren müssen.
Die Apple-Dokumentation zu Simulator- und Gerätetests behandelt das Ausführen der Anwendung auf simulierten oder physischen Geräten. Diese Laufzeit ist eine andere Problemklasse als die Wiederverwendung eines Compilerartefakts.
Auch die Apple-Hinweise zur Archivierungsfehlerbehebung zeigen, dass Archivierung und Signierung eigene Umgebungsbedingungen besitzen. Zertifikate, Profile, Schlüsselbundzugriff, Exportoptionen und reproduzierbare Build-Einstellungen müssen in der Ausführungsumgebung verfügbar sein.
Ordnen Sie die Aufgaben deshalb drei Pools zu:
- Build-Pool: wiederholbare Kompilierung und Abhängigkeitsverarbeitung.
- Test-Pool: Simulator-, UI- und Geräteinteraktion mit möglicher grafischer Sitzung.
- Release-Pool: Archivierung, Signierung, Export und Zugriff auf sensible Geheimnisse.
Eine Trennung lohnt sich, wenn ein UI-Test die Build-Aufträge regelmäßig blockiert oder wenn Release-Jobs wegen ihrer Zugangsdaten nicht auf denselben Runner dürfen. Sie brauchen nicht automatisch drei physische Pools. Entscheidend sind getrennte Routing-Regeln, Berechtigungen und Belegungsprofile.
Erster Schritt: Projektbedingungen vor dem Cache-Versuch prüfen
Stoppen Sie vor einer Cache-Einführung und korrigieren Sie zuerst die Projektbedingungen, wenn:
- identische Commits unterschiedliche Toolchains verwenden,
- Zielarchitektur oder SDK zwischen lokalen und CI-Jobs wechselt,
- generierte Dateien nicht deterministisch entstehen,
- Abhängigkeiten ohne kontrollierten Lock-Zustand aufgelöst werden,
- Pfade oder Umgebungsvariablen in Cache-relevante Eingaben einfließen,
- Skripte bei jedem Lauf unkontrolliert neue Artefakte erzeugen.
Ein Cache kann keine fehlende Reproduzierbarkeit reparieren. Er kann lediglich sichtbarer machen, dass Eingaben nicht stabil genug sind. Bevor Sie neue Remote-Mac-Kapazität mieten, sollten Sie ebenso prüfen, ob der Runner wegen unnötig enger Labels oder Gruppen nicht zur Aufgabe passt.
SECTION 06Fünf Schritte für einen belastbaren Vergleich
1. Einen festen Referenzlauf definieren
Wählen Sie denselben Commit, dieselbe Xcode-Version, dieselbe Zielarchitektur und denselben Umfang an Tests. Führen Sie mindestens einen Lauf ohne verwertbaren Cache und einen Lauf mit aktivierter Cache-Konfiguration durch. Ein einzelner erfolgreicher Lauf reicht nicht als Freigabeentscheidung.
2. Die Messpunkte im CI sichtbar machen
Speichern Sie die Zeitpunkte für Warteschlangeneintritt, Runner-Zuweisung, Cache-Prüfung, Download, xcodebuild, Upload, Tests und Signierung. Die Apple-Anleitung zur Build-Geschwindigkeit ist dabei die Referenz für die Xcode-seitige Timing-Auswertung.
3. Trefferarten auseinanderhalten
Markieren Sie für jeden relevanten Build, ob ein Artefakt lokal wiederverwendet, aus dem entfernten Cache geladen oder neu erzeugt wurde. „Cache aktiviert“ ist kein Beweis für einen Treffer. Ein fehlgeschlagener Upload und ein sauberer Cache-Miss müssen getrennt erscheinen.
4. Netzwerk und Artefaktpfad bewerten
Messen Sie Download- und Upload-Phasen getrennt vom Compiler. Prüfen Sie Region, DNS-Auflösung, TLS-Verbindung, Bandbreite, Artefaktgröße und Wiederholungen. Wenn die Übertragung einen großen Teil der eingesparten Compilerzeit verbraucht, testen Sie einen näheren Endpunkt oder eine strengere Upload-Strategie.
5. Warteschlange und Auslieferung separat entscheiden
Wiederholen Sie den Vergleich mit einem realistischen PR-Aufkommen sowie mit zeitgesteuerten und Release-Jobs. Wenn die Cache-Wirkung bei PRs sichtbar ist, aber Release-Aufträge wegen Signierung warten, benötigen Sie vermutlich eine Routing- oder Pool-Entscheidung statt weiterer Cache-Optimierung.
Prüfliste für die Freigabe
- [ ] Derselbe Commit wurde mit identischem Toolchain-Kontext verglichen.
- [ ] Kalter Build, inkrementeller Build und Cache-Treffer sind getrennt erkennbar.
- [ ] Warteschlangenzeit wurde nicht in die Compilerzeit eingerechnet.
- [ ] Download und Upload erscheinen als eigene Messpunkte.
- [ ] Cache-Berechtigung und CI-Identität wurden tatsächlich geprüft.
- [ ] Simulator-, UI-Test- und Signierungszeit wurden separat erfasst.
- [ ] Ein Cache-Miss führt zu einem definierten, funktionierenden Rückfall.
- [ ] Ein Runner-Ausfall führt zu einer dokumentierten Umleitung oder Fehlermeldung.
- [ ] Für die Entscheidung wurde mehr als ein repräsentativer Auftrag verwendet.
- [ ] Es gibt eine Abbruchbedingung für Uploadkosten, Instabilität oder fehlende Reproduzierbarkeit.
SECTION 07Die passende Option für jeden Engpass
Die folgende Gegenüberstellung ist kein Versprechen einer bestimmten Beschleunigung. Sie ordnet die Maßnahme der Zeitquelle zu, die Sie zuvor gemessen haben.
| Beobachtung im CI | Primäre Maßnahme | Was Sie zusätzlich prüfen | Stop- oder Rückfallbedingung |
|---|---|---|---|
| Wiederholte Compilerarbeit dominiert | Tuist Xcode Cache kontrolliert einführen | Trefferart, Eingaben, Übertragungszeit | Cache-Eingaben bleiben instabil oder Übertragung überwiegt |
| Jobs warten auf passende Mac Runner | Remote-Mac-Kapazität erweitern oder Routing lockern | Runner-Labels, Gruppen, Online-Zustand | Neue Kapazität wird nicht passend zugewiesen |
| Compilerzeit und Warteschlange sind beide relevant | Cache und zusätzliche Runner im Dual-Track | PR-, Test- und Release-Routing | Eine Maßnahme verbessert nur eine Phase, ohne die Gesamtlieferung zu verändern |
| Cache trifft, UI-Test bleibt lang | Test-Pool trennen | Simulator-Sitzung, Laufzeit, Testparallelität | Test benötigt exklusive Umgebung oder geheime Zugangsdaten |
| Signierung blockiert den Release-Job | Separaten Release-Pool einrichten | Schlüsselbund, Profile, Export und Rechte | Signierungsumgebung ist nicht reproduzierbar |
| Cache-Miss tritt bei gleichem Kontext unerwartet auf | Projekt- und Toolchain-Reproduzierbarkeit reparieren | Pfade, Skripte, Architektur, Abhängigkeiten | Erst nach stabiler Eingabe erneut messen |
SECTION 08Entscheidung zwischen Cache, Erweiterung und Dual-Track
Wählen Sie Tuist Xcode Cache zuerst, wenn die meiste Zeit in wiederholbarer Compilerarbeit steckt, die Runner verfügbar sind und die Cache-Eingaben stabil genug bleiben. Der Versuch sollte eine dokumentierte Rückfallroute besitzen, damit ein Cache-Dienstfehler keinen gesamten PR-Prozess blockiert.
Wählen Sie zusätzliche oder getrennte Remote-Mac-Knoten, wenn Aufträge vor dem Start warten, Simulator-Tests Sitzungen lange belegen oder Release-Aufgaben wegen Signierung nicht gemeinsam mit normalen Builds laufen können. Ein zweiter Knoten hilft allerdings nur, wenn Routing, Berechtigungen und passende Toolchain tatsächlich vorbereitet sind.
Wählen Sie den Dual-Track, wenn beide Bedingungen nachweisbar sind: wiederholte Kompilierung kostet viel Laufzeit und gleichzeitig fehlt freie, passende Mac-Kapazität. In diesem Modell optimiert der Cache die Ausführung einzelner Jobs, während zusätzliche Knoten die Warteschlange und Pool-Konflikte entschärfen.
Wenn Sie die Gegenprobe mit eigener Infrastruktur durchführen möchten, können Sie zunächst die aktuellen MACNOX-Mietoptionen als mögliche kurzfristige Kapazität neben dem Kauf oder Betrieb eines eigenen Mac mini einordnen. Entscheidend ist nicht die bloße Anzahl der Macs, sondern ob der zusätzliche Knoten zur Region, Toolchain, Zugriffspolitik und Aufgabe passt.
Ein eigener Mac mini bietet bei dauerhaft hoher Auslastung und benötigten physischen Schnittstellen mehr Kontrolle. Ein Remote-Mac ist dagegen flexibler, wenn Sie für eine begrenzte Phase zusätzliche CI-Kapazität, einen echten Apple-Silicon-Kontext oder eine getrennte Build-Umgebung benötigen. Bei beiden Modellen bleiben Netzwerk, Zugangsschutz, Schlüsselverwaltung und Neustartverhalten Teil Ihrer Betriebsverantwortung.
SECTION 09Ihr nächster Schritt nach der Messung
Wenn Ihre Messung zeigt, dass der Compiler wiederholt dieselben Eingaben verarbeitet, starten Sie einen begrenzten Tuist-Xcode-Cache-Versuch und definieren Sie vorher Treffer-, Übertragungs- und Rückfallmetriken. Wenn dagegen Warteschlange, Simulator oder Release-Aufgaben dominieren, ist eine Erweiterung beziehungsweise Pool-Trennung sinnvoller als eine weitere Cache-Anpassung.
Für kurzfristige Tests oder eine zusätzliche CI-Umgebung kann MACNOX für Remote-Mac-Zugriff eine praktischere Zwischenlösung sein als der sofortige Kauf weiterer Hardware. Für langfristig konstante Schwerlast, besondere physische Geräte oder streng isolierte Signierung ist der eigene Mac weiterhin die ehrlichere Option. Entscheiden Sie erst nach der Gegenmessung, welche Zeitquelle Sie tatsächlich bezahlen: Compiler, Netzwerk, Warteschlange oder Auslieferung.