Symptom: Xcode 27 Beta meldet beim Linken eines XCFramework eine nicht unterstützte Architektur oder ein inkompatibles Ziel.
Schnellste Lösung: Prüfen Sie zuerst, ob das Paket die passende Plattformvariante enthält, dann deren Architektur-Slice und schließlich die tatsächlich gelinkte Datei. Starten Sie Xcode nicht vorschnell mit Rosetta und führen Sie keine Binärdateien blind zusammen.
Dieser Leitfaden richtet sich an SDK- und Binärabhängigkeits-Pflegende, die XCFrameworks für mehrere Apple-Plattformen bereitstellen. Er hilft CI-Verantwortlichen, lokale und entfernte Builds bei Architektur- oder Linkerfehlern kontrolliert zu vergleichen. Auch Apple-Plattformentwickler finden hier einen Ablauf, um Paketfehler von falschen Build-Zielen und Abweichungen in der Remote-Mac-Umgebung zu trennen.
Xcode 27 Beta XCFramework-Architekturfehler zuerst eingrenzen
Behandeln Sie „Architekturfehler“ nicht als Diagnose, sondern als Fehlersymptom. Ein Linker kann eine passende CPU-Architektur vermissen, eine Plattformvariante zurückweisen oder eine andere Datei erhalten als die, die Sie geprüft haben. Diese Fälle sehen in der Fehlermeldung ähnlich aus, verlangen aber unterschiedliche Korrekturen.
Sichern Sie vor Änderungen das vollständige Build-Protokoll. Notieren Sie das fehlgeschlagene Target, das Build-Ziel beziehungsweise Destination, die gewählte Konfiguration und den gesamten Linkertext. Halten Sie außerdem fest, ob der Abbruch beim Kompilieren, Linken oder erst beim Starten beziehungsweise Ausführen erfolgt. So vermeiden Sie, einen Laufzeitfehler als Problem der XCFramework-Auswahl zu behandeln.
| Beobachtung | Wahrscheinliche Fehlerklasse | Nächster Beleg | Diagnosebewertung |
|---|---|---|---|
| Fehlermeldung nennt eine fehlende oder nicht unterstützte Architektur | Architektur-Slice fehlt oder falsche Binärdatei ausgewählt | Architekturen der Datei am tatsächlichen Linkerpfad prüfen | Hoch, wenn Pfad und Binärinhalt erfasst sind |
| Linker meldet inkompatible Plattform oder ein für ein anderes Ziel gebautes Objekt | Plattformvariante fehlt oder Simulator- und Geräteartefakt werden verwechselt | XCFramework-Manifest mit Build-Destination vergleichen | Hoch, wenn beide Plattformangaben vorliegen |
| Der lokale Build funktioniert, der Remote-Build nicht | Andere Abhängigkeitsversion, Xcode-Auswahl, Build-Einstellung oder Pfad | Abhängigkeitsauflösung und Build-Protokolle beider Systeme vergleichen | Mittel, bis der Artefaktpfad bestätigt ist |
| Der Build gelingt, die App startet aber nicht erwartungsgemäß | Laufzeit- oder Einbettungsproblem statt Auswahl beim Linken | Einbettung, Signierung und Laufzeitfehler getrennt untersuchen | Niedrig, wenn nur die Linkermeldung bekannt ist |
Apple führt in den offiziellen Xcode Release Notes mehrere Versionen. Nach der hier geltenden Dokumentationslage vom 06.10.2026 ist Xcode 27 Beta 6 aufgeführt; Xcode 27 Beta ist damit nicht als stabile Version zu behandeln. Prüfen Sie vor einem Versionswechsel die jeweils aktuelle Xcode-27-Beta-Dokumentation. Ein Beta-spezifischer Fehler ist möglich, aber ohne Vergleich mit demselben Artefakt und Ziel kein ausreichender Grund, die Ursache der Beta zuzuschreiben.
Plattformvariante vor CPU-Architektur prüfen
Ein XCFramework ist ein Bündel, das mehrere Plattformvarianten enthalten kann. Die Auswahl richtet sich nicht allein nach der CPU-Architektur. iOS-Gerät, iOS-Simulator, macOS und Mac Catalyst sind getrennte Zielkontexte. Ein Artefakt für iOS auf einem Gerät wird nicht dadurch zu einem Simulator-Artefakt, dass beide auf Apple Silicon mit arm64 arbeiten.
Beginnen Sie mit dem Verzeichnis YourLibrary.xcframework und öffnen Sie die darin enthaltene Info.plist. Für jede verfügbare Bibliothek sind insbesondere die Angaben SupportedPlatform, SupportedPlatformVariant, SupportedArchitectures, LibraryIdentifier und LibraryPath relevant. Vergleichen Sie sie mit dem Destination, das Xcode tatsächlich baut. Für Simulatorziele weist die Plattformvariante auf den Simulator hin; bei Mac Catalyst müssen Sie ebenfalls die passende Variante identifizieren, statt sie mit einem regulären macOS-Ziel gleichzusetzen.
Apple beschreibt in der Anleitung zum Erstellen eines Framework-Bundles für mehrere Plattformen, wie die Varianten eines XCFramework organisiert werden. Nutzen Sie diese Struktur als Referenz, nicht als Annahme darüber, welche Varianten ein konkreter Drittanbieter tatsächlich ausgeliefert hat. Prüfen Sie den Paketinhalt, den Sie im Build verwenden.
Zweiter Prüfschritt: Architektur-Slice der ausgewählten Datei verifizieren
Erst nachdem die Plattformvariante passt, untersuchen Sie die CPU-Architekturen der konkreten Datei. Lesen Sie den Wert LibraryPath aus dem Manifest und bilden Sie daraus den Pfad innerhalb der ausgewählten Variante. Prüfen Sie nicht irgendeine gleichnamige Bibliothek im Paket oder einen früheren Build-Ordner: Relevant ist die Datei, auf die der fehlgeschlagene Linkeraufruf tatsächlich zeigt.
Auf macOS können Sie beispielsweise folgende Prüfungen verwenden:
plutil -p Pfad/zum/YourLibrary.xcframework/Info.plist
file Pfad/zur/ausgewaehlten/Bibliothek
lipo -archs Pfad/zur/ausgewaehlten/Bibliothek
file hilft, den Dateityp und grundlegende Eigenschaften zu erkennen; lipo -archs zeigt die in einer geeigneten Mach-O-Datei enthaltenen Architekturen. Vergleichen Sie das Ergebnis mit der Plattformvariante und dem Build-Ziel. Wenn das Manifest eine Architektur aufführt, die Binärdatei sie aber nicht enthält, ist das Paket inkonsistent. Wenn die Datei zwar arm64 enthält, aber zu einer anderen Plattform gehört, ist die Architektur allein kein Kompatibilitätsnachweis.
Bei einem Apple-Silicon-Simulator ist deshalb nicht Rosetta der erste Reparaturweg. Apple behandelt Architekturfehler auf Apple Silicon in TN3117 als Diagnose der tatsächlich verwendeten Architektur und Abhängigkeit. Ermitteln Sie die fehlende Simulatorvariante und aktualisieren oder bauen Sie die Abhängigkeit passend neu. Xcode unter Rosetta zu starten kann die Zielauswahl verschieben, löst aber keinen fehlenden oder falsch deklarierten Plattform-Slice zuverlässig.
| Prüfoption | Was sie klärt | Stärken | Grenzen und Entscheidung |
|---|---|---|---|
| Manifest auswerten | Welche Plattformvarianten und Architekturen das XCFramework deklariert | Schnell, ohne den Projektcode zu ändern | Belegt nicht, dass die Datei am angegebenen Pfad den Inhalt tatsächlich hat |
| Binärdatei am Linkerpfad untersuchen | Welche Architektur der verwendete Build tatsächlich erhält | Deckt veraltete oder falsch ausgewählte Artefakte auf | Plattformzugehörigkeit muss zusätzlich aus Manifest und Build-Ziel abgeleitet werden |
| Build mit unverändertem Ziel wiederholen | Ob die Reparatur für das reale Destination greift | Prüft den gesamten Auswahl- und Linkerpfad | Ein erfolgreicher Lauf belegt keine Wiederholbarkeit mit anderer Abhängigkeitsauflösung |
| Rosetta als Umgehung versuchen | Ob sich das Verhalten in einer anderen Ausführungsumgebung verändert | Kann einen eng eingegrenzten Vergleich liefern | Kein Ersatz für fehlende Plattformvarianten; als generelle Reparatur ungeeignet |
Paketdeklaration mit realem Linkerpfad abgleichen
Ein korrekt wirkendes Info.plist schließt einen Paketfehler nicht aus. Prüfen Sie, ob die vom Manifest genannte LibraryPath tatsächlich vorhanden ist und ob sie die erwartete Datei bezeichnet. Suchen Sie anschließend im Build-Protokoll nach dem Linkeraufruf oder dem Pfad der eingebundenen Bibliothek. Dieser Schritt deckt Fälle auf, in denen Xcode eine ältere Kopie, einen anderen Paket-Cache oder ein manuell gesetztes Suchverzeichnis verwendet.
Achten Sie besonders auf diese Abweichungen:
- Das Manifest listet eine Variante, deren Bibliotheksdatei fehlt oder anders benannt ist.
- Ein Paket wurde aktualisiert, aber ein Build-Skript oder Suchpfad verweist weiter auf einen vorherigen Ablageort.
- Der Paketmanager löst eine andere Version auf als erwartet, obwohl der Projektquelltext unverändert ist.
- Die veröffentlichte XCFramework-Fassung enthält nicht das Ziel, das der Anbieter in einer separaten Build-Anleitung nennt.
- Ein statisches Bibliotheksartefakt wird anders in das Bundle gelegt als ein Framework; prüfen Sie daher Dateityp und Manifest, statt eine bestimmte Verzeichnisform vorauszusetzen.
Erfassen Sie für die Diagnose ein minimales Artefaktprotokoll: Paketversion oder Commit, Paketquelle, Pfad der ausgewählten Variante, relevante Manifestwerte und Ausgabe der Architekturanalyse. Entfernen Sie Zugangsdaten, interne Hostnamen und andere nicht notwendige Informationen, bevor Sie Logs teilen. So können SDK-Pflegende und CI-Verantwortliche dieselbe konkrete Abhängigkeit untersuchen, statt anhand einer Versionsnummer über möglicherweise unterschiedliche Paketinhalte zu sprechen.
Remote-Mac-CI mit dem lokalen Build reproduzierbar vergleichen
Wenn nur Remote-Mac-CI scheitert, frieren Sie zuerst Commit und Abhängigkeitsauflösung ein. Speichern Sie die Lock-Datei und verwenden Sie für den Vergleich dieselbe Paketquelle. Halten Sie die Xcode-Auswahl, das Build-Ziel und die relevanten Build-Einstellungen fest. Apples Referenz zu Xcode-Build-Einstellungen hilft dabei, Einstellungen nachzuschlagen, statt sich auf angenommene Standardwerte zu verlassen.
Gehen Sie anschließend in dieser Reihenfolge vor:
- Build-Ziel bestätigen. Halten Sie fest, ob Sie ein Geräte-, Simulator-, macOS- oder Mac-Catalyst-Target bauen. Verwenden Sie für den Vergleich dieselbe Destination auf beiden Systemen.
- Xcode-Auswahl erfassen. Dokumentieren Sie die ausgewählte Xcode-Installation und prüfen Sie, ob lokal und in CI tatsächlich dieselbe Toolchain verwendet wird. Verlassen Sie sich nicht allein auf den projektierten Mindestwert oder eine Teamannahme.
- Abhängigkeiten fixieren. Übernehmen Sie Lock-Datei und Paketquelle in den Vergleich. Stellen Sie sicher, dass beide Builds dasselbe aufgelöste Paket und nicht nur denselben Namen der Abhängigkeit verwenden.
- Build-Einstellungen vergleichen. Erfassen Sie insbesondere Architektur-, Suchpfad- und Zielplattformwerte für das fehlgeschlagene Target. Untersuchen Sie bei Bedarf die effektiven Werte mit
xcodebuild -showBuildSettings. - Tatsächlichen Linkerpfad sichern. Finden Sie heraus, welche XCFramework-Variante und welche Bibliotheksdatei der Build verwendet. Prüfen Sie genau diese Datei mit
fileundlipo -archs. - Kontrolliert wiederholen. Führen Sie den Build mit identischem Commit, Ziel und Abhängigkeit erneut aus. Bewahren Sie Protokoll und Paketnachweis als Referenz für spätere Änderungen auf.
Wenn Sie einen entfernten Mac als zusätzliche Reproduktionsumgebung prüfen, betrachten Sie Datenschutz und Stabilität ebenso wie den Build-Zugriff: Zugangsdaten gehören nicht in ungeschützte Logs, und ein einmaliger Erfolg ist noch kein belastbarer CI-Nachweis. Einen Überblick über Remote-Mac-Umgebungen bei MACGPU können Sie in die Infrastrukturprüfung einbeziehen; die Eignung für Ihr konkretes Projekt müssen Sie anhand Ihrer Xcode-, Ziel- und Abhängigkeitsanforderungen verifizieren. Für eine technische Fallanalyse werden keine nicht belegten Angaben zu MACGPU-Konfigurationen oder Testergebnissen vorausgesetzt.
FAQ: Plattform, Architektur und CI getrennt beantworten
Lassen sich iOS-Simulator und iPhone mit demselben XCFramework-Binärartefakt bauen?
Nicht allein aufgrund einer gemeinsamen CPU-Architektur. Der Simulator und ein iOS-Gerät sind unterschiedliche Plattformziele; das XCFramework muss jeweils die passende Variante enthalten. Prüfen Sie SupportedPlatform und SupportedPlatformVariant im Manifest und gleichen Sie sie mit dem Destination ab. Ermitteln Sie danach die Architektur der Bibliothek am tatsächlich verwendeten Pfad. Eine arm64-Angabe allein belegt keine Austauschbarkeit.
Wie erkennen Sie fehlende Plattformvarianten und Architektur-Slices?
Beginnen Sie mit Info.plist: Vergleichen Sie Plattform, Plattformvariante und deklarierte Architekturen mit dem Build-Ziel. Lesen Sie dann LibraryIdentifier und LibraryPath aus, damit Sie genau die zugeordnete Binärdatei untersuchen. file und lipo -archs ergänzen die Manifestprüfung. Fehlt die Variante oder weicht der Binärinhalt von der Deklaration ab, brauchen Sie ein korrigiertes Paket oder einen Neuaufbau.
Weshalb scheitert ein Remote-Mac-Build, obwohl der lokale Build funktioniert?
Die beiden Builds können trotz identischem Quelltext unterschiedliche Abhängigkeitsversionen, Paketquellen, Xcode-Auswahlen, Build-Einstellungen oder Cacheinhalte verwenden. Fixieren Sie Commit und Lock-Datei, bestätigen Sie dasselbe Build-Ziel und vergleichen Sie den tatsächlichen Linkerpfad. Erst wenn beide Systeme dieselbe Datei und dieselben wirksamen Einstellungen verwenden, ist ein Umgebungsunterschied als Ursache sinnvoll zu bewerten.
Wann sollten Sie den Anbieter statt das CI-System korrigieren lassen?
Wenn das XCFramework die verlangte Plattformvariante nicht enthält oder die ausgewählte Binärdatei den benötigten Slice nicht besitzt, kann eine CI-Einstellung das Artefakt nicht nachträglich kompatibel machen. Fordern Sie dann eine passende Anbieterfassung an oder bauen Sie aus verfügbarem Quellcode neu. Ist die Variante vorhanden und korrekt, untersuchen Sie Pfad, Paketauflösung und Build-Einstellungen, bevor Sie den Anbieter für den Fehler verantwortlich machen.
Reparatur mit echten Build-Zielen abnehmen
Ein erfolgreicher Test mit einem einzigen Destination reicht nicht, wenn das Projekt Geräte- und Simulator-Builds unterstützt. Wiederholen Sie die Prüfung getrennt für jedes tatsächlich unterstützte Ziel. Vergewissern Sie sich dabei nicht nur, dass Xcode den Build abschließt, sondern auch, dass das Protokoll die erwartete XCFramework-Variante und den richtigen Bibliothekspfad erkennen lässt.
Verwenden Sie für die Abnahme eine knappe, projektspezifische Liste:
- Entspricht das Build-Ziel dem vorgesehenen Gerät, Simulator oder Mac-Catalyst-Kontext?
- Enthält das XCFramework eine dazu passende Plattformvariante?
- Stimmen Manifestangaben und die reale Bibliotheksdatei überein?
- Zeigt der Linker auf das erwartete Paket und nicht auf einen veralteten Pfad?
- Sind Commit, Xcode-Auswahl und Abhängigkeitsauflösung dokumentiert?
- Lässt sich der Build mit denselben Eingaben wiederholen?
Für Projekte ohne verfügbaren Quellcode ist der eigene Neuaufbau keine Option. In diesem Fall darf die CI nicht durch eine Rosetta-Ausführung oder das Vermischen inkompatibler Bibliotheken „grün“ gemacht werden. Kennzeichnen Sie die fehlende Kompatibilität, blockieren Sie das betroffene Ziel kontrolliert und klären Sie mit dem Anbieter, welche Variante er bereitstellt. Das ist besser nachvollziehbar als ein Build, dessen scheinbarer Erfolg auf einer nicht unterstützten Kombination beruht.
Wenn Ihre lokale Hardware die Reproduktion begrenzt
Wenn die vorhandene Entwicklungsmaschine nicht alle benötigten Apple-Plattformziele stabil und wiederholbar abdecken kann, vergleichen Sie zunächst die realen Alternativen: Ein eigener Mac bietet unmittelbare Kontrolle und eignet sich, wenn Sie dauerhaft dieselbe Umgebung und gegebenenfalls physische Schnittstellen benötigen. Eine Linux- oder Windows-Umgebung ersetzt dagegen kein macOS-spezifisches Xcode-Linking. Ein entfernter Mac kann für zeitlich begrenzte Reproduktion oder eine zusätzliche CI-Spur sinnvoll sein, bringt aber Abhängigkeiten von Netzwerkzugriff, Zugangsschutz und sauber dokumentierter Umgebung mit sich.
Für Tests, die nicht dauerhaft hohe Auslastung oder lokale Hardware voraussetzen, kann die Miete eines Mac die Beschaffung eines weiteren Rechners vermeiden und eine separate macOS-Validierung ermöglichen. Prüfen Sie vorab, ob die verfügbare Xcode-Auswahl und der Zugriff zu Ihrem Projekt passen; eine Mietumgebung behebt jedoch keine fehlenden XCFramework-Slices. Informationen zur Mac-Miete bei MACGPU können Sie heranziehen, wenn Sie für die Diagnose einen zeitlich begrenzten Remote-Mac-Test erwägen. Entscheidend bleibt, denselben Commit, dieselben Abhängigkeiten und dieselben Build-Ziele zu verwenden.
Führen Sie die Entscheidung auf die Ursache zurück: Fehlt die Plattformvariante oder Architektur im Paket, brauchen Sie ein kompatibles Artefakt. Ist das Artefakt korrekt, aber CI wählt eine andere Datei oder Einstellung, korrigieren Sie die Build-Umgebung. Wenn Ihre lokale Hardware die nötigen Ziele nicht zuverlässig reproduziert, prüfen Sie MACGPU als zusätzliche Umgebung für einen kontrollierten Gegencheck, bevor Sie es in eine dauerhafte CI-Spur übernehmen.