2026 Flutter & React Native CI: Welche Stufen auf macOS-Cloud vs. Linux laufen – Hybrid-Pipeline-Matrix und Parameter
Teams, die iOS-Jobs wie generische Linux-CI behandeln, verbrennen oft macOS-Minuten oder verstecken echte Fehler hinter Retries. Dieser Artikel benennt drei Pain Points, zeigt eine Linux-/macOS-Stufenmatrix für Flutter und React Native, sieben Rollout-Schritte für Tags und Artefakte, harte Schwellen für Architekturreviews und ein FAQ mit Verweisen auf VPSMAC zu Linux-iOS-Grenzen und mehrere Xcode-Versionen. Danach lässt sich nur der iOS-Slice des Pools skalieren.
In diesem Artikel
1. Drei Schwachstellen, wenn iOS wie Linux geplant wird
Monorepos teilen Dart, TypeScript und Linters plattformübergreifend, was Plattformentwickler dazu ermutigt, eine große Matrix wiederzuverwenden. Xcode 26 und SwiftPM gehen immer noch von macOS aus, wenn es um alles geht, was die echte Signierungskette berührt, sodass Fehlplatzierungen als fehlerhafte Caches oder mysteriöse Netzwerkfehler statt als eindeutig fehlendes Toolchain-Signal sichtbar werden. Diese Angewohnheit ist verständlich, da Android-Lanes genauso aussehen wie Backend-Jobs, iOS-Lanes jedoch näher an Firmware-Pipelines liegen, die einen bestimmten Kernel und sichere Elementannahmen erfordern.
Sobald Sie diesen Unterschied verinnerlicht haben, werden Kostengespräche einfacher, da Sie die Android-Skalierung linear mit günstigen vCPUs darstellen können, während die iOS-Skalierung knappen T2-angeschlossenen Speicher und von Apple signierte Toolchains verfolgt.
- Stufenkonflikte erweitern die Triage: Das Ausführen von fast macOS-Skripten unter Ubuntu erzeugt lange irrelevante Protokolle. Der Bereitschaftsdienst wechselt zwischen Zertifikatstheorien und Bildlücken, während bezahlte macOS-Kapazität ungenutzt bleibt oder später für doppelte Verpackungen verschwendet wird.
- Artefakten fehlen Verträge: Wenn Engine-Binärdateien, Hermes-Ausgaben oder Codegen-Ordner die minimale Xcode-Version weglassen und Metadaten aufteilen, schlagen Archive spät fehl. Rollbacks machen dann Linux-Green-Prüfungen ungültig und schaffen falsches Vertrauen in die Release-Bereitschaft.
- Warteschlangen und Festplatten explodieren nur auf Mac: Ein generisches
mobile-Tag ermöglicht es umfangreichen Android-Archiven, knappe macOS-Slots zu stehlen. Ohne einenDERIVED_DATA_PATHpro Zweig können parallele Zweige den freien APFS-Speicherplatz auf einstellige Werte reduzieren, was Linux-Besitzer fälschlicherweise als instabile Apple-Tools und nicht als Planungsfehler interpretiert.
Die folgende Matrix trennt Arbeiten, die auf Linux bleiben sollten, von Arbeiten, die auf SSH-Mac-Cloud-Runnern landen müssen, damit die Finanzen den iOS-Anteil genau finanzieren können.
2. Bühnenmatrix für Flutter und React Native
Verwenden Sie diese Tabelle als Basis für 2026; Wenn Sie mit Containern experimentieren, die vorgeben, macOS für iOS zu ersetzen, lesen Sie zuerst den Artikel zu Linux-Beschränkungen, um illegale Verknüpfungen zu vermeiden.
| Bühne | Flutter-Beispiele | React Native-Beispiele | Betriebssystem | Notizen |
|---|---|---|---|---|
| Statische Analyse und VM-Tests | dart analyze, nur VM flutter test | ESLint, Jest ohne native Brücken | Linux | Hoher Fan-Out, günstige Kerne |
| Pods und Xcodeproj-Analyse | Plugin-Registrierung vor flutter build ios | bundle exec pod install | macOS | Benötigt Xcode-Auflösung |
| Archiv, IPA, ASC-Upload | flutter build ipa, xcodebuild archive | xcodebuild plus Fastlane | macOS | Echte Signierkette |
| Arbeit mit der Benutzeroberfläche des Simulators | Integrationstests auf Simulator | Detox iOS, XCUITest | macOS | Headless benötigt weiterhin einen Simulator-Stack |
| Android-Verpackung | flutter build appbundle | Gradle-Pipeline | Linux oder Container | Isolieren Sie Tags von iOS |
linux-mobile and mac-ios-only instead of one overloaded mobile tag.
3. Sieben Rollout-Schritte
Gehen Sie davon aus, dass selbst gehostete oder gemietete Mac-Cloud-Runner bereits über SSH erreichbar sind. Wenn Ihnen eine Golden-Image-Grundlinie fehlt, erfassen Sie das Header-Triple aus dem Multi-Xcode-Leitfaden, bevor Sie die Parallelität optimieren.
- Pin-Toolchains: Erwartete Xcode- und Flutter-Versionen dokumentieren; Drucken Sie
xcodebuild -versionundflutter --versionzu Beginn jedes macOS-Auftrags. - Linux-Jobs schützen:
pod installmit Umgebungsflags kurzschließen, damit Ubuntu nie vorgibt, ein signierender Host zu sein. - Mac-Eingaben minimieren: Laden Sie nur Sperrdateien und Zwischenpakete von Linux herunter, anstatt den gesamten Workspace-Tarball erneut hochzuladen.
- DerivedData isolieren: Beispiel
DERIVED_DATA_PATH=$CI_WORKSPACE/dd/ios/$CI_COMMIT_SHORT_SHA; Bereinigen mit denselben Festplattenschwellenwerten wie im Build-Queue-Artikel. - Bundler und Compiler serialisieren: Wenn Hermes und Xcode einen Knoten gemeinsam nutzen, trennen Sie die Cache-Verzeichnisse, um APFS-Konfliktspitzen zu vermeiden.
- Zwei CI-Stufen: Zusammenführungsanfragen laufen leichtgewichtig
build-for-testing; Release-Zweige führen nachts vollständige Archive aus. - Runbook-Signale: Verfolgen Sie nach jeder YAML-Änderung die macOS-Warteschlange p95, die Wanduhr und den Prozentsatz des freien Speicherplatzes. Rollback von YAML vor Hot-Patching von Knoten.
4. Schwellenwerte für Bewertungen im Jahr 2026
Reservieren Sie zunächst etwa neunzig bis einhundertzwanzig Gigabyte freien Spitzenspeicherplatz für ein typisches mittleres Monorepo-Archiv, einschließlich DerivedData und dSYM-Staging. Ausfallen Sie schnell unter etwa zwölf Prozent, um neue Archive zu stoppen, bevor APFS-Metadatenfehler auftreten. Zweitens, wenn die Anzahl der macOS-Steckplätze unter einem Viertel der anhaltenden Warteschlangentiefe bleibt, überschreitet das Warten auf p95 normalerweise das Dreifache der mittleren Unit-Test-Wandzeit, was bedeutet, dass Sie Mac-Kapazität hinzufügen sollten, bevor Sie Linux-Flusen reduzieren. Drittens: Ohne Legacy-Bitcode müssen Sie je nach Pods und Swift-Makros mit achtzehn bis fünfunddreißig Minuten pro Archiv rechnen. Viertens weisen Hermes-fähige RN-Builds oft eine durchschnittliche CPU auf, die etwa ein Komma vier bis eins acht Mal so hoch ist wie eine reine JVM-Linux-Stufe, also begrenzen Sie die Parallelität von mac-ios-only separat. Fünftens sollten Sie ein einzelnes Pipeline-iOS-Artefaktpaket zwischen etwa zwei und sechs Gigabyte beibehalten, indem Sie Symbole aus dem IPA aufteilen, um zu vermeiden, dass Download-Minuten das macOS-Budget verschlingen.
Zwei weitere bewertungsfreundliche Zahlen helfen bei der Finanzierung von Gesprächen. Die Cache-Trefferquote für Abhängigkeits-Downloads unter macOS sollte Woche für Woche über etwa siebzig Prozent bleiben; Ein plötzlicher Abfall bedeutet normalerweise, dass jemand den iOS-Job auf ein neues, kurzlebiges Volume gerichtet hat, ohne CocoaPods oder Pub-Caches wiederherzustellen, was die Wandzeit pro Job um acht bis fünfzehn Minuten erhöht. Verfolgen Sie auch den Runner-Taktversatz zwischen Linux- und Mac-Stufen. Eine Abweichung von mehr als zwei Sekunden zwischen den Zeitstempeln der Artefaktsignierung und den ASC-Upload-APIs kann sporadische Authentifizierungsfehler auslösen, die wie zufällige Apple-Ausfälle aussehen, bis NTP behoben ist.
Dokumentieren Sie abschließend, wer für das Rollback zuständig ist, wenn eine fehlerhafte YAML-Änderung die Tiefe der macOS-Warteschlange erhöht: Die Plattformentwicklung sollte zuerst die Pipelinedefinitionen zurücksetzen, da Knoten-Hotfixes ohne YAML-Rollback versteckte Schneeflocken in der gesamten Flotte neu erstellen.
Ergänzend sollten Betriebsteams Runner-Fingerabdrücke und SKU-Namen den Kostenreports beilegen, damit Finanzen klar sehen, welche Minuten nur der iOS-Slice entstehen und nicht der Linux-Pool. Ohne diese Zuordnung wirken Mac-Minuten oft teurer als sie sind.
5. FAQ
Kann pod install unter Linux ausgeführt werden, um Minuten zu sparen?
Nur wenn keine Podspec-Hooks eine Xcode-Analyse erfordern; Die meisten Produktions-RN-Apps sollten CocoaPods weiterhin unter macOS ausführen, da sonst Fehler zur Archivierungszeit gehäuft auftreten.
Spielt das Flutter-Desktop-Linux-Ziel hier eine Rolle?
NEIN; Desktop-Ziele verdienen einen eigenen Runner-Pool und dürfen keine iOS-Tags stehlen.
Wie hängt das mit dem Multi-Xcode-Artikel zusammen?
Dieser Leitfaden befasst sich mit der Koexistenz von xcode-select und SDK; Dieser Leitfaden befasst sich mit betriebssystemübergreifenden Phasenaufteilungen und Tag-Hygiene. Aktualisieren Sie beide Runbooks gemeinsam.
6. Auswahl des Mac-Substrats für eine Hybridtopologie
Laptops und gelegentliche Remote-Desktops können eine Version ausliefern, sie beeinträchtigen jedoch drei Produktionseigenschaften: unvorhersehbare nächtliche Betriebszeit, Xcode-Baselines, die niemals mit einem gemeinsam genutzten SLO übereinstimmen, und Unternehmens-Proxy- oder Zertifikats-Setups, die nicht in CI geklont werden können. Linux bleibt die dichte generische Rechenschicht, während austauschbare macOS-Knoten den Apple-spezifischen Slice bilden. Der Versuch, iOS-Ausgaben ohne natives macOS zu fälschen, verschwendet Minuten mit nutzlosen Protokollen, anstatt Code zu kompilieren. Für Teams, die vorhersehbare Warteschlangen, elastischen SSH-Zugriff und neben Linux-SLOs geschriebene Festplattenrichtlinien benötigen, ist das Mieten von VPSMAC M4-Mac-Cloud-Hosts in der Regel stabiler als die Belegung gemischter persönlicher Maschinen: Bilder, DerivedData-Regeln und Observability-Hooks stimmen mit VPSMAC-Artikeln über SSH-Migration, Multi-Xcode-Pools und Mac-CI-Telemetrie überein.