Xcode 27 Is Out: Requirements, Targets, and What Broke

Xcode 27 shipped on September 14, 2026 as build 27A266a, three days after the feed’s iOS 27.0 RC item and alongside iOS 27.0 (24A437), macOS 27.0 (26A428), and the rest of the 27 platforms; App Store Connect began accepting builds made with the 27.0 GA SDKs the same day, having taken RC-SDK builds since September 9.15 It requires macOS Tahoe 26.6 or later and an Apple silicon Mac, carries Swift 6.4 and the 27 SDKs, debugs devices running iOS 17 or later, and raises three deployment floors: macOS 12, watchOS 9, and DriverKit 21.23 For existing projects it brings three hard failures (the @State macro, an SE-0508 source break, and the -ld64 linker flag), one dependency-scan rule that may error, one silent change to ARCHS_STANDARD, and two warnings; I run all but the scan rule below on 27A266a.246

TL;DR

  • Dates and builds. Apple’s releases feed lists Xcode 27 (27A266a) and all six 27.0 operating systems on Monday, September 14; its “iOS 27.0 RC (24A437)” item carries a Friday, September 11 date, two days after App Store Connect began taking RC-SDK uploads, and the GA carries the same build number.15 App Store Connect’s own release notes for September 14 say you can now upload apps built with Xcode 27 for the store and for TestFlight.5
  • Requirements and floors moved. Xcode 26.6 ran on macOS 26.2 and debugged iOS 15 devices; Xcode 27 needs macOS 26.6, runs only on Apple silicon, and debugs iOS 17, tvOS 17, and watchOS 10 or later, in the simulator as well as on hardware. Minimum deployment targets rise from macOS 11 to 12, watchOS 8 to 9, and DriverKit 20 to 21; iOS, iPadOS, and tvOS stay at 15, visionOS at 1.23
  • Three hard failures. The @State macro: Apple’s own example, an initializer that assigns a @State property carrying a declaration-site value before the other stored properties, fails with variable 'self.title' used before being initialized; a computed property with an array or dictionary literal initial value and an init accessor fails to compile when the getter comes first, a source break Apple attributes to SE-0508; and the -ld64 linker flag, which Xcode 15 documented, fails the link with ld: library 'd64' not found.2468
  • Four changes that warn, may error, or say nothing. The linker ignores -ld_classic with a warning because ld64 is gone; duplicate Clang module names within one dependency scan “may report an error”; a macOS-only target set to 27.0 builds arm64 only unless you add x86_64 back, and nothing warns; and PreviewProvider carries a 27.0 deprecation with “Use #Preview instead.” while each preview modifier carries its own replacement message, none of which the compiler shows below a 27.0 deployment target.24
  • Apple has not released Xcode 27.1 as of September 15. Neither the releases feed nor the release-notes index lists it, and Apple’s iPhone Duo developer page still dates the 27.1 beta to “later this month”; the SDK gap described in my Duo developer post still stands.1

What shipped on September 14?

Item Build Feed date
Xcode 27 27A266a Mon, Sep 14, 2026
iOS 27.0 / iPadOS 27.0 24A437 Mon, Sep 14; the feed’s “iOS 27.0 RC (24A437)” item carries a Fri, Sep 11 date, and App Store Connect took RC-SDK uploads from Wed, Sep 9
macOS 27.0 26A428 Mon, Sep 14
tvOS 27.0 24J361 Mon, Sep 14
visionOS 27.0 24M362 Mon, Sep 14
watchOS 27.0 24R364 Mon, Sep 14
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.” Sep 14

The release notes’ Overview reads: “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.”2 On this Mac, xcodebuild -version prints Xcode 27.0 Build version 27A266a and swift --version prints Apple Swift version 6.4 (swiftlang-6.4.0.34.1 clang-2100.3.34.1).4

What does Xcode 27 require, compared with 26.6?

Apple’s compatibility table is the document to check before upgrading a build machine. The two rows, side by side:3

Xcode 26.6 Xcode 27
macOS to run it Tahoe 26.2 to 26.x Tahoe 26.6 or later, Apple silicon only2
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
Devices you can debug iOS 15, tvOS 15, watchOS 8, visionOS 1 or later iOS 17, tvOS 17, watchOS 10, visionOS 1 or later
Simulators iOS 15, tvOS 15, watchOS 8, visionOS 1 or later iOS 17, tvOS 17, watchOS 10, visionOS 1 or later
Swift compiler 6.3 6.4 (language modes 6, 5, 4.2, 4)

Two consequences hide behind those rows. Instruments now refuses devices older than iOS 17, watchOS 10, or tvOS 17, so a profiling rig built on an old iPhone stops working before any app code does.2 And Apple scopes the Device Hub’s keyboard and pointer interactions with one sentence: “only supported on the following OS versions and newer: macOS 15.0, iOS 18.0, tvOS 18.0, watchOS 11.0, visionOS 2.0.”2

The Apple silicon requirement has no workaround for the Mac you run Xcode on, and it is old news for anyone who read the Intel post in July; the GA notes keep the July wording in full: “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.”2 The third sentence is the workaround for the Macs you ship to, not the one you build on.

What changed in the toolchain?

The linker. The GA notes say it in one sentence: “The ld64 linker has been removed and the -ld_classic option is no longer supported.”2 What that looks like on 27A266a: the toolchain’s usr/bin contains a single linker binary, ld, which reports itself as ld-27037.1 built August 25, 2026. Passing the old flag does not fail the link. With hello.c holding the one line int main(void){return 0;}, clang hello.o -o hello_classic -Xlinker -ld_classic prints ld: warning: -ld_classic is no longer supported and will be ignored, exits 0, and writes the executable. The other spelling Apple documented in Xcode 15, -ld64, fares worse:8 clang hello.c -o hello_ld64 -Wl,-ld64 fails with ld: library 'd64' not found and exits 1, because the new linker reads -ld64 as -l d64, a request for a library named d64.4 So a project that carries -ld_classic in OTHER_LDFLAGS keeps building, with a new warning on every link, and any behavior it was buying from the old linker is gone; a project that carries -ld64 stops linking, with an error that never names the linker. My ld64 post audits where those flags came from and records both runs.

The default architectures. The Intel Deprecation section states the rule: “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.”2 I reproduced it on a multiplatform project (Yawara, with SUPPORTED_PLATFORMS = iphoneos iphonesimulator macosx xros xrsimulator) with xcodebuild -showBuildSettings -sdk macosx; without the -sdk argument the project resolves no ARCHS_STANDARD at all, a wrinkle the Intel post covers. At MACOSX_DEPLOYMENT_TARGET = 26.0 the setting resolves to ARCHS_STANDARD = arm64 x86_64; at 27.0 it resolves to ARCHS_STANDARD = arm64, while ARCHS_STANDARD_64_BIT stays arm64 x86_64 in both.4 Nothing warns. If you ship Universal and raise the target, add x86_64 to ARCHS yourself.

The C++ standard library. “The minimum supported deployment target on macOS for the C++ standard library has been increased to 11.0,” and the notes list behavior changes under “Potentially breaking changes,” starting with multi{map,set}::find no longer necessarily returning the first matching element.2 The new-feature list is long: hashing for std::chrono values, zip, std::optional<T&>, std::views::indices(n), and more.2

Dependency scanning, and the rule that can fail it. Apple says it optimized the Swift dependency scanner “to avoid redundant setup work and header searches when looking up Clang modules during a single dependency-scan action,” and the speed change carries a requirement: “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.”2 Apple names the two shapes that trip it: “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.”2 Like the linker removal, the rule fires on toolchain upgrade rather than on a deployment target; my ld64 post runs two colliding module maps through the scanner, compiles a vendored SQLite3 shim that hides the SDK module, and audits seven projects for both shapes.

What stops compiling?

The @State macro. The change lives in the iOS 27 release notes rather than the Xcode ones, and it keys off the compiler you build with, not the target you deploy to: “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.”6 Apple names four exceptions and gives two of them code listings; the other two get a sentence or two each: “In rare situations, the automatic inference of generic arguments of @State is less flexible with the macro implementation. Write the type with more specificity.” and “Composing @State with other property wrappers or macros is not supported.”6 The two with listings are the ones that catch existing code. An initializer that assigns a @State property which already has a declaration-site value: SwiftUI always discarded the assignment, and now “some such cases no longer compile.”6 And the private memberwise initializer the compiler synthesizes when every stored member is private: “The state macro disables this synthesized initializer. So the code above no longer compiles.”6 On 27A266a the first example fails as written, with error: variable 'self.title' used before being initialized on the line that assigns page, because the macro’s setter runs against self before title exists; move self.title = title above it and the same file compiles, with the @State assignment discarded as before.46 The second example, an extension calling self.init(page: page, title: title) on a struct whose @State has no declaration-site value, compiled unchanged in my run, and the macro expansion shows the shape that lets it: the macro emits private var _page: SwiftUICore.State<StickerPage> behind a @storageRestrictions(initializes: _page) init accessor, the construct that lets a memberwise initializer take page:.4 Read the note as a description of shapes to check, then confirm each one on your own code. The @State macro post counts both patterns across four shipping apps; I wrote it from the beta notes in July, before this GA test, and its open question closes here as well: assigning the backing storage directly, _page = State(initialValue:) inside an initializer, compiles on 27A266a both with and without a declaration-site value.4

The SE-0508 break. Under 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.” A code listing follows, then the attribution: “This is a known source break from SE-0508.” The workaround, in full: “Swap the init accessor and the getter such that the init accessor is declared first.”2 SE-0508 is “Array expression trailing closures,” implemented in Swift 6.4, and the proposal predicts this exact case: “If the getter is declared before the init accessor, we will now attempt to parse as a trailing closure,” adding that “init accessors are however considered for disambiguation, so swapping the accessors is sufficient to make this valid regardless of initial value used,” and that the case “does not appear in the source compatibility suite, or for internal Swift projects at Apple.”7 It reproduces with a nine-line struct. With the getter first, swiftc fails on the accessor line with error: initializers may only be declared within a type; move the @storageRestrictions(initializes:) init accessor above get, and the same file compiles.4

struct Container {
    private var storage: [Int] = []
    var items: [Int] = [] {
        @storageRestrictions(initializes: storage)
        init(initialValue) { storage = initialValue }   // must precede get
        get { storage }
        set { storage = newValue }
    }
}

PreviewProvider. The Previews section lists one deprecation: “PreviewProvider and its family of preview modifiers.”2 The SDK carries it, with one message for the protocol and a different one for each modifier. In the iOS 27 SDK’s SwiftUI interface, public protocol PreviewProvider sits under @available(anyAppleOS, deprecated: 27.0, message: "Use #Preview instead."); previewLayout says “Use #Preview(traits: .sizeThatFitsLayout) or .fixedLayout(width:height:) instead.”; previewDisplayName says “Use #Preview(“name”) instead.”; previewInterfaceOrientation says “Use #Preview(traits: .landscapeLeft) or other orientation traits instead.”; previewDevice says “Use the device picker in Xcode’s canvas.”; and previewContext, with the PreviewContext and PreviewContextKey protocols, says “Use #Preview with a Widget timeline provider or entries instead.”4 Two facts decide whether you ever see those messages. The compiler compares a deprecation version against the deployment target, so the modifiers warn only in a target whose minimum is 27.0: a file that uses previewLayout, previewDisplayName, and previewDevice produced three warnings at -target arm64-apple-ios27.0-simulator and none at 17.0 or 26.0. And PreviewProvider itself never warns, for a different reason. The SDK declares it with @available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *) directly above the anyAppleOS deprecation, and in my probe a protocol carrying that pair produced no warning for a conformance or a use as a parameter type at a 27.0 target, while the same protocol deprecated with @available(iOS, deprecated: 27.0) alone, or with the anyAppleOS form alone, warned on both; the modifiers carry only the anyAppleOS deprecation on their own declarations (the extension SwiftUICore.View that holds them carries the introduced attribute, and that inherited form does not suppress the warning), which is why they warn and the protocol does not.4 At any shipping deployment target the build log is silent either way, so search for PreviewProvider and the modifiers and move to #Preview, which the canvas now renders in grids per argument through the new #Preview(arguments:) syntax.24

System’s new stat(). The System library now provides Swift APIs for stat, lstat, fstat, and fstatat, with a Stat type and FilePath.stat() instance methods.2 The notes list as fixed a conflict where an extension calling an unqualified stat() collided with the new methods; if you added the Darwin. qualification while that conflict was live, it can stay.2

Address Sanitizer, the other direction. “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.” The workaround is Xcode 26.5 or later, which matters for teams that keep an older Xcode on the CI box while devices update to 27.0.2

What changed in the IDE and the tools?

  • Interface Builder builds without a simulator. A new compilation mode, toolchain, “for UIKit (Cocoa Touch) based documents. Enabled by default, toolchain allows compiling IB documents without the need to download a simulator, which is especially useful for build servers.”2
  • Simulators boot faster, and reboot. “The simulator runtimes now contain a pre-built dyld cache. This will make first launch of a simulator much faster,” and simctl gains a reboot command.2 One known issue survives, in Apple’s words: “Some simulator runtimes are not completely deleted when removed, re-appearing after a reboot.”2
  • devicectl JSON is at version 5. xcrun devicectl --version reports 642.16 and list devices --json-output writes "jsonVersion": 5; Apple deprecates the hardwareProperties, deviceProperties, and connectionProperties fields in favor of a properties dictionary, and any result that still contains them carries a _deprecationNotice.24
  • StoreKit testing. The StoreKit configuration UI can define offer codes, you can configure subscription bundles for local testing, and the Transaction Manager can exercise purchases with offer codes off-device.2
  • Organizer. An Insights Overview “summarizes high-impact performance regressions,” and a Hitches metric replaces the Scrolling metric.2
  • Coding assistant. Google Gemini joins the model list, and “Planning with agents is now first class in Xcode,” with plans as editable Markdown artifacts you approve before the agent proceeds; my coding-agents post covers the workflow from the beta, and the GA notes list a Markdown editor for exactly those artifacts.2
  • Localization. Agents can translate String Catalog entries, and exporting localizations now extracts NSLocalizedString and similar macros from header files.2
  • Icon Composer. The notes call it Icon Composer 2.0, “a new sharper rendering mode for upcoming 2027 operating systems”; the bundle inside 27A266a reports version 27.0.24
  • Testing. A test plan can set how Xcode treats a target app crash during UI testing, from off to fatal failure, and swift test gains --maximum-repetitions with --repeat-until [pass|fail] plus a failure summary at the end.2
  • Debugging. With bridging headers, LLDB “can now directly import explicitly built Swift modules and PCH from DerivedData,” and a language swift task tree command lists Swift concurrency tasks.2

What I would do this week

  1. Read the compatibility rows before touching CI: macOS 26.6 on the build Macs, Apple silicon only, iOS 17 as the oldest test device, and whichever of macOS 12, watchOS 9, or DriverKit 21 your product falls under.23
  2. Grep for -ld_classic and -ld64 and remove both; the linker ignores the first with a warning on every link and fails outright on the second. While you are in the build settings, look for hand-authored module.modulemap files that redeclare an SDK module, the shape Apple names for the unique-module-name rule.24
  3. If you set any macOS or DriverKit target to 27.0 and ship Intel, set ARCHS explicitly; ARCHS_STANDARD alone gives you arm64, which I reproduced for macOS and Apple states for both.24
  4. Search for PreviewProvider, previewLayout, previewDisplayName, and previewDevice, and follow each annotation’s own message: the protocol to #Preview, previewLayout to #Preview(traits: .sizeThatFitsLayout) or .fixedLayout(width:height:), previewDisplayName to #Preview("name"), and previewDevice to the device picker in the canvas. The modifiers warn only at a 27.0 deployment target and the PreviewProvider conformance never warns at any target, so a shipping target’s build log stays silent.4
  5. Build once with Xcode 27 and read two diagnostics: variable 'self.title' used before being initialized on an initializer that assigns a @State property that already carries a declaration-site value before the other stored properties, which the @State macro post walks through, and initializers may only be declared within a type on properties with an array or dictionary literal initial value and an init accessor, where you move the accessor above the getter.246
  6. Upload a TestFlight build with the 27 SDKs now that App Store Connect accepts them, and keep the launch screen rule and the UIKit scene mandate in mind, since both bind an app the moment it links against 27.56

FAQ

When did Xcode 27 come out?

Monday, September 14, 2026, as build 27A266a, on the same day as iOS 27.0, iPadOS 27.0, macOS 27.0, tvOS 27.0, visionOS 27.0, and watchOS 27.0; the feed dates its iOS 27.0 RC (24A437) item September 11, two days after App Store Connect began taking RC-SDK builds.15

What macOS does Xcode 27 require?

macOS Tahoe 26.6 or later on an Apple silicon Mac. It does not install or run on Intel Macs. It runs on macOS 27.0, which shipped the same day.23

What are the minimum deployment targets in Xcode 27?

iOS 15, iPadOS 15, tvOS 15, watchOS 9, visionOS 1, macOS 12, and DriverKit 21. Compared with Xcode 26.6, watchOS rose from 8, macOS from 11, and DriverKit from 20.3

Does Xcode 27 still build Universal Mac apps?

Yes, back to macOS 12, but not by default once a target’s MACOSX_DEPLOYMENT_TARGET is 27.0: ARCHS_STANDARD then resolves to arm64 alone, and you add x86_64 to ARCHS yourself.24

Is Xcode 27.1 out?

Not as of September 15, 2026. Apple’s releases feed and the Xcode release-notes index list only Xcode 27, and Apple’s iPhone Duo developer page still lists the Xcode 27.1 beta as “Coming later this month”; the iPhone Duo SDK is not part of this release.1

Where are the Xcode 27 release notes?

On Apple’s developer documentation site under Xcode Release Notes, one page for the release; the sections cited here are 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, and System.2 The @State macro change is in the iOS and iPadOS 27 release notes instead, under SwiftUI.6

Sources


  1. Apple, Releases, RSS feed fetched September 15, 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)”, and “App Store Connect Update”, all dated Mon, 14 Sep 2026; “iOS 27.0 RC (24A437)” dated Fri, 11 Sep 2026. The Xcode Release Notes index lists a single 27 entry, “Xcode 27 Release Notes”; no 27.1 item appears in either place. Apple Developer, Get Ready for iPhone Duo, fetched September 15, 2026: “Xcode 27.1 beta. Get the latest SDKs to build, run, and test your app for iPhone Duo. Coming later this month”. 

  2. Apple, Xcode 27 Release Notes, fetched September 15, 2026 after the GA release. Quoted sections: Overview; Linking, Deprecations (“The ld64 linker has been removed and the -ld_classic option is no longer supported.” 165165518); Intel Deprecation, New Features (ARCHS_STANDARD, 161837535) and Deprecations (Apple silicon only, quoted in full, 162138432); Previews, Deprecations (“PreviewProvider and its family of preview modifiers.” 144168701) and New Features (#Preview(arguments:), 167544057); Swift Compiler, New Features (dependency scanner and the unique-module-name requirement, excerpted, 136303612) and Known Issues (SE-0508, 180969028; workaround sentence quoted in full); System, New Features and Resolved Issues (177911316); Address Sanitizer, Known Issues (178072780); Instruments, Deprecations (166097304); Device Hub, Deprecations (160482487); devicectl, New Features (170812159) and Deprecations (183772705); Simulator, New Features (179846743, 172303413) and Known Issues (141290052); Interface Builder, New Features; C++ Standard Library, New Features and 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; failure summary, 168311253); Debugging. 

  3. Apple, Xcode support: minimum requirements and supported SDKs, fetched September 15, 2026. Xcode 27 row: macOS Tahoe 26.6 or later; SDKs iOS 27, tvOS 27, watchOS 27, visionOS 27, macOS 27, DriverKit 27; deployment targets iOS 15 to 27, iPadOS 15 to 27, tvOS 15 to 27, watchOS 9 to 27, visionOS 1 to 27, macOS 12 to 27, DriverKit 21 to 27; device support iOS 17, tvOS 17, watchOS 10, visionOS 1 or later; simulator iOS 17, tvOS 17, watchOS 10, visionOS 1 or later; Swift 6.4 compiler with language modes 6, 5, 4.2, and 4. Xcode 26.6 row: macOS Tahoe 26.2 to 26.x; SDKs at 26.5 with DriverKit 25.5; deployment targets iOS 15, tvOS 15, watchOS 8, visionOS 1, macOS 11, DriverKit 20; device and simulator support from iOS 15, tvOS 15, watchOS 8, visionOS 1; Swift 6.3. 

  4. Author reproduction on Xcode 27.0 (27A266a) with DEVELOPER_DIR pointed at it, macOS 26.6.2 (25G83), September 15, 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)”; the toolchain’s usr/bin lists one linker, ld, and ld -v prints “PROJECT:ld-27037.1” built “Aug 25 2026”; with hello.c containing int main(void){return 0;}, clang hello.o -o hello_classic -Xlinker -ld_classic printed “ld: warning: -ld_classic is no longer supported and will be ignored” and exited 0, and clang hello.c -o hello_ld64 -Wl,-ld64 printed “ld: library ‘d64’ not found” and “clang: error: linker command failed with exit code 1 (use -v to see invocation)” and exited 1 with no output file. xcodebuild -showBuildSettings -sdk macosx on Yawara.xcodeproj, a multiplatform project (SUPPORTED_PLATFORMS = iphoneos iphonesimulator macosx xros xrsimulator) that prints no ARCHS_STANDARD line without an -sdk argument: ARCHS_STANDARD = arm64 x86_64 at MACOSX_DEPLOYMENT_TARGET = 26.0, ARCHS_STANDARD = arm64 at 27.0, ARCHS_STANDARD_64_BIT = arm64 x86_64 in both. The nine-line Container struct with var items: [Int] = [] and a @storageRestrictions(initializes: storage) init(initialValue) accessor: getter first fails with “error: initializers may only be declared within a type” at the init line; accessor first compiles with exit 0. SwiftUI.swiftmodule/arm64e-apple-ios.swiftinterface in the iPhoneOS 27.0 SDK: @available(anyAppleOS, deprecated: 27.0, message: "Use #Preview instead.") at lines 14971 (public protocol PreviewProvider), 14978 (its extension), and 14991 (PreviewPlatform); “Use #Preview with a Widget timeline provider or entries instead.” at 15023 (PreviewContextKey), 15029 (PreviewContext), and 15069 (previewContext); “Use the device picker in Xcode’s canvas.” at 15053 (previewDevice); “Use #Preview(traits: .sizeThatFitsLayout) or .fixedLayout(width:height:) instead.” at 15058 (previewLayout); “Use #Preview("name") instead.” at 15063 (previewDisplayName); “Use #Preview(traits: .landscapeLeft) or other orientation traits instead.” at 15075 (previewInterfaceOrientation); a swiftc -c of a bare PreviewProvider conformance emitted no warning at -target arm64-apple-ios27.0-simulator, ios26.0, or ios17.0; a file applying previewLayout(.sizeThatFits), previewDisplayName("Card"), and previewDevice(PreviewDevice(rawValue: "iPhone 18 Pro")) inside a PreviewProvider emitted three [#DeprecatedDeclaration] warnings at ios27.0 (“‘previewLayout’ was deprecated in any Apple OS 27.0: Use #Preview(traits: .sizeThatFitsLayout) or .fixedLayout(width:height:) instead.”, and the matching previewDisplayName and previewDevice messages) and none at ios26.0 or ios17.0. A probe with four protocols, each with a conforming struct and an any P parameter in one function signature, compiled at -target arm64-apple-ios27.0-simulator: @available(iOS, deprecated: 27.0) alone, @available(anyAppleOS, deprecated: 27.0) alone, and @available(iOS 13.0, *) above @available(iOS, deprecated: 27.0) each warned on the conformance line and on the any P parameter type (“‘P1’ was deprecated in iOS 27.0”, “‘P2’ was deprecated in any Apple OS 27.0”, “‘P4’ was deprecated in iOS 27.0”), while the SDK’s pair, @available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *) above @available(anyAppleOS, deprecated: 27.0), produced no warning on either; the method calls through those existentials produced no diagnostic for any of the four, and at ios26.0 none of the four warned. In the interface, PreviewProvider sits at lines 14970 to 14972 under exactly that pair; previewLayout at lines 15058 to 15059 carries only the anyAppleOS deprecation on its own declaration, inside an extension SwiftUICore.View whose introduced attribute sits at line 15051. A file with two views assigning _page = State(initialValue: StickerPage(title: title)) inside init(title:), one with @State private var page: StickerPage and one with @State private var page = StickerPage(), compiled at ios27.0 with exit 0 and no diagnostics. The @State probes, each a StickerPageView with @State private var page and let title: String, compiled with swiftc -c -target arm64-apple-ios27.0-simulator against the iPhoneSimulator 27.0 SDK: Apple’s first example, @State private var page = StickerPage() with an init(title:) that assigns self.page and then self.title, failed with “error: variable ‘self.title’ used before being initialized” on the self.page line, exit 1; the same file with self.title = title moved above the self.page assignment compiled, exit 0; Apple’s second example, @State private var page: StickerPage with no initial value and an extension calling self.init(page: page, title: title), compiled, exit 0, and -Xfrontend -dump-macro-expansions showed the macro emitting private var _page: SwiftUICore.State<StickerPage> with a @storageRestrictions(initializes: _page) init(initialValue) accessor. xcrun devicectl --version: 642.16; devicectl list devices --json-output wrote "jsonVersion": 5. Icon Composer’s Info.plist inside 27A266a: CFBundleShortVersionString 27.0. 

  5. Apple, App Store Connect release notes, fetched September 15, 2026. September 14, 2026 entry quoted in full in the table above; the September 9, 2026 entries record RC-SDK uploads and add screenshot and app preview specifications for iPhone Duo, iPhone 18 Pro Max, iPhone 18 Pro, Apple Watch Ultra 4, and Apple Watch Series 12, with “Support for uploading assets for iPhone Duo in App Store Connect will be available later this year.” 

  6. Apple, iOS & iPadOS 27 Release Notes, SwiftUI, New Features (105893279), fetched September 15, 2026. Source of “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.”; of “If you provide an initial value at @State declaration, 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:” with the StickerPageView listing; of “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:” with its listing; and of “The state macro disables this synthesized initializer. So the code above no longer compiles. To mitigate, assign value to members explicitly:”; also of the two exceptions without listings, “In rare situations, the automatic inference of generic arguments of @State is less flexible with the macro implementation. Write the type with more specificity.” and “Composing @State with other property wrappers or macros is not supported.” The same document’s UIKit section carries the two requirements cited in step 6: New Features, “iOS and iPadOS apps built with the 27.0 SDK or later are required to include a launch screen.” (168247372), and Deprecations, “Apps built with the latest SDK must adopt the scene-based life cycle or they fail to launch.” (141837548). 

  7. Cal Stephens, SE-0508: Array expression trailing closures, Swift Evolution, status “Implemented (Swift 6.4)”, implementation swiftlang/swift#86244, fetched September 15, 2026. The “Init accessors” subsection is the source of “One other case where this can result in an error is for properties with both an init accessor and initial value that is either an array or dictionary literal. If the getter is declared before the init accessor, we will now attempt to parse as a trailing closure:”, of the disambiguation sentence quoted above, and of “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.” 

  8. Apple, Xcode 15 Release Notes, Linking, New Features (108915312), fetched September 15, 2026: “The classic linker can still be explicitly requested using -ld64, and will be removed in a future release.” 

Related Posts

The @State Macro: What Xcode 27 Stops Compiling

Xcode 27 reimplements SwiftUI's @State as a Swift macro. The break lands on toolchain upgrade, not deployment target, an…

22 min read

Xcode 27 Drops Intel: What Stops and What Still Ships

Xcode 27 runs only on Apple silicon, still ships Universal apps back to macOS 12, and silently drops x86_64 from ARCHS_S…

26 min read

John Ternus: The Builder CEO

John Ternus becomes Apple CEO on September 1, 2026. Why Tim Cook's successor signals a builder-led era for Apple hardwar…

36 min read