Xcode 27 ist da: Anforderungen, Deployment Targets und was kaputtging
Xcode 27 erschien am 14. September 2026 als Build 27A266a, drei Tage nach dem iOS-27.0-RC-Eintrag im Releases-Feed und zusammen mit iOS 27.0 (24A437), macOS 27.0 (26A428) und den übrigen 27er-Plattformen; App Store Connect nimmt seit demselben Tag Builds mit den 27.0-GA-SDKs an, nachdem es RC-SDK-Builds bereits seit dem 9. September akzeptiert hatte.15 Es setzt macOS Tahoe 26.6 oder neuer und einen Mac mit Apple Silicon voraus, bringt Swift 6.4 und die 27er-SDKs mit, debuggt Geräte ab iOS 17 und hebt drei Deployment-Untergrenzen an: macOS 12, watchOS 9 und DriverKit 21.23 Bestehende Projekte treffen auf drei harte Fehler (das @State-Makro, einen Source Break aus SE-0508 und das Linker-Flag -ld64), eine Regel im Abhängigkeitsscan, die einen Fehler melden kann, eine stille Änderung an ARCHS_STANDARD und zwei Warnungen; alles außer der Scan-Regel habe ich unten auf 27A266a nachvollzogen.246
{.answer-block}
Das Wichtigste in Kürze
- Termine und Builds. Apples Releases-Feed führt Xcode 27 (27A266a) und alle sechs 27.0-Betriebssysteme unter Montag, dem 14. September; sein Eintrag „iOS 27.0 RC (24A437)“ trägt das Datum Freitag, 11. September, zwei Tage nachdem App Store Connect begonnen hatte, RC-SDK-Uploads anzunehmen, und die GA trägt dieselbe Build-Nummer.15 Die eigenen Release Notes von App Store Connect zum 14. September besagen, dass Sie jetzt mit Xcode 27 gebaute Apps für den Store und für TestFlight hochladen können.5
- Anforderungen und Untergrenzen sind gestiegen. Xcode 26.6 lief auf macOS 26.2 und debuggte iOS-15-Geräte; Xcode 27 braucht macOS 26.6, läuft nur auf Apple Silicon und debuggt iOS 17, tvOS 17 und watchOS 10 oder neuer, im Simulator ebenso wie auf Hardware. Die Mindest-Deployment-Targets steigen von macOS 11 auf 12, watchOS 8 auf 9 und DriverKit 20 auf 21; iOS, iPadOS und tvOS bleiben bei 15, visionOS bei 1.23
- Drei harte Fehler. Das
@State-Makro: Apples eigenes Beispiel, ein Initializer, der einer@State-Property mit Startwert an der Deklaration vor den anderen gespeicherten Properties einen Wert zuweist, scheitert mitvariable 'self.title' used before being initialized; eine berechnete Property mit einem Array- oder Dictionary-Literal als Startwert und eineminit-Accessor kompiliert nicht mehr, wenn der Getter zuerst steht, ein Source Break, den Apple SE-0508 zuschreibt; und das Linker-Flag-ld64, das Xcode 15 dokumentierte, lässt das Linken mitld: library 'd64' not foundscheitern.2468 - Vier Änderungen, die warnen, Fehler melden können oder schweigen. Der Linker ignoriert
-ld_classicmit einer Warnung, weil ld64 verschwunden ist; doppelte Clang-Modulnamen innerhalb eines Abhängigkeitsscans „may report an error“ (können einen Fehler melden); ein reines macOS-Target auf 27.0 baut nur noch arm64, sofern Sie x86_64 nicht selbst wieder hinzufügen, und nichts warnt; undPreviewProviderträgt eine 27.0-Deprecation mit „Use #Preview instead.“, während jeder Preview-Modifier seine eigene Ersatzmeldung trägt, von denen der Compiler unterhalb eines Deployment Targets von 27.0 keine einzige anzeigt.24 - Apple hat Xcode 27.1 mit Stand 15. September nicht veröffentlicht. Weder der Releases-Feed noch der Release-Notes-Index führen es, und Apples Entwicklerseite zum iPhone Duo datiert die 27.1-Beta weiterhin auf „later this month“ (später in diesem Monat); die SDK-Lücke aus meinem Duo-Beitrag für Entwickler besteht weiter.1
Was erschien am 14. September?
| Eintrag | Build | Datum im Feed |
|---|---|---|
| Xcode 27 | 27A266a | Mo., 14. Sep. 2026 |
| iOS 27.0 / iPadOS 27.0 | 24A437 | Mo., 14. Sep.; der Feed-Eintrag „iOS 27.0 RC (24A437)“ trägt das Datum Fr., 11. Sep., und App Store Connect nahm RC-SDK-Uploads ab Mi., 9. Sep. an |
| macOS 27.0 | 26A428 | Mo., 14. Sep. |
| tvOS 27.0 | 24J361 | Mo., 14. Sep. |
| visionOS 27.0 | 24M362 | Mo., 14. Sep. |
| watchOS 27.0 | 24R364 | Mo., 14. Sep. |
| App Store Connect | „You can now upload apps built with Xcode 27 using the SDK for iOS 27.0, iPadOS 27.0, macOS 27.0, tvOS 27.0, visionOS 27.0, and watchOS 27.0 for the App Store, and for internal and external testing through TestFlight.“ (Mit Xcode 27 und den 27.0-SDKs gebaute Apps lassen sich jetzt für den App Store sowie für interne und externe Tests über TestFlight hochladen.) | 14. Sep. |
Der Abschnitt Overview der Release Notes lautet: „Xcode 27 includes Swift 6.4 and SDKs for iOS 27, iPadOS 27, tvOS 27, watchOS 27, macOS 27, and visionOS 27. Xcode 27 supports on-device debugging in iOS 17 and later, tvOS 17 and later, watchOS 10 and later, and visionOS. Xcode 27 requires a Mac running macOS Tahoe 26.6 or later.“ (Xcode 27 enthält Swift 6.4 und die 27er-SDKs, unterstützt Debugging auf Geräten ab iOS 17, tvOS 17 und watchOS 10 sowie unter visionOS und benötigt einen Mac mit macOS Tahoe 26.6 oder neuer.)2 Auf diesem Mac gibt xcodebuild -version die Zeile Xcode 27.0 Build version 27A266a aus und swift --version die Zeile Apple Swift version 6.4 (swiftlang-6.4.0.34.1 clang-2100.3.34.1).4
Was setzt Xcode 27 voraus, verglichen mit 26.6?
Apples Kompatibilitätstabelle ist das Dokument, das Sie vor dem Upgrade eines Build-Rechners prüfen sollten. Die beiden Zeilen nebeneinander:3
| Xcode 26.6 | Xcode 27 | |
|---|---|---|
| macOS zum Ausführen | Tahoe 26.2 bis 26.x | Tahoe 26.6 oder neuer, nur Apple Silicon2 |
| SDKs | iOS, tvOS, watchOS, visionOS, macOS 26.5; DriverKit 25.5 | iOS, tvOS, watchOS, visionOS, macOS 27; DriverKit 27 |
| Deployment Targets | iOS 15, tvOS 15, watchOS 8, visionOS 1, macOS 11, DriverKit 20 | iOS 15, tvOS 15, watchOS 9, visionOS 1, macOS 12, DriverKit 21 |
| Debugbare Geräte | iOS 15, tvOS 15, watchOS 8, visionOS 1 oder neuer | iOS 17, tvOS 17, watchOS 10, visionOS 1 oder neuer |
| Simulatoren | iOS 15, tvOS 15, watchOS 8, visionOS 1 oder neuer | iOS 17, tvOS 17, watchOS 10, visionOS 1 oder neuer |
| Swift-Compiler | 6.3 | 6.4 (Sprachmodi 6, 5, 4.2, 4) |
Hinter diesen Zeilen verbergen sich zwei Konsequenzen. Instruments weist jetzt Geräte ab, die älter als iOS 17, watchOS 10 oder tvOS 17 sind, sodass ein Profiling-Aufbau auf einem alten iPhone den Dienst quittiert, bevor irgendeine Zeile App-Code das tut.2 Und die Tastatur- und Zeigerinteraktionen des Device Hub grenzt Apple mit einem Satz ein: „only supported on the following OS versions and newer: macOS 15.0, iOS 18.0, tvOS 18.0, watchOS 11.0, visionOS 2.0.“ (nur ab macOS 15.0, iOS 18.0, tvOS 18.0, watchOS 11.0 und visionOS 2.0 unterstützt.)2
Für den Mac, auf dem Xcode läuft, gibt es beim Apple-Silicon-Zwang keinen Workaround, und für alle, die den Intel-Beitrag im Juli gelesen haben, ist das nichts Neues; die GA-Notes behalten den Wortlaut vom Juli vollständig bei: „Xcode 27 will only install and run on Apple silicon Macs. The macOS 27 SDK supports back deploying Universal (Intel and Apple Silicon) apps to macOS 12 and later. Intel development is still possible with macOS versions that support Rosetta like macOS 27.“ (Xcode 27 lässt sich nur auf Macs mit Apple Silicon installieren und ausführen; das macOS-27-SDK unterstützt Universal-Apps bis zurück zu macOS 12; Intel-Entwicklung bleibt auf macOS-Versionen mit Rosetta wie macOS 27 möglich.)2 Der dritte Satz ist der Workaround für die Macs, an die Sie ausliefern, nicht für den, auf dem Sie bauen.
Was hat sich in der Toolchain geändert?
Der Linker. Die GA-Notes sagen es in einem Satz: „The ld64 linker has been removed and the -ld_classic option is no longer supported.“ (Der Linker ld64 wurde entfernt, die Option -ld_classic wird nicht mehr unterstützt.)2 So sieht das auf 27A266a aus: Das usr/bin der Toolchain enthält eine einzige Linker-Binary, ld, die sich als ld-27037.1 meldet, gebaut am 25. August 2026. Das alte Flag lässt den Link nicht scheitern. Mit einer hello.c, die nur die Zeile int main(void){return 0;} enthält, gibt clang hello.o -o hello_classic -Xlinker -ld_classic die Meldung ld: warning: -ld_classic is no longer supported and will be ignored aus, endet mit 0 und schreibt die ausführbare Datei. Die andere Schreibweise, die Apple in Xcode 15 dokumentierte, -ld64, kommt schlechter weg:8 clang hello.c -o hello_ld64 -Wl,-ld64 scheitert mit ld: library 'd64' not found und endet mit 1, weil der neue Linker -ld64 als -l d64 liest, also als Wunsch nach einer Bibliothek namens d64.4 Ein Projekt mit -ld_classic in OTHER_LDFLAGS baut also weiter, mit einer neuen Warnung bei jedem Link, und jedes Verhalten, das es sich vom alten Linker erkaufte, ist weg; ein Projekt mit -ld64 linkt nicht mehr, mit einem Fehler, der den Linker nie beim Namen nennt. Mein ld64-Beitrag geht der Herkunft dieser Flags nach und protokolliert beide Läufe.
Die Standardarchitekturen. Der Abschnitt Intel Deprecation formuliert die Regel: „Build targets with a min deployment target set to macOS 27.0 or DriverKit 27.0 will not build Universal by default. The ARCHS_STANDARD build setting will no longer include x86_64 when MACOSX_DEPLOYMENT_TARGET or DRIVERKIT_DEPLOYMENT_TARGET >= 27.0.“ (Build-Targets mit einem Mindest-Deployment-Target von macOS 27.0 oder DriverKit 27.0 bauen standardmäßig nicht mehr Universal; die Build-Einstellung ARCHS_STANDARD enthält kein x86_64 mehr, sobald MACOSX_DEPLOYMENT_TARGET oder DRIVERKIT_DEPLOYMENT_TARGET >= 27.0 ist.)2 Ich habe das an einem Multiplattform-Projekt (Yawara, mit SUPPORTED_PLATFORMS = iphoneos iphonesimulator macosx xros xrsimulator) per xcodebuild -showBuildSettings -sdk macosx nachvollzogen; ohne das Argument -sdk löst das Projekt überhaupt kein ARCHS_STANDARD auf, eine Eigenheit, die der Intel-Beitrag behandelt. Bei MACOSX_DEPLOYMENT_TARGET = 26.0 löst die Einstellung zu ARCHS_STANDARD = arm64 x86_64 auf; bei 27.0 zu ARCHS_STANDARD = arm64, während ARCHS_STANDARD_64_BIT in beiden Fällen arm64 x86_64 bleibt.4 Nichts warnt. Wenn Sie Universal ausliefern und das Target anheben, fügen Sie x86_64 selbst zu ARCHS hinzu.
Die C++-Standardbibliothek. „The minimum supported deployment target on macOS for the C++ standard library has been increased to 11.0.“ (Das minimale Deployment Target der C++-Standardbibliothek unter macOS wurde auf 11.0 angehoben.) Die Notes listen Verhaltensänderungen unter „Potentially breaking changes“ (potenziell inkompatible Änderungen), beginnend damit, dass multi{map,set}::find nicht mehr zwingend das erste passende Element liefert.2 Die Liste neuer Funktionen ist lang: Hashing für std::chrono-Werte, zip, std::optional<T&>, std::views::indices(n) und mehr.2
Der Abhängigkeitsscan und die Regel, die ihn scheitern lassen kann. Apple hat den Swift-Abhängigkeitsscanner nach eigener Aussage optimiert, „to avoid redundant setup work and header searches when looking up Clang modules during a single dependency-scan action“ (um beim Nachschlagen von Clang-Modulen innerhalb eines Scans redundante Vorbereitung und Header-Suchen zu vermeiden), und der Geschwindigkeitsgewinn bringt eine Anforderung mit: „every Clang module reachable from a single Swift dependency-scan action must have a unique module name. If two module maps visible to the same scan declare a Clang module with the same name, the scan may report an error. Previously, the scanner may have tolerated duplicating names.“ (Jedes Clang-Modul, das ein einzelner Swift-Abhängigkeitsscan erreicht, muss einen eindeutigen Modulnamen haben; deklarieren zwei für denselben Scan sichtbare Module Maps ein Clang-Modul mit gleichem Namen, kann der Scan einen Fehler melden; früher tolerierte der Scanner doppelte Namen unter Umständen.)2 Apple nennt die beiden Konstellationen, die darüber stolpern: „projects or SDKs that vend the same Clang module name from more than one location on the header search path, and vendored third-party sources that ship a module.modulemap redeclaring an SDK module.“ (Projekte oder SDKs, die denselben Clang-Modulnamen von mehr als einem Ort im Header-Suchpfad anbieten, sowie eingebettete Drittanbieter-Quellen mit einer module.modulemap, die ein SDK-Modul erneut deklariert.)2 Wie die Entfernung des Linkers greift die Regel beim Toolchain-Upgrade und nicht ab einem Deployment Target; mein ld64-Beitrag schickt zwei kollidierende Module Maps durch den Scanner, kompiliert einen eingebetteten SQLite3-Shim, der das SDK-Modul verdeckt, und prüft sieben Projekte auf beide Konstellationen.
Was kompiliert nicht mehr?
Das @State-Makro. Die Änderung steht in den Release Notes zu iOS 27, nicht in denen zu Xcode, und sie hängt am Compiler, mit dem Sie bauen, nicht am Target, für das Sie ausliefern: „Xcode 27 introduces a new @State implementation that avoids this repeated evaluation. This new behavior back-deploys to iOS 17 aligned OSes. The new @State is implemented with a Swift macro. It is largely source compatible with the property wrapper version, with a few exceptions.“ (Xcode 27 führt eine neue @State-Implementierung ein, die die wiederholte Auswertung vermeidet; das neue Verhalten reicht bis zu den mit iOS 17 ausgerichteten Systemen zurück; das neue @State ist als Swift-Makro umgesetzt und mit wenigen Ausnahmen quellkompatibel zur Property-Wrapper-Variante.)6 Apple nennt vier Ausnahmen und gibt zu zweien Codelistings; die anderen beiden bekommen je ein bis zwei Sätze: „In rare situations, the automatic inference of generic arguments of @State is less flexible with the macro implementation. Write the type with more specificity.“ (In seltenen Fällen ist die automatische Ableitung generischer Argumente von @State mit dem Makro weniger flexibel; schreiben Sie den Typ genauer aus.) und „Composing @State with other property wrappers or macros is not supported.“ (Die Kombination von @State mit anderen Property Wrappern oder Makros wird nicht unterstützt.)6 Die beiden mit Listings sind die, die bestehenden Code erwischen. Ein Initializer, der einer @State-Property etwas zuweist, die bereits einen Wert an der Deklaration hat: SwiftUI hat die Zuweisung schon immer verworfen, und jetzt „some such cases no longer compile.“ (kompilieren manche dieser Fälle nicht mehr.)6 Und der private Memberwise Initializer, den der Compiler synthetisiert, wenn jedes gespeicherte Mitglied privat ist: „The state macro disables this synthesized initializer. So the code above no longer compiles.“ (Das State-Makro deaktiviert diesen synthetisierten Initializer, der gezeigte Code kompiliert daher nicht mehr.)6 Auf 27A266a scheitert das erste Beispiel wie geschrieben, mit error: variable 'self.title' used before being initialized in der Zeile, die page zuweist, weil der Setter des Makros gegen self läuft, bevor title existiert; verschieben Sie self.title = title darüber, und dieselbe Datei kompiliert, wobei die @State-Zuweisung wie zuvor verworfen wird.46 Das zweite Beispiel, eine Extension, die self.init(page: page, title: title) auf einem Struct aufruft, dessen @State keinen Wert an der Deklaration hat, kompilierte in meinem Lauf unverändert, und die Makroexpansion zeigt die Form, die das erlaubt: Das Makro erzeugt private var _page: SwiftUICore.State<StickerPage> hinter einem @storageRestrictions(initializes: _page)-init-Accessor, dem Konstrukt, das einen Memberwise Initializer page: annehmen lässt.4 Lesen Sie die Note als Beschreibung von Mustern, die es zu prüfen gilt, und bestätigen Sie dann jedes an Ihrem eigenen Code. Der Beitrag zum @State-Makro zählt beide Muster über vier ausgelieferte Apps; ich schrieb ihn im Juli anhand der Beta-Notes, vor diesem GA-Test, und seine offene Frage schließt sich hier ebenfalls: Die direkte Zuweisung an den Speicher dahinter, _page = State(initialValue:) innerhalb eines Initializers, kompiliert auf 27A266a mit und ohne Wert an der Deklaration.4
Der SE-0508-Bruch. Unter Swift Compiler, Known Issues: „A computed property with both an init accessor and an array/dictionary literal initial value will no longer compile if the getter is declared before the init accessor.“ (Eine berechnete Property mit init-Accessor und einem Array- oder Dictionary-Literal als Startwert kompiliert nicht mehr, wenn der Getter vor dem init-Accessor deklariert ist.) Es folgt ein Codelisting, dann die Zuordnung: „This is a known source break from SE-0508.“ (Dies ist ein bekannter Source Break aus SE-0508.) Der Workaround im vollen Wortlaut: „Swap the init accessor and the getter such that the init accessor is declared first.“ (Tauschen Sie init-Accessor und Getter, sodass der init-Accessor zuerst deklariert ist.)2 SE-0508 ist „Array expression trailing closures“ (Trailing Closures in Array-Ausdrücken), umgesetzt in Swift 6.4, und der Proposal sagt genau diesen Fall voraus: „If the getter is declared before the init accessor, we will now attempt to parse as a trailing closure.“ (Steht der Getter vor dem init-Accessor, versuchen wir jetzt, als Trailing Closure zu parsen.) Ergänzend heißt es, „init accessors are however considered for disambiguation, so swapping the accessors is sufficient to make this valid regardless of initial value used.“ (init-Accessoren werden zur Disambiguierung herangezogen, das Tauschen der Accessoren genügt also unabhängig vom Startwert.) und der Fall „does not appear in the source compatibility suite, or for internal Swift projects at Apple.“ (taucht weder in der Source-Compatibility-Suite noch in internen Swift-Projekten bei Apple auf.)7 Ein neunzeiliges Struct reicht zur Reproduktion. Mit dem Getter zuerst scheitert swiftc in der Accessor-Zeile mit error: initializers may only be declared within a type; verschieben Sie den init-Accessor mit @storageRestrictions(initializes:) über get, und dieselbe Datei kompiliert.4
struct Container {
private var storage: [Int] = []
var items: [Int] = [] {
@storageRestrictions(initializes: storage)
init(initialValue) { storage = initialValue } // muss vor get stehen
get { storage }
set { storage = newValue }
}
}
PreviewProvider. Der Abschnitt Previews führt eine Deprecation auf: „PreviewProvider and its family of preview modifiers.“ (PreviewProvider und seine Familie von Preview-Modifiern.)2 Das SDK trägt sie, mit einer Meldung für das Protokoll und einer anderen für jeden Modifier. Im SwiftUI-Interface des iOS-27-SDK steht public protocol PreviewProvider unter @available(anyAppleOS, deprecated: 27.0, message: "Use #Preview instead."); previewLayout sagt „Use #Preview(traits: .sizeThatFitsLayout) or .fixedLayout(width:height:) instead.“; previewDisplayName sagt „Use #Preview("name") instead.“; previewInterfaceOrientation sagt „Use #Preview(traits: .landscapeLeft) or other orientation traits instead.“; previewDevice sagt „Use the device picker in Xcode’s canvas.“ (Verwenden Sie die Geräteauswahl im Canvas von Xcode.); und previewContext sagt zusammen mit den Protokollen PreviewContext und PreviewContextKey „Use #Preview with a Widget timeline provider or entries instead.“ (Verwenden Sie stattdessen #Preview mit einem Widget-Timeline-Provider oder Entries.)4 Ob Sie diese Meldungen je zu sehen bekommen, entscheiden zwei Tatsachen. Der Compiler vergleicht eine Deprecation-Version mit dem Deployment Target, die Modifier warnen also nur in einem Target, dessen Minimum 27.0 ist: Eine Datei mit previewLayout, previewDisplayName und previewDevice erzeugte drei Warnungen bei -target arm64-apple-ios27.0-simulator und keine bei 17.0 oder 26.0. Und PreviewProvider selbst warnt nie, aus einem anderen Grund. Das SDK deklariert es mit @available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *) direkt über der anyAppleOS-Deprecation, und in meiner Sonde erzeugte ein Protokoll mit diesem Paar bei einem 27.0-Target keine Warnung, weder für eine Konformität noch für die Verwendung als Parametertyp, während dasselbe Protokoll, nur mit @available(iOS, deprecated: 27.0) oder nur mit der anyAppleOS-Form als veraltet markiert, in beiden Fällen warnte; die Modifier tragen an ihren eigenen Deklarationen nur die anyAppleOS-Deprecation (die extension SwiftUICore.View, die sie enthält, trägt das introduced-Attribut, und diese geerbte Form unterdrückt die Warnung nicht), weshalb sie warnen und das Protokoll nicht.4 Bei jedem realen Deployment Target bleibt das Build-Log so oder so stumm; suchen Sie also nach PreviewProvider und den Modifiern und wechseln Sie zu #Preview, das der Canvas über die neue Syntax #Preview(arguments:) jetzt pro Argument in Rastern darstellt.24
Das neue stat() in System. Die Bibliothek System bietet jetzt Swift-APIs für stat, lstat, fstat und fstatat, mit einem Typ Stat und Instanzmethoden FilePath.stat().2 Die Notes führen als behoben einen Konflikt auf, bei dem eine Extension mit einem unqualifizierten stat()-Aufruf mit den neuen Methoden kollidierte; wenn Sie die Qualifikation Darwin. hinzugefügt haben, solange der Konflikt bestand, kann sie bleiben.2
Address Sanitizer, in umgekehrter Richtung. „Address Sanitizer might fail to launch on iOS 27.0, tvOS 27.0, watchOS 27.0, and visionOS 27.0 when building with Xcode 26.4 or older.“ (Address Sanitizer startet unter iOS 27.0, tvOS 27.0, watchOS 27.0 und visionOS 27.0 möglicherweise nicht, wenn mit Xcode 26.4 oder älter gebaut wird.) Der Workaround ist Xcode 26.5 oder neuer, was Teams betrifft, die auf dem CI-Rechner ein älteres Xcode behalten, während die Geräte auf 27.0 aktualisieren.2
Was hat sich in der IDE und den Werkzeugen geändert?
- Interface Builder baut ohne Simulator. Ein neuer Kompilierungsmodus,
toolchain, „for UIKit (Cocoa Touch) based documents. Enabled by default,toolchainallows compiling IB documents without the need to download a simulator, which is especially useful for build servers.“ (für UIKit-basierte Dokumente; standardmäßig aktiv, erlaubt er das Kompilieren von IB-Dokumenten ohne Simulator-Download, was vor allem Build-Servern hilft.)2 - Simulatoren starten schneller und lassen sich neu starten. „The simulator runtimes now contain a pre-built dyld cache. This will make first launch of a simulator much faster.“ (Die Simulator-Runtimes enthalten jetzt einen vorgebauten dyld-Cache, der erste Start eines Simulators wird dadurch deutlich schneller.) Und
simctlbekommt einen Befehlreboot.2 Ein bekanntes Problem überlebt, in Apples Worten: „Some simulator runtimes are not completely deleted when removed, re-appearing after a reboot.“ (Manche Simulator-Runtimes werden beim Entfernen nicht vollständig gelöscht und tauchen nach einem Neustart wieder auf.)2 - Das JSON von devicectl steht bei Version 5.
xcrun devicectl --versionmeldet 642.16, undlist devices --json-outputschreibt"jsonVersion": 5; Apple markiert die FelderhardwareProperties,devicePropertiesundconnectionPropertieszugunsten einesproperties-Dictionarys als veraltet, und jedes Ergebnis, das sie noch enthält, trägt einen_deprecationNotice.24 - StoreKit-Tests. Die StoreKit-Konfigurationsoberfläche kann Angebotscodes definieren, Sie können Abo-Bundles für lokale Tests konfigurieren, und der Transaction Manager kann Käufe mit Angebotscodes ohne Gerät durchspielen.2
- Organizer. Eine Insights Overview „summarizes high-impact performance regressions“ (fasst Performance-Regressionen mit großer Wirkung zusammen), und eine Metrik Hitches ersetzt die Metrik Scrolling.2
- Coding-Assistent. Google Gemini kommt in die Modellliste, und „Planning with agents is now first class in Xcode“ (Planen mit Agenten ist in Xcode jetzt ein vollwertiges Feature), mit Plänen als editierbaren Markdown-Artefakten, die Sie freigeben, bevor der Agent weitermacht; mein Beitrag zu Coding-Agenten beschreibt den Workflow aus der Beta, und die GA-Notes führen einen Markdown-Editor für genau diese Artefakte auf.2
- Lokalisierung. Agenten können Einträge im String Catalog übersetzen, und der Export von Lokalisierungen extrahiert jetzt
NSLocalizedStringund ähnliche Makros aus Header-Dateien.2 - Icon Composer. Die Notes nennen es Icon Composer 2.0, „a new sharper rendering mode for upcoming 2027 operating systems“ (ein neuer, schärferer Rendering-Modus für die kommenden Betriebssysteme von 2027); das Bundle in 27A266a meldet Version 27.0.24
- Testing. Ein Testplan kann festlegen, wie Xcode einen Absturz der Ziel-App während UI-Tests behandelt, von aus bis fataler Fehler, und
swift testbekommt--maximum-repetitionsmit--repeat-until [pass|fail]sowie eine Fehlerzusammenfassung am Ende.2 - Debugging. Mit Bridging Headern gilt für LLDB: „can now directly import explicitly built Swift modules and PCH from DerivedData“ (LLDB kann jetzt explizit gebaute Swift-Module und PCH direkt aus DerivedData importieren), und ein Befehl
language swift task treelistet Swift-Concurrency-Tasks auf.2
Was ich diese Woche tun würde
- Lesen Sie die Kompatibilitätszeilen, bevor Sie CI anfassen: macOS 26.6 auf den Build-Macs, nur Apple Silicon, iOS 17 als ältestes Testgerät und je nach Produkt macOS 12, watchOS 9 oder DriverKit 21.23
- Greppen Sie nach
-ld_classicund-ld64und entfernen Sie beides; der Linker ignoriert das erste mit einer Warnung bei jedem Link und scheitert am zweiten komplett. Wenn Sie schon in den Build-Einstellungen sind, suchen Sie nach handgeschriebenenmodule.modulemap-Dateien, die ein SDK-Modul erneut deklarieren, die Konstellation, die Apple für die Regel eindeutiger Modulnamen nennt.24 - Wenn Sie ein macOS- oder DriverKit-Target auf 27.0 setzen und Intel ausliefern, setzen Sie
ARCHSexplizit;ARCHS_STANDARDallein liefert arm64, was ich für macOS nachvollzogen habe und Apple für beide angibt.24 - Suchen Sie nach
PreviewProvider,previewLayout,previewDisplayNameundpreviewDeviceund folgen Sie der Meldung der jeweiligen Annotation: das Protokoll zu#Preview,previewLayoutzu#Preview(traits: .sizeThatFitsLayout)oder.fixedLayout(width:height:),previewDisplayNamezu#Preview("name")undpreviewDevicezur Geräteauswahl im Canvas. Die Modifier warnen nur bei einem Deployment Target von 27.0, und diePreviewProvider-Konformität warnt bei keinem Target, das Build-Log eines ausgelieferten Targets bleibt also stumm.4 - Bauen Sie einmal mit Xcode 27 und achten Sie auf zwei Diagnosen:
variable 'self.title' used before being initializedbei einem Initializer, der einer@State-Property mit Wert an der Deklaration vor den anderen gespeicherten Properties etwas zuweist, was der Beitrag zum @State-Makro Schritt für Schritt durchgeht, undinitializers may only be declared within a typebei Properties mit einem Array- oder Dictionary-Literal als Startwert und einem init-Accessor, wo Sie den Accessor über den Getter verschieben.246 - Laden Sie jetzt, da App Store Connect sie annimmt, einen TestFlight-Build mit den 27er-SDKs hoch, und behalten Sie die Launch-Screen-Regel und die UIKit-Scene-Pflicht im Blick, denn beide binden eine App in dem Moment, in dem sie gegen 27 linkt.56
Häufige Fragen
Wann ist Xcode 27 erschienen?
Am Montag, dem 14. September 2026, als Build 27A266a, am selben Tag wie iOS 27.0, iPadOS 27.0, macOS 27.0, tvOS 27.0, visionOS 27.0 und watchOS 27.0; der Feed datiert seinen Eintrag iOS 27.0 RC (24A437) auf den 11. September, zwei Tage nachdem App Store Connect begonnen hatte, RC-SDK-Builds anzunehmen.15
Welches macOS setzt Xcode 27 voraus?
macOS Tahoe 26.6 oder neuer auf einem Mac mit Apple Silicon. Auf Intel-Macs lässt es sich weder installieren noch ausführen. Es läuft unter macOS 27.0, das am selben Tag erschien.23
Was sind die Mindest-Deployment-Targets in Xcode 27?
iOS 15, iPadOS 15, tvOS 15, watchOS 9, visionOS 1, macOS 12 und DriverKit 21. Verglichen mit Xcode 26.6 stieg watchOS von 8, macOS von 11 und DriverKit von 20.3
Baut Xcode 27 noch Universal-Apps für den Mac?
Ja, bis zurück zu macOS 12, aber nicht mehr standardmäßig, sobald das MACOSX_DEPLOYMENT_TARGET eines Targets 27.0 ist: ARCHS_STANDARD löst dann nur noch zu arm64 auf, und Sie fügen x86_64 selbst zu ARCHS hinzu.24
Ist Xcode 27.1 draußen?
Nicht mit Stand 15. September 2026. Apples Releases-Feed und der Index der Xcode Release Notes führen nur Xcode 27, und Apples Entwicklerseite zum iPhone Duo listet die Xcode-27.1-Beta weiterhin als „Coming later this month“ (kommt später in diesem Monat); das iPhone-Duo-SDK ist nicht Teil dieser Veröffentlichung.1
Wo stehen die Release Notes zu Xcode 27?
Auf Apples Entwicklerdokumentationsseite unter Xcode Release Notes, eine Seite pro Release; die hier zitierten Abschnitte sind Overview, Linking, Intel Deprecation, Previews, Swift Compiler, Address Sanitizer, Instruments, Device Hub, devicectl, Simulator, Interface Builder, C++ Standard Library, Organizer, Coding Intelligence, Source Editor, Icon Composer, StoreKit Testing in Xcode, Localization, Testing, Swift Package Manager, Debugging und System.2 Die Änderung am @State-Makro steht stattdessen in den Release Notes zu iOS und iPadOS 27, unter SwiftUI.6
Quellen
-
Apple, Releases, RSS-Feed abgerufen am 15. September 2026: „Xcode 27 (27A266a)“, „iOS 27.0 (24A437)“, „iPadOS 27.0 (24A437)“, „macOS 27.0 (26A428)“, „tvOS 27.0 (24J361)“, „visionOS 27.0 (24M362)“, „watchOS 27.0 (24R364)“ und „App Store Connect Update“, alle datiert auf Mo., 14. Sep. 2026; „iOS 27.0 RC (24A437)“ datiert auf Fr., 11. Sep. 2026. Der Index der Xcode Release Notes führt einen einzigen 27er-Eintrag, „Xcode 27 Release Notes“; ein 27.1-Eintrag erscheint an keiner der beiden Stellen. Apple Developer, Get Ready for iPhone Duo, abgerufen am 15. September 2026: „Xcode 27.1 beta. Get the latest SDKs to build, run, and test your app for iPhone Duo. Coming later this month“. ↩↩↩↩↩
-
Apple, Xcode 27 Release Notes, abgerufen am 15. September 2026 nach der GA-Veröffentlichung. Zitierte Abschnitte: Overview; Linking, Deprecations („The ld64 linker has been removed and the
-ld_classicoption is no longer supported.“ 165165518); Intel Deprecation, New Features (ARCHS_STANDARD, 161837535) und Deprecations (nur Apple Silicon, vollständig zitiert, 162138432); Previews, Deprecations („PreviewProviderand its family of preview modifiers.“ 144168701) und New Features (#Preview(arguments:), 167544057); Swift Compiler, New Features (Abhängigkeitsscanner und die Anforderung eindeutiger Modulnamen, auszugsweise, 136303612) und Known Issues (SE-0508, 180969028; Workaround-Satz vollständig zitiert); System, New Features und Resolved Issues (177911316); Address Sanitizer, Known Issues (178072780); Instruments, Deprecations (166097304); Device Hub, Deprecations (160482487); devicectl, New Features (170812159) und Deprecations (183772705); Simulator, New Features (179846743, 172303413) und Known Issues (141290052); Interface Builder, New Features; C++ Standard Library, New Features und Deprecations; Organizer; Coding Intelligence (171990272, 172857081); Source Editor, New Features (Markdown-Editor, 175022151); Localization; Icon Composer; StoreKit Testing in Xcode; Testing; Swift Package Manager, New Features (--maximum-repetitions, 177561078; Fehlerzusammenfassung, 168311253); Debugging. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Apple, Xcode support: minimum requirements and supported SDKs, abgerufen am 15. September 2026. Zeile Xcode 27: macOS Tahoe 26.6 oder neuer; SDKs iOS 27, tvOS 27, watchOS 27, visionOS 27, macOS 27, DriverKit 27; Deployment Targets iOS 15 bis 27, iPadOS 15 bis 27, tvOS 15 bis 27, watchOS 9 bis 27, visionOS 1 bis 27, macOS 12 bis 27, DriverKit 21 bis 27; Geräteunterstützung iOS 17, tvOS 17, watchOS 10, visionOS 1 oder neuer; Simulator iOS 17, tvOS 17, watchOS 10, visionOS 1 oder neuer; Swift-6.4-Compiler mit den Sprachmodi 6, 5, 4.2 und 4. Zeile Xcode 26.6: macOS Tahoe 26.2 bis 26.x; SDKs bei 26.5 mit DriverKit 25.5; Deployment Targets iOS 15, tvOS 15, watchOS 8, visionOS 1, macOS 11, DriverKit 20; Geräte- und Simulatorunterstützung ab iOS 15, tvOS 15, watchOS 8, visionOS 1; Swift 6.3. ↩↩↩↩↩↩
-
Reproduktion des Autors auf Xcode 27.0 (27A266a) mit darauf zeigendem
DEVELOPER_DIR, macOS 26.6.2 (25G83), 15. September 2026.xcodebuild -version: „Xcode 27.0 Build version 27A266a“;swift --version: „Apple Swift version 6.4 (swiftlang-6.4.0.34.1 clang-2100.3.34.1)“; dasusr/binder Toolchain listet einen Linker,ld, undld -vgibt „PROJECT:ld-27037.1“ aus, gebaut am „Aug 25 2026“; mit einerhello.c, dieint main(void){return 0;}enthält, gabclang hello.o -o hello_classic -Xlinker -ld_classicdie Meldung „ld: warning: -ld_classic is no longer supported and will be ignored“ aus und endete mit 0, undclang hello.c -o hello_ld64 -Wl,-ld64gab „ld: library ‘d64’ not found“ und „clang: error: linker command failed with exit code 1 (use -v to see invocation)“ aus und endete mit 1 ohne Ausgabedatei.xcodebuild -showBuildSettings -sdk macosxauf Yawara.xcodeproj, einem Multiplattform-Projekt (SUPPORTED_PLATFORMS = iphoneos iphonesimulator macosx xros xrsimulator), das ohne-sdk-Argument keineARCHS_STANDARD-Zeile ausgibt:ARCHS_STANDARD = arm64 x86_64beiMACOSX_DEPLOYMENT_TARGET = 26.0,ARCHS_STANDARD = arm64bei 27.0,ARCHS_STANDARD_64_BIT = arm64 x86_64in beiden Fällen. Das neunzeilige StructContainermitvar items: [Int] = []und einem Accessor@storageRestrictions(initializes: storage) init(initialValue): Getter zuerst scheitert mit „error: initializers may only be declared within a type“ in derinit-Zeile; Accessor zuerst kompiliert mit Exit 0.SwiftUI.swiftmodule/arm64e-apple-ios.swiftinterfaceim iPhoneOS-27.0-SDK:@available(anyAppleOS, deprecated: 27.0, message: "Use #Preview instead.")in den Zeilen 14971 (public protocol PreviewProvider), 14978 (seine Extension) und 14991 (PreviewPlatform); „Use #Preview with a Widget timeline provider or entries instead.“ bei 15023 (PreviewContextKey), 15029 (PreviewContext) und 15069 (previewContext); „Use the device picker in Xcode’s canvas.“ bei 15053 (previewDevice); „Use #Preview(traits: .sizeThatFitsLayout) or .fixedLayout(width:height:) instead.“ bei 15058 (previewLayout); „Use#Preview("name")instead.“ bei 15063 (previewDisplayName); „Use #Preview(traits: .landscapeLeft) or other orientation traits instead.“ bei 15075 (previewInterfaceOrientation); einswiftc -ceiner bloßenPreviewProvider-Konformität gab bei-target arm64-apple-ios27.0-simulator,ios26.0undios17.0keine Warnung aus; eine Datei, diepreviewLayout(.sizeThatFits),previewDisplayName("Card")undpreviewDevice(PreviewDevice(rawValue: "iPhone 18 Pro"))innerhalb einesPreviewProvideranwendet, gab beiios27.0drei[#DeprecatedDeclaration]-Warnungen aus („’previewLayout’ was deprecated in any Apple OS 27.0: Use #Preview(traits: .sizeThatFitsLayout) or .fixedLayout(width:height:) instead.“ sowie die passenden Meldungen zupreviewDisplayNameundpreviewDevice) und keine beiios26.0oderios17.0. Eine Sonde mit vier Protokollen, jedes mit einem konformen Struct und einemany P-Parameter in einer Funktionssignatur, kompiliert bei-target arm64-apple-ios27.0-simulator:@available(iOS, deprecated: 27.0)allein,@available(anyAppleOS, deprecated: 27.0)allein und@available(iOS 13.0, *)über@available(iOS, deprecated: 27.0)warnten jeweils an der Konformitätszeile und am Parametertypany P(„’P1’ was deprecated in iOS 27.0“, „’P2’ was deprecated in any Apple OS 27.0“, „’P4’ was deprecated in iOS 27.0“), während das Paar des SDK,@available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *)über@available(anyAppleOS, deprecated: 27.0), an keiner der beiden Stellen warnte; die Methodenaufrufe über diese Existentials erzeugten bei keinem der vier eine Diagnose, und beiios26.0warnte keines der vier. Im Interface stehtPreviewProviderin den Zeilen 14970 bis 14972 unter genau diesem Paar;previewLayoutin den Zeilen 15058 bis 15059 trägt an seiner eigenen Deklaration nur dieanyAppleOS-Deprecation, innerhalb einerextension SwiftUICore.View, deren introduced-Attribut in Zeile 15051 steht. Eine Datei mit zwei Views, die innerhalb voninit(title:)jeweils_page = State(initialValue: StickerPage(title: title))zuweisen, eine mit@State private var page: StickerPageund eine mit@State private var page = StickerPage(), kompilierte beiios27.0mit Exit 0 und ohne Diagnosen. Die@State-Sonden, jeweils eineStickerPageViewmit@State private var pageundlet title: String, kompiliert mitswiftc -c -target arm64-apple-ios27.0-simulatorgegen das iPhoneSimulator-27.0-SDK: Apples erstes Beispiel,@State private var page = StickerPage()mit eineminit(title:), das erstself.pageund dannself.titlezuweist, scheiterte mit „error: variable ‘self.title’ used before being initialized“ in derself.page-Zeile, Exit 1; dieselbe Datei mitself.title = titleüber dieself.page-Zuweisung verschoben kompilierte, Exit 0; Apples zweites Beispiel,@State private var page: StickerPageohne Startwert und eine Extension, dieself.init(page: page, title: title)aufruft, kompilierte, Exit 0, und-Xfrontend -dump-macro-expansionszeigte, dass das Makroprivate var _page: SwiftUICore.State<StickerPage>mit einem Accessor@storageRestrictions(initializes: _page) init(initialValue)erzeugt.xcrun devicectl --version: 642.16;devicectl list devices --json-outputschrieb"jsonVersion": 5. DieInfo.plistvon Icon Composer in 27A266a:CFBundleShortVersionString27.0. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Apple, App Store Connect release notes, abgerufen am 15. September 2026. Der Eintrag vom 14. September 2026 ist in der Tabelle oben vollständig zitiert; die Einträge vom 9. September 2026 halten RC-SDK-Uploads fest und ergänzen Screenshot- und App-Vorschau-Spezifikationen für iPhone Duo, iPhone 18 Pro Max, iPhone 18 Pro, Apple Watch Ultra 4 und Apple Watch Series 12, mit „Support for uploading assets for iPhone Duo in App Store Connect will be available later this year.“ (Das Hochladen von Assets für das iPhone Duo in App Store Connect wird später in diesem Jahr möglich.) ↩↩↩↩↩
-
Apple, iOS & iPadOS 27 Release Notes, SwiftUI, New Features (105893279), abgerufen am 15. September 2026. Quelle von „Xcode 27 introduces a new
@Stateimplementation that avoids this repeated evaluation. This new behavior back-deploys to iOS 17 aligned OSes. The new@Stateis implemented with a Swift macro. It is largely source compatible with the property wrapper version, with a few exceptions.“; von „If you provide an initial value at@Statedeclaration, and also try to assign a value to it in an initializer, the initializer value is discarded. This behavior has not changed because of the macro, but some such cases no longer compile:“ mit demStickerPageView-Listing; von „When all stored members of a struct are private, the compiler synthesizes a private init that can be used in an extension of the same type:“ mit seinem Listing; und von „The state macro disables this synthesized initializer. So the code above no longer compiles. To mitigate, assign value to members explicitly:“; außerdem der beiden Ausnahmen ohne Listing, „In rare situations, the automatic inference of generic arguments of@Stateis less flexible with the macro implementation. Write the type with more specificity.“ und „Composing@Statewith other property wrappers or macros is not supported.“ Der UIKit-Abschnitt desselben Dokuments enthält die beiden in Schritt 6 zitierten Anforderungen: New Features, „iOS and iPadOS apps built with the 27.0 SDK or later are required to include a launch screen.“ (168247372), und Deprecations, „Apps built with the latest SDK must adopt the scene-based life cycle or they fail to launch.“ (141837548). ↩↩↩↩↩↩↩↩↩↩ -
Cal Stephens, SE-0508: Array expression trailing closures, Swift Evolution, Status „Implemented (Swift 6.4)“, Implementierung swiftlang/swift#86244, abgerufen am 15. September 2026. Der Unterabschnitt „Init accessors“ ist die Quelle von „One other case where this can result in an error is for properties with both an
initaccessor and initial value that is either an array or dictionary literal. If the getter is declared before theinitaccessor, we will now attempt to parse as a trailing closure:“, des oben zitierten Satzes zur Disambiguierung und von „This particular case appears to be quite rare in practice, it does not appear in the source compatibility suite, or for internal Swift projects at Apple.“ ↩ -
Apple, Xcode 15 Release Notes, Linking, New Features (108915312), abgerufen am 15. September 2026: „The classic linker can still be explicitly requested using -ld64, and will be removed in a future release.“ (Der klassische Linker lässt sich mit -ld64 weiterhin explizit anfordern und wird in einer künftigen Version entfernt.) ↩↩