Dual-Plattform-Fan-out · Gradle/CocoaPods/DerivedData-Stufen · Queue-Gates und Ein-Knoten-Fallback
Kleine Teams, die ein Flutter- oder React-Native-Monorepo über mehrere Mac-Mesh-Knoten ausliefern, verlieren Wandzeit oft an Cache-Überschreibungen, Queue-Verhungern und regionsübergreifenden Abhängigkeitszügen. Dieser Artikel liefert eine Entscheidungsmatrix seriell vs. Zwei-Knoten-Fan-out vs. dedizierte Runner je Plattform, trennt Gradle-, CocoaPods- und DerivedData-Cache-Schlüssel mit schreibgeschützten Konsumentengrenzen und ergänzt ein sechsstufiges reproduzierbares Gate plus Fallback auf einen Knoten. Zusammen lesen mit Monorepo und betroffenen Builds und regionsübergreifendem Artefakt-Fan-out.
Paralleles Android und iOS ist nicht einfach zwei Pipelines auf einer Maschine ohne I/O-Modell; falsch geplante Parallelität verschiebt Flakiness von Compilern in Scheduler. Tauchen die Signale unten auf, zurück zur Matrix statt mehr Nebenläufigkeit.
Gradle vs. Xcode auf der Platte: ~/.gradle und DerivedData wachsen gemeinsam auf einem Knoten, I/O-Wartezeit dominiert die Wandzeit.
CocoaPods-Auflösung vs. Android-NDK-Drift: fehlende Lockfiles in Cache-Schlüsseln erzeugen grün-remote, rot-Integrations-Falschtreffer.
Metro und Emulatoren um CPUs: interaktive RN-Checks und unbeaufsichtigte CI-Jobs teilen Kerne, Queue-Tiefe steigt, Durchsatz sinkt.
Fan-out ohne schreibgeschützte Kanten: Konsumenten überschreiben gemeinsame Präfixe und verdrängen Artefaktzeiger-Wettläufe.
Regionsübergreifende Cache-Züge ohne Retry-Budgets: Netz-Retries explodieren und verhungern gleichzeitige Seats.
Diese Dimensionen zielen auf Mobile-Monorepos in einem multi-regionalen Remote-Mac-Pool; Ziel ist ein auditierbares Fan-out-Feld. Liefert das Repo schwere native Module, zuerst mit Vollbuild-Kurzschlussregeln im Leitfaden zu betroffenen Builds ausrichten.
| Dimension | Seriell bevorzugen | Dual-Fan-out bevorzugen | Dedizierte Knoten splitten |
|---|---|---|---|
| Änderungsform | nur eine Plattform, Assets oder Text | beide Plattformen heben Abhängigkeiten oder Binärflächen gemeinsam | Android braucht Multi-ABI-Matrizen, iOS parallele Archive-Fenster |
| Queue-Gesundheit | stabile Tiefe, vorhersagbare P95-Wandzeit | Summe der Wartezeiten übersteigt Fan-out-Gewinn | Archiv auf einer Seite blockiert PR-Validierung auf der anderen |
| Cache-Policy | ein Präfix mit Lockfiles und Toolchain-Fingerabdrücken in Schlüsseln | getrennte beschreibbare Präfixe je Plattform, Konsumenten nur lesend | Dedizierte Knoten mit isolierter Generationsnummer und Lease-IDs |
| Multi-Region | eine Region erfüllt SLA | Primary schreibt, Satelliten spiegeln nur lesend | Satelliten dürfen kein Präfix zurückschreiben |
| Fallback | bei Queue-Überlauf oder Plattenalarm auf seriell zusammenziehen | Fan-out nach zwei aufeinanderfolgenden Verifikationsfehlern einfrieren | bei großen Xcode- oder AGP-Migrationen nur eine Plattform erzwingen |
Reproduzierbare Eingaben einfrieren, bevor über Dual-Plattform-Parallelität gestritten wird; die umgekehrte Reihenfolge macht Parallelität zu parallelen Ausfällen.
Runner können sich mit Shared-Pool-Vertrauen auf jedem Knoten anmelden; wenn Artefakte über Ozeane fan-outen, Manifest- und Lease-Felder aus dem Artefakt-Fan-out-Leitfaden ergänzen.
Fünfteiliges Eingabebündel einfrieren: kurzer Commit-Hash, Podfile.lock/Gemfile.lock, Gradle-Lock, xcodebuild -version und Android-SDK/NDK-Major im Pipeline-Header.
Beschreibbare Präfixe trennen: IOS_CACHE_GEN und AND_CACHE_GEN monoton halten; niemals ein beschreibbares Verzeichnis über Plattformen teilen.
Fan-out entscheiden: parallelen Job-Graphen nur bauen, wenn die Matrixzelle Dual-Fan-out vorsieht; sonst seriell bleiben.
Primary schreibt, Konsumenten nur lesend: nur Primäre schreiben Tarballs; Konsumenten prüfen Hash und Größe vor dem Entpacken.
Queue-Budgets: exponentielles Backoff mit harter Obergrenze bei Netzfehlern; darüber Incident öffnen und Seats freigeben.
Fallback auf einen Knoten: bei Platten- oder Queue-Schwellen automatisch auf seriell kollabieren und FANOUT_DISABLED für Postmortems setzen.
IOS_KEY="${CI_COMMIT_SHORT_SHA}:pods:${PODFILE_LOCK_SHA}:$(xcodebuild -version | shasum -a 256 | cut -c1-10)"
AND_KEY="${CI_COMMIT_SHORT_SHA}:gradle:${GRADLE_LOCK_SHA}:${ANDROID_SDK_MAJOR}"
export FASTLANE_SKIP_UPDATE_CHECK=1
echo "{\"ios\":\"$IOS_KEY\",\"android\":\"$AND_KEY\"}" > "${CI_PROJECT_DIR}/dual-cache.manifest"
Hinweis: Schlüsselfelder lassen sich durch ein eigenes Manifest für Ihren Stack ersetzen; monotone Generationen und beschreibbare Präfixe je Plattform beibehalten und Abhängigkeitsgraphen auf Konsumenten nicht neu parsieren.
Die folgenden Größen als Review- und Kapazitäts-Startpunkte behandeln; durch echte Build-Histogramme und Queue-Metriken ersetzen, niemals als externe SLA verkaufen. Postmortems sollten Dual-Plattform-P95, Tarball-Expand-Zeit und Seat-Haltezeit gemeinsam führen.
FANOUT_DISABLED und menschliche Inspektion mehr Parallelität vorziehen.| Teamsignal | Startpostur | Bezug Artefakt-Fan-out |
|---|---|---|
| einstellige Mitwirkende | eine Region, serielles Dual-Plattform plus lokale Caches | wenig Fan-out-Bedarf, einfachere Schlüssel |
| Multi-Region-PRs | Primary schreibt beide Präfixe, Satelliten nur lesend | eng gekoppelt an rsync- oder Objektspeicher-Fan-out |
| nächtliche KI-Agenten-Batches | schwere Compile-Knoten vom interaktiven Pool isolieren | verhindert, dass Nachtjobs gemeinsame Schlüsselräume sprengen |
Achtung: regionsübergreifenden Fan-out zu öffnen, bevor Konsumenten nur lesend sind, verstärkt Halb-Sync-Probleme zu gleichzeitigen falsch grünen Läufen.
Laptops mit Android-Emulatoren und iOS-Archiven zusammen verlieren routinemäßig Zeit an Sleep, Sperrbildschirm und Bandbreiten-Jitter; reine SaaS-Mobile-Build-Farmen kollidieren oft mit nativem Debugging und Unternehmens-Netzwerkpolicy. Teams, die dual-plattformfähige Continuous Delivery und auditierbare Knotenrollen in einer Kapazitätsgeschichte brauchen, verlieren auf DIY-Stacks Observability und Berechtigungskanten.
Teams, die vertragliche Knoten, reviewbare Bandbreite und Regionswahl brauchen, liefern kritische Dual-Plattform-Builds auf bestellbaren Cloud-Macs mit expliziter Queue-Policy meist schneller. Für Cross-Platform-Delivery plus nächtliche KI-Agentenlast passt VpsMesh Mac-Mini-Cloud-Miete typischerweise besser: Knoten splitten sauber, Links bleiben auditierbar, Parallelität ist so messbar wie Queue-Tiefe.
Build-Logs und synchronisierte Manifeste können personenbezogene oder geschäftskritische Spuren enthalten; Aufbewahrung und Zugriff sollten daher dokumentiert mit den Anforderungen der DSGVO abgestimmt sein.
Fan-out, wenn beide Stränge die Wandzeit strecken, I/O auf einem Knoten oder Konkurrenz zwischen Emulator und xcodebuild sichtbar wird oder die Queue-Tiefe über der Schwelle bleibt; seriell bleiben, wenn Änderungen nur eine Plattform betreffen. Mehr Kürzlogik im Monorepo-Artikel zu betroffenen Builds.
Gemeinsames beschreibbares Präfix ohne Isolation vermeiden; Schlüssel und Verzeichnisse staffeln mit schreibenden Primären und schreibgeschützten Konsumenten. Für regionsübergreifenden Fan-out die Artefakt-Fan-out-Matrix lesen.
Preisseite und Bestellseite lesen, dann Remote-Zugriffsrichtlinien im Hilfezentrum vor dem Onboarding prüfen.