Xcode 27リリース:必要環境、デプロイメントターゲット、そして何が壊れたか
Xcode 27は2026年9月14日、ビルド27A266aとしてリリースされました。フィードにiOS 27.0 RCの項目が載ってから3日後のことで、iOS 27.0(24A437)、macOS 27.0(26A428)をはじめとする27系プラットフォームと同時のリリースです。App Store Connectは同日から27.0 GA SDKでビルドしたアプリの受け付けを始めており、RC SDKによるビルドは9月9日から受け付けていました。15 動作にはmacOS Tahoe 26.6以降とApple siliconのMacが必要で、Swift 6.4と27系SDKを搭載し、デバッグできるデバイスはiOS 17以降、そしてデプロイメントターゲットの下限がmacOS 12、watchOS 9、DriverKit 21の3つで引き上げられています。23 既存プロジェクトにとっては、確実にビルドが止まる変更が3つ(@Stateマクロ、SE-0508によるソース互換性の破壊、-ld64リンカフラグ)、エラーになり得る依存関係スキャンのルールが1つ、ARCHS_STANDARDの無警告の変更が1つ、警告が2つ加わりました。スキャンのルール以外はすべて、以下で27A266a上で実際に再現しています。246
{.answer-block}
TL;DR
- 日付とビルド番号。 AppleのReleasesフィードには、Xcode 27(27A266a)と27.0系の6つのOSすべてが9月14日(月)付けで掲載されています。「iOS 27.0 RC (24A437)」の項目は9月11日(金)付けで、App Store ConnectがRC SDKでのアップロード受け付けを始めた2日後にあたり、GA版も同じビルド番号です。15 App Store Connect自身の9月14日付けリリースノートには、Xcode 27でビルドしたアプリをApp StoreとTestFlight向けにアップロードできるようになったと書かれています。5
- 必要環境と下限が動きました。 Xcode 26.6はmacOS 26.2で動き、iOS 15のデバイスをデバッグできました。Xcode 27はmacOS 26.6が必要で、Apple silicon上でしか動作せず、デバッグできるのはiOS 17、tvOS 17、watchOS 10以降で、これは実機だけでなくシミュレータにも当てはまります。最小デプロイメントターゲットはmacOS 11から12へ、watchOS 8から9へ、DriverKit 20から21へ上がり、iOS、iPadOS、tvOSは15のまま、visionOSは1のままです。23
- 確実に失敗する3つの変更。
@Stateマクロ:Apple自身の例、つまり宣言時に初期値を持つ@Stateプロパティを他の格納プロパティより先に代入するイニシャライザが、variable 'self.title' used before being initializedで失敗します。配列または辞書リテラルの初期値とinitアクセサを持つ計算プロパティは、ゲッターが先に書かれているとコンパイルできず、AppleはこれをSE-0508によるソース互換性の破壊だとしています。そしてXcode 15でドキュメント化されていた-ld64リンカフラグは、ld: library 'd64' not foundでリンクに失敗します。2468 - 警告するか、エラーになり得るか、何も言わない4つの変更。 ld64がなくなったため、リンカは
-ld_classicを警告付きで無視します。1回の依存関係スキャン内でClangモジュール名が重複すると「may report an error」(エラーを報告することがある)とされています。27.0に設定したmacOS専用ターゲットは、x86_64を自分で戻さない限りarm64のみでビルドされ、何の警告も出ません。そしてPreviewProviderには「Use #Preview instead.」という27.0の非推奨メッセージが付き、各プレビュー修飾子にはそれぞれ置き換え先のメッセージが付いていますが、デプロイメントターゲットが27.0未満だとコンパイラはどれも表示しません。24 - 9月15日時点でAppleはXcode 27.1をリリースしていません。 Releasesフィードにもリリースノートの索引にも載っておらず、AppleのiPhone Duo開発者ページでは27.1ベータは今も「later this month」(今月後半)とされています。Duo開発者向けの記事で書いたSDKの空白は、まだそのままです。1
9月14日に何がリリースされたのか?
| 項目 | ビルド | フィードの日付 |
|---|---|---|
| Xcode 27 | 27A266a | 2026年9月14日(月) |
| iOS 27.0 / iPadOS 27.0 | 24A437 | 9月14日(月)。フィードの「iOS 27.0 RC (24A437)」項目は9月11日(金)付けで、App Store ConnectはRC SDKでのアップロードを9月9日(水)から受け付けていました |
| macOS 27.0 | 26A428 | 9月14日(月) |
| tvOS 27.0 | 24J361 | 9月14日(月) |
| visionOS 27.0 | 24M362 | 9月14日(月) |
| watchOS 27.0 | 24R364 | 9月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.」(27.0系SDKを使ってXcode 27でビルドしたアプリを、App Store向けにも、TestFlightでの内部・外部テスト向けにもアップロードできるようになった) | 9月14日 |
リリースノートのOverviewにはこうあります。「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はSwift 6.4と各27系SDKを含み、iOS 17以降、tvOS 17以降、watchOS 10以降、visionOSでの実機デバッグに対応し、macOS Tahoe 26.6以降のMacを必要とする)2 手元のMacでは、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)を出力します。4
26.6と比べてXcode 27には何が必要なのか?
ビルドマシンをアップグレードする前に確認すべき文書は、Appleの互換性一覧表です。2つの行を並べると次のようになります。3
| Xcode 26.6 | Xcode 27 | |
|---|---|---|
| 動作に必要なmacOS | Tahoe 26.2から26.x | Tahoe 26.6以降、Apple siliconのみ2 |
| SDK | iOS、tvOS、watchOS、visionOS、macOS 26.5、DriverKit 25.5 | iOS、tvOS、watchOS、visionOS、macOS 27、DriverKit 27 |
| デプロイメントターゲット | iOS 15、tvOS 15、watchOS 8、visionOS 1、macOS 11、DriverKit 20 | iOS 15、tvOS 15、watchOS 9、visionOS 1、macOS 12、DriverKit 21 |
| デバッグできるデバイス | iOS 15、tvOS 15、watchOS 8、visionOS 1以降 | iOS 17、tvOS 17、watchOS 10、visionOS 1以降 |
| シミュレータ | iOS 15、tvOS 15、watchOS 8、visionOS 1以降 | iOS 17、tvOS 17、watchOS 10、visionOS 1以降 |
| Swiftコンパイラ | 6.3 | 6.4(言語モード6、5、4.2、4) |
この表の裏には2つの帰結が隠れています。InstrumentsはiOS 17、watchOS 10、tvOS 17より古いデバイスを受け付けなくなったので、古いiPhoneで組んだプロファイリング環境は、アプリのコードに手を付ける前に動かなくなります。2 またAppleは、Device Hubのキーボードとポインタ操作の対応範囲を一文で区切っています。「only supported on the following OS versions and newer: macOS 15.0, iOS 18.0, tvOS 18.0, watchOS 11.0, visionOS 2.0.」(macOS 15.0、iOS 18.0、tvOS 18.0、watchOS 11.0、visionOS 2.0以降でのみ対応)2
Apple silicon必須という条件については、Xcodeを動かすMac側に回避策はなく、7月にIntelの記事を読んだ方にはすでに古い話でしょう。GA版のノートも7月の文言をそのまま残しています。「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はApple silicon Macにしかインストールも実行もできない。macOS 27 SDKはUniversalアプリのmacOS 12以降への後方デプロイに対応する。macOS 27のようにRosettaをサポートするmacOSであれば、Intel向けの開発は引き続き可能)2 3つ目の文が示す回避策は出荷先のMacのためのものであって、ビルドに使うMacのためのものではありません。
ツールチェーンでは何が変わったのか?
リンカ。 GA版のノートは一文で片付けています。”The ld64 linker has been removed and the -ld_classic option is no longer supported.”(ld64リンカは削除され、-ld_classicオプションはサポートされなくなった)2 27A266a上で実際に見るとこうなります。ツールチェーンのusr/binにあるリンカのバイナリはldの1つだけで、自身をld-27037.1、2026年8月25日ビルドと報告します。古いフラグを渡してもリンクは失敗しません。hello.cにint main(void){return 0;}の1行だけを書いてclang hello.o -o hello_classic -Xlinker -ld_classicを実行すると、ld: warning: -ld_classic is no longer supported and will be ignoredと出力しつつ、終了コード0で実行ファイルを書き出します。Xcode 15でAppleがドキュメント化していたもう1つの綴り、-ld64のほうは結果が悪く8、clang hello.c -o hello_ld64 -Wl,-ld64はld: library 'd64' not foundで失敗して終了コード1を返します。新しいリンカが-ld64を-l d64、つまりd64という名前のライブラリの要求として読むためです。4 つまりOTHER_LDFLAGSに-ld_classicを残しているプロジェクトはビルドこそ続きますが、リンクのたびに新しい警告が出て、旧リンカから得ていた挙動はすべて消えています。-ld64を残しているプロジェクトはリンクが止まり、しかもそのエラーはリンカの名前をまったく出しません。ld64の記事では、これらのフラグの出どころを調べ、両方の実行結果を記録しています。
デフォルトのアーキテクチャ。 Intel Deprecationのセクションがルールを述べています。”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.”(最小デプロイメントターゲットをmacOS 27.0またはDriverKit 27.0にしたターゲットは、デフォルトではUniversalでビルドされない。MACOSX_DEPLOYMENT_TARGETまたはDRIVERKIT_DEPLOYMENT_TARGETが27.0以上のとき、ARCHS_STANDARDにx86_64は含まれなくなる)2 これをマルチプラットフォームのプロジェクト(Yawara、SUPPORTED_PLATFORMS = iphoneos iphonesimulator macosx xros xrsimulator)で、xcodebuild -showBuildSettings -sdk macosxを使って再現しました。-sdk引数なしだとこのプロジェクトはARCHS_STANDARDをまったく解決しないという癖があり、これはIntelの記事で扱っています。MACOSX_DEPLOYMENT_TARGET = 26.0ではARCHS_STANDARD = arm64 x86_64に、27.0ではARCHS_STANDARD = arm64に解決され、ARCHS_STANDARD_64_BITはどちらでもarm64 x86_64のままです。4 警告は一切出ません。Universalで出荷していてターゲットを上げるなら、ARCHSにx86_64を自分で足してください。
C++標準ライブラリ。 「The minimum supported deployment target on macOS for the C++ standard library has been increased to 11.0,」(C++標準ライブラリがmacOSでサポートする最小デプロイメントターゲットは11.0に引き上げられた)とあり、ノートは「Potentially breaking changes」の見出しの下に挙動の変更を列挙しています。その先頭は、multi{map,set}::findが必ずしも最初に一致した要素を返さなくなったという項目です。2 新機能のリストは長く、std::chrono値のハッシュ化、zip、std::optional<T&>、std::views::indices(n)などが並びます。2
依存関係スキャンと、それを失敗させ得るルール。 AppleはSwiftの依存関係スキャナを「to avoid redundant setup work and header searches when looking up Clang modules during a single dependency-scan action」(1回の依存関係スキャン操作でClangモジュールを探す際、冗長なセットアップ作業とヘッダー検索を避けるため)に最適化したと述べており、この高速化には要件が伴います。「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.」(1回のSwift依存関係スキャン操作から到達できるClangモジュールはすべて一意のモジュール名を持たなければならない。同じスキャンから見える2つのモジュールマップが同名のClangモジュールを宣言していると、スキャンはエラーを報告することがある。以前のスキャナは名前の重複を許容していた可能性がある)2 Appleは引っかかる形を2つ挙げています。「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.」(ヘッダー検索パス上の複数の場所から同じClangモジュール名を提供するプロジェクトやSDK、そしてSDKのモジュールを再宣言するmodule.modulemapを同梱したサードパーティのソース)2 リンカの削除と同じく、このルールはデプロイメントターゲットではなくツールチェーンのアップグレードで発火します。ld64の記事では、衝突する2つのモジュールマップをスキャナに通し、SDKのモジュールを隠してしまう同梱のSQLite3シムをコンパイルし、7つのプロジェクトを両方の形について監査しています。
何がコンパイルできなくなるのか?
@Stateマクロ。 この変更はXcodeではなくiOS 27のリリースノートに載っており、効いてくるのはデプロイ先のターゲットではなく、ビルドに使うコンパイラです。”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は、この繰り返し評価を避ける新しい@State実装を導入する。この新しい挙動はiOS 17世代のOSまで後方デプロイされる。新しい@StateはSwiftマクロで実装されており、いくつかの例外を除いてプロパティラッパー版とおおむねソース互換である)6 Appleは例外を4つ挙げ、そのうち2つにはコードリストを付け、残り2つには一文か二文だけを添えています。”In rare situations, the automatic inference of generic arguments of @State is less flexible with the macro implementation. Write the type with more specificity.”(まれに、@Stateのジェネリック引数の自動推論がマクロ実装では柔軟さに欠ける。型をより具体的に書くこと)と、”Composing @State with other property wrappers or macros is not supported.”(@Stateを他のプロパティラッパーやマクロと組み合わせることはサポートされない)です。6 既存コードを捕まえるのは、コードリスト付きの2つのほうです。1つ目は、宣言時にすでに初期値を持つ@Stateプロパティに代入するイニシャライザで、SwiftUIはこの代入を常に捨ててきましたが、今では「some such cases no longer compile.」(そうしたケースの一部はコンパイルできなくなる)とされています。6 2つ目は、すべての格納メンバーがprivateのときにコンパイラが合成するprivateなメンバーワイズイニシャライザで、「The state macro disables this synthesized initializer. So the code above no longer compiles.」(stateマクロはこの合成イニシャライザを無効にする。よって上のコードはコンパイルできなくなる)とあります。6 27A266aでは1つ目の例が書かれたとおりに失敗し、pageを代入する行でerror: variable 'self.title' used before being initializedが出ます。titleが存在する前に、マクロのセッターがselfに対して走るためです。self.title = titleをその上に移すと同じファイルがコンパイルでき、@Stateへの代入は従来どおり捨てられます。46 2つ目の例、つまり宣言時の初期値を持たない@Stateのある構造体に対して拡張からself.init(page: page, title: title)を呼ぶものは、私の実行では変更なしでコンパイルできました。マクロ展開を見ると、それを可能にしている形が分かります。マクロは@storageRestrictions(initializes: _page)のinitアクセサの裏にprivate var _page: SwiftUICore.State<StickerPage>を生成しており、これがメンバーワイズイニシャライザにpage:を受け取らせる構文です。4 このノートは確認すべき形の説明として読み、それぞれを自分のコードで確かめてください。@Stateマクロの記事では、出荷中の4つのアプリで両方のパターンを数えています。あの記事は今回のGAテストより前、7月にベータ版のノートをもとに書いたもので、そこで開いたままだった疑問もここで閉じます。イニシャライザ内でバッキングストレージに直接代入する_page = State(initialValue:)は、宣言時の初期値があってもなくても27A266aでコンパイルできます。4
SE-0508による破壊。 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.”(initアクセサと配列または辞書リテラルの初期値を両方持つ計算プロパティは、ゲッターがinitアクセサより先に宣言されているとコンパイルできなくなる)コードリストが続き、その後に出典が示されます。”This is a known source break from SE-0508.”(これはSE-0508による既知のソース互換性の破壊である)回避策は全文でこうです。”Swap the init accessor and the getter such that the init accessor is declared first.”(initアクセサが先に宣言されるよう、initアクセサとゲッターを入れ替える)2 SE-0508は”Array expression trailing closures”(配列式の末尾クロージャ)で、Swift 6.4で実装されており、提案書はまさにこのケースを予告しています。”If the getter is declared before the init accessor, we will now attempt to parse as a trailing closure,”(ゲッターがinitアクセサより先に宣言されていると、今後は末尾クロージャとして解析を試みる)に加えて、”init accessors are however considered for disambiguation, so swapping the accessors is sufficient to make this valid regardless of initial value used,”(ただしinitアクセサは曖昧さ解消の対象になるため、アクセサを入れ替えれば初期値が何であれ有効になる)、そしてこのケースは「does not appear in the source compatibility suite, or for internal Swift projects at Apple.」(ソース互換性スイートにもApple社内のSwiftプロジェクトにも現れない)と書かれています。7 9行の構造体で再現できます。ゲッターを先にすると、swiftcはアクセサの行でerror: initializers may only be declared within a typeを出して失敗し、@storageRestrictions(initializes:)のinitアクセサをgetの上に移すと同じファイルがコンパイルできます。4
struct Container {
private var storage: [Int] = []
var items: [Int] = [] {
@storageRestrictions(initializes: storage)
init(initialValue) { storage = initialValue } // getより前に置く必要がある
get { storage }
set { storage = newValue }
}
}
PreviewProvider。 Previewsのセクションには非推奨が1つ挙がっています。”PreviewProvider and its family of preview modifiers.”(PreviewProviderとそのプレビュー修飾子ファミリー)2 SDKにもそれが反映されており、プロトコルには1つのメッセージ、各修飾子にはそれぞれ別のメッセージが付いています。iOS 27 SDKのSwiftUIインターフェースでは、public protocol PreviewProviderは@available(anyAppleOS, deprecated: 27.0, message: "Use #Preview instead.")の下にあり、previewLayoutは「Use #Preview(traits: .sizeThatFitsLayout) or .fixedLayout(width:height:) instead.」、previewDisplayNameは「Use #Preview(“name”) instead.」、previewInterfaceOrientationは「Use #Preview(traits: .landscapeLeft) or other orientation traits instead.」、previewDeviceは「Use the device picker in Xcode’s canvas.」(Xcodeのキャンバスにあるデバイスピッカーを使うこと)、そしてpreviewContextはPreviewContextおよびPreviewContextKeyプロトコルとともに「Use #Preview with a Widget timeline provider or entries instead.」(代わりにWidgetのタイムラインプロバイダまたはエントリを指定した#Previewを使うこと)と言っています。4 これらのメッセージを目にするかどうかは、2つの事実で決まります。コンパイラは非推奨のバージョンをデプロイメントターゲットと比較するので、修飾子が警告を出すのは最小バージョンが27.0のターゲットだけです。previewLayout、previewDisplayName、previewDeviceを使うファイルは、-target arm64-apple-ios27.0-simulatorでは3つの警告を出し、17.0と26.0では何も出しませんでした。そしてPreviewProvider自体は、別の理由でまったく警告しません。SDKはこれをanyAppleOSの非推奨指定の直上に@available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *)を付けて宣言しており、私の検証では、この組み合わせを持つプロトコルは27.0ターゲットでも、準拠に対しても引数の型としての使用に対しても警告を出しませんでした。一方、同じプロトコルを@available(iOS, deprecated: 27.0)だけ、あるいはanyAppleOSの形だけで非推奨にすると、どちらでも警告が出ました。修飾子は自身の宣言にanyAppleOSの非推奨指定しか持たず(それらを収めるextension SwiftUICore.View側にintroduced属性があり、その継承された形は警告を抑制しません)、だから修飾子は警告し、プロトコルは警告しないのです。4 出荷中のどのデプロイメントターゲットでもビルドログはどちらにせよ沈黙するので、PreviewProviderと修飾子を検索して#Previewに移行してください。キャンバスは新しい#Preview(arguments:)構文により、引数ごとにグリッド表示するようになりました。24
Systemの新しいstat()。 SystemライブラリはSwift APIとしてstat、lstat、fstat、fstatatを提供するようになり、Stat型とFilePath.stat()インスタンスメソッドが加わりました。2 ノートには、修飾なしのstat()を呼ぶ拡張が新しいメソッドと衝突する問題が修正済みとして載っています。その衝突が生きていた間にDarwin.の修飾を足していたなら、そのままで構いません。2
Address Sanitizerは逆方向です。 「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.」(Xcode 26.4以前でビルドすると、iOS 27.0、tvOS 27.0、watchOS 27.0、visionOS 27.0でAddress Sanitizerが起動に失敗することがある)回避策はXcode 26.5以降で、CIマシンに古いXcodeを残したままデバイスだけ27.0に更新しているチームには関係のある話です。2
IDEとツールでは何が変わったのか?
- Interface Builderがシミュレータなしでビルドします。 新しいコンパイルモード
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.”(UIKit(Cocoa Touch)ベースのドキュメント向け。デフォルトで有効なtoolchainは、シミュレータをダウンロードせずにIBドキュメントをコンパイルでき、ビルドサーバーで特に有用)とされています。2 - シミュレータの起動が速くなり、再起動もできます。 「The simulator runtimes now contain a pre-built dyld cache. This will make first launch of a simulator much faster,」(シミュレータのランタイムにビルド済みのdyldキャッシュが含まれるようになり、シミュレータの初回起動が大幅に速くなる)とあり、
simctlにはrebootコマンドが加わりました。2 既知の問題が1つ残っており、Appleの言葉ではこうです。「Some simulator runtimes are not completely deleted when removed, re-appearing after a reboot.」(一部のシミュレータランタイムは削除しても完全には消えず、再起動後に再び現れる)2 - devicectlのJSONはバージョン5です。
xcrun devicectl --versionは642.16を報告し、list devices --json-outputは"jsonVersion": 5を書き出します。AppleはhardwareProperties、deviceProperties、connectionPropertiesフィールドを非推奨にしてproperties辞書に置き換え、これらをまだ含む結果には_deprecationNoticeが付きます。24 - StoreKitテスト。 StoreKit構成のUIでオファーコードを定義でき、ローカルテスト用にサブスクリプションバンドルを構成でき、Transaction Managerでデバイスなしにオファーコード付きの購入を試せます。2
- Organizer。 Insights Overviewが「summarizes high-impact performance regressions」(影響の大きいパフォーマンス低下を要約する)とされ、HitchesメトリクスがScrollingメトリクスに置き換わりました。2
- コーディングアシスタント。 モデル一覧にGoogle Geminiが加わり、「Planning with agents is now first class in Xcode,」(エージェントによるプランニングがXcodeの一級機能になった)とあって、プランはエージェントが先に進む前に承認する編集可能なMarkdown成果物になっています。コーディングエージェントの記事でベータ版時点のワークフローを扱っており、GA版のノートにはまさにその成果物のためのMarkdownエディタが載っています。2
- ローカライズ。 エージェントがString Catalogのエントリを翻訳でき、ローカリゼーションのエクスポートがヘッダーファイルから
NSLocalizedStringなどのマクロを抽出するようになりました。2 - Icon Composer。 ノートはこれをIcon Composer 2.0と呼び、「a new sharper rendering mode for upcoming 2027 operating systems」(来たる2027年のOS向けの、より鮮明な新しいレンダリングモード)としています。27A266aに同梱されたバンドルはバージョン27.0を報告します。24
- テスト。 テストプランでUIテスト中に対象アプリがクラッシュしたときの扱いをオフから致命的な失敗まで設定でき、
swift testには--maximum-repetitionsと--repeat-until [pass|fail]、そして最後に表示される失敗のサマリーが加わりました。2 - デバッグ。 ブリッジングヘッダーがある場合、LLDBは「can now directly import explicitly built Swift modules and PCH from DerivedData,」(DerivedDataから明示的にビルドされたSwiftモジュールとPCHを直接インポートできるようになった)とされ、
language swift task treeコマンドがSwift Concurrencyのタスクを一覧します。2
私なら今週こうする
- CIに触る前に互換性の行を読みます。ビルド用MacにはmacOS 26.6、Apple siliconのみ、最も古いテストデバイスはiOS 17、そしてmacOS 12、watchOS 9、DriverKit 21のうち自分の製品に当てはまるものです。23
-ld_classicと-ld64をgrepして両方削除します。前者はリンクのたびに警告付きで無視され、後者は即座に失敗します。ビルド設定を開いているついでに、SDKのモジュールを再宣言している手書きのmodule.modulemap、つまりAppleが一意なモジュール名のルールで名指ししている形を探しておきます。24- macOSまたはDriverKitのターゲットを27.0にしていてIntel向けにも出荷しているなら、
ARCHSを明示的に設定します。ARCHS_STANDARDだけではarm64になり、これはmacOSについて私が再現し、Appleは両方について明言しています。24 PreviewProvider、previewLayout、previewDisplayName、previewDeviceを検索し、それぞれのアノテーションが示すメッセージに従います。プロトコルは#Previewへ、previewLayoutは#Preview(traits: .sizeThatFitsLayout)または.fixedLayout(width:height:)へ、previewDisplayNameは#Preview("name")へ、previewDeviceはキャンバスのデバイスピッカーへ。修飾子が警告するのは27.0のデプロイメントターゲットだけで、PreviewProviderへの準拠はどのターゲットでも警告しないため、出荷中のターゲットのビルドログは沈黙したままです。4- Xcode 27で一度ビルドして、2つの診断を確認します。1つは
variable 'self.title' used before being initializedで、宣言時の初期値をすでに持つ@Stateプロパティを他の格納プロパティより先に代入するイニシャライザで出るもので、@Stateマクロの記事が順を追って説明しています。もう1つはinitializers may only be declared within a typeで、配列または辞書リテラルの初期値とinitアクセサを持つプロパティで出るもので、アクセサをゲッターの上に移します。246 - App Store Connectが受け付けるようになった今、27系SDKでTestFlightビルドをアップロードします。その際、起動画面のルールとUIKitのシーン必須化を頭に入れておいてください。どちらも27にリンクした瞬間からアプリを拘束します。56
よくある質問
Xcode 27はいつリリースされましたか?
2026年9月14日(月)、ビルド27A266aとして、iOS 27.0、iPadOS 27.0、macOS 27.0、tvOS 27.0、visionOS 27.0、watchOS 27.0と同じ日にリリースされました。フィードのiOS 27.0 RC(24A437)項目は9月11日付けで、App Store ConnectがRC SDKでのビルドを受け付け始めた2日後です。15
Xcode 27に必要なmacOSは何ですか?
Apple silicon Mac上のmacOS Tahoe 26.6以降です。Intel Macにはインストールも実行もできません。同日にリリースされたmacOS 27.0でも動作します。23
Xcode 27の最小デプロイメントターゲットは何ですか?
iOS 15、iPadOS 15、tvOS 15、watchOS 9、visionOS 1、macOS 12、DriverKit 21です。Xcode 26.6と比べると、watchOSは8から、macOSは11から、DriverKitは20から上がりました。3
Xcode 27でもUniversalなMacアプリをビルドできますか?
はい、macOS 12までさかのぼってビルドできますが、ターゲットのMACOSX_DEPLOYMENT_TARGETが27.0になるとデフォルトではそうなりません。その場合ARCHS_STANDARDはarm64だけに解決されるので、ARCHSにx86_64を自分で追加します。24
Xcode 27.1は出ていますか?
2026年9月15日時点では出ていません。AppleのReleasesフィードとXcodeリリースノートの索引にはXcode 27しか載っておらず、AppleのiPhone Duo開発者ページはXcode 27.1ベータを今も「Coming later this month」(今月後半に公開予定)としています。iPhone Duo SDKは今回のリリースには含まれません。1
Xcode 27のリリースノートはどこにありますか?
Appleの開発者向けドキュメントサイトのXcode Release Notesの下に、このリリース用のページが1つあります。本記事で引用したセクションは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、Systemです。2 @Stateマクロの変更はXcodeのノートではなく、iOSおよびiPadOS 27のリリースノートのSwiftUIの項にあります。6
出典
-
Apple、Releases、2026年9月15日に取得したRSSフィード。「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)」、「App Store Connect Update」はいずれも2026年9月14日(月)付け、「iOS 27.0 RC (24A437)」は2026年9月11日(金)付けです。Xcode Release Notesの索引に載っている27系の項目は「Xcode 27 Release Notes」の1つだけで、どちらにも27.1の項目はありません。Apple Developer、Get Ready for iPhone Duo、2026年9月15日取得:「Xcode 27.1 beta. Get the latest SDKs to build, run, and test your app for iPhone Duo. Coming later this month」(Xcode 27.1ベータ。iPhone Duo向けにアプリをビルド、実行、テストするための最新SDK。今月後半に公開予定)。 ↩↩↩↩↩
-
Apple、Xcode 27 Release Notes、GAリリース後の2026年9月15日に取得。引用したセクション: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)およびDeprecations(Apple siliconのみ、全文引用、162138432)。Previews、Deprecations(”PreviewProviderand its family of preview modifiers.” 144168701)およびNew Features(#Preview(arguments:)、167544057)。Swift Compiler、New Features(依存関係スキャナと一意なモジュール名の要件、抜粋、136303612)およびKnown Issues(SE-0508、180969028。回避策の文は全文引用)。System、New FeaturesおよびResolved Issues(177911316)。Address Sanitizer、Known Issues(178072780)。Instruments、Deprecations(166097304)。Device Hub、Deprecations(160482487)。devicectl、New Features(170812159)およびDeprecations(183772705)。Simulator、New Features(179846743、172303413)およびKnown Issues(141290052)。Interface Builder、New Features。C++ Standard Library、New FeaturesおよびDeprecations。Organizer。Coding Intelligence(171990272、172857081)。Source Editor、New Features(Markdownエディタ、175022151)。Localization。Icon Composer。StoreKit Testing in Xcode。Testing。Swift Package Manager、New Features(--maximum-repetitions、177561078。失敗のサマリー、168311253)。Debugging。 ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Apple、Xcode support: minimum requirements and supported SDKs、2026年9月15日取得。Xcode 27の行:macOS Tahoe 26.6以降。SDKはiOS 27、tvOS 27、watchOS 27、visionOS 27、macOS 27、DriverKit 27。デプロイメントターゲットはiOS 15から27、iPadOS 15から27、tvOS 15から27、watchOS 9から27、visionOS 1から27、macOS 12から27、DriverKit 21から27。デバイスサポートはiOS 17、tvOS 17、watchOS 10、visionOS 1以降。シミュレータはiOS 17、tvOS 17、watchOS 10、visionOS 1以降。Swift 6.4コンパイラ、言語モードは6、5、4.2、4。Xcode 26.6の行:macOS Tahoe 26.2から26.x。SDKは26.5、DriverKit 25.5。デプロイメントターゲットはiOS 15、tvOS 15、watchOS 8、visionOS 1、macOS 11、DriverKit 20。デバイスとシミュレータのサポートはiOS 15、tvOS 15、watchOS 8、visionOS 1から。Swift 6.3。 ↩↩↩↩↩↩
-
著者による再現。
DEVELOPER_DIRを向けたXcode 27.0(27A266a)、macOS 26.6.2(25G83)、2026年9月15日。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)」。ツールチェーンのusr/binにあるリンカはldの1つだけで、ld -vは「PROJECT:ld-27037.1」と、「Aug 25 2026」のビルドであることを出力します。int main(void){return 0;}を含むhello.cに対し、clang hello.o -o hello_classic -Xlinker -ld_classicは「ld: warning: -ld_classic is no longer supported and will be ignored」を出力して終了コード0、clang hello.c -o hello_ld64 -Wl,-ld64は「ld: library ‘d64’ not found」と「clang: error: linker command failed with exit code 1 (use -v to see invocation)」を出力して終了コード1、出力ファイルはありませんでした。マルチプラットフォームのプロジェクトYawara.xcodeproj(SUPPORTED_PLATFORMS = iphoneos iphonesimulator macosx xros xrsimulator、-sdk引数なしではARCHS_STANDARDの行を出力しない)に対するxcodebuild -showBuildSettings -sdk macosx:MACOSX_DEPLOYMENT_TARGET = 26.0でARCHS_STANDARD = arm64 x86_64、27.0でARCHS_STANDARD = arm64、どちらでもARCHS_STANDARD_64_BIT = arm64 x86_64。var items: [Int] = []と@storageRestrictions(initializes: storage) init(initialValue)アクセサを持つ9行のContainer構造体:ゲッターが先だとinitの行で「error: initializers may only be declared within a type」となって失敗し、アクセサが先だと終了コード0でコンパイルできます。iPhoneOS 27.0 SDKのSwiftUI.swiftmodule/arm64e-apple-ios.swiftinterface:@available(anyAppleOS, deprecated: 27.0, message: "Use #Preview instead.")が14971行目(public protocol PreviewProvider)、14978行目(その拡張)、14991行目(PreviewPlatform)に、「Use #Preview with a Widget timeline provider or entries instead.」が15023行目(PreviewContextKey)、15029行目(PreviewContext)、15069行目(previewContext)に、「Use the device picker in Xcode’s canvas.」が15053行目(previewDevice)に、「Use #Preview(traits: .sizeThatFitsLayout) or .fixedLayout(width:height:) instead.」が15058行目(previewLayout)に、「Use #Preview(“name”) instead.」が15063行目(previewDisplayName)に、「Use #Preview(traits: .landscapeLeft) or other orientation traits instead.」が15075行目(previewInterfaceOrientation)にあります。素のPreviewProvider準拠をswiftc -cでコンパイルすると、-target arm64-apple-ios27.0-simulator、ios26.0、ios17.0のいずれでも警告は出ませんでした。PreviewProviderの内側でpreviewLayout(.sizeThatFits)、previewDisplayName("Card")、previewDevice(PreviewDevice(rawValue: "iPhone 18 Pro"))を適用したファイルは、ios27.0で3つの[#DeprecatedDeclaration]警告(「’previewLayout’ was deprecated in any Apple OS 27.0: Use #Preview(traits: .sizeThatFitsLayout) or .fixedLayout(width:height:) instead.」、および対応するpreviewDisplayNameとpreviewDeviceのメッセージ)を出し、ios26.0とios17.0では出しませんでした。4つのプロトコルにそれぞれ準拠する構造体を用意し、1つの関数シグネチャにany P引数を持たせた検証を-target arm64-apple-ios27.0-simulatorでコンパイルしたところ、@available(iOS, deprecated: 27.0)のみ、@available(anyAppleOS, deprecated: 27.0)のみ、@available(iOS, deprecated: 27.0)の上に@available(iOS 13.0, *)を置いたものは、いずれも準拠の行とany P引数の型で警告(「’P1’ was deprecated in iOS 27.0」、「’P2’ was deprecated in any Apple OS 27.0」、「’P4’ was deprecated in iOS 27.0」)を出した一方、SDKと同じ組み合わせ、つまり@available(anyAppleOS, deprecated: 27.0)の上に@available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *)を置いたものはどちらにも警告を出しませんでした。これらの存在型を通したメソッド呼び出しは4つとも診断なしで、ios26.0では4つとも警告が出ませんでした。インターフェースでは、PreviewProviderは14970行目から14972行目でまさにその組み合わせの下にあり、previewLayoutは15058行目から15059行目で自身の宣言にanyAppleOSの非推奨指定だけを持ち、それを収めるextension SwiftUICore.Viewのintroduced属性は15051行目にあります。init(title:)の中で_page = State(initialValue: StickerPage(title: title))と代入する2つのビュー、@State private var page: StickerPageのものと@State private var page = StickerPage()のものを含むファイルは、ios27.0で終了コード0、診断なしでコンパイルできました。@Stateの検証は、それぞれ@State private var pageとlet title: Stringを持つStickerPageViewで、iPhoneSimulator 27.0 SDKに対してswiftc -c -target arm64-apple-ios27.0-simulatorでコンパイルしました。Appleの1つ目の例、@State private var page = StickerPage()と、self.pageを代入してからself.titleを代入するinit(title:)は、self.pageの行で「error: variable ‘self.title’ used before being initialized」となり終了コード1。self.title = titleをself.pageの代入より上に移した同じファイルはコンパイルでき、終了コード0。Appleの2つ目の例、初期値のない@State private var page: StickerPageとself.init(page: page, title: title)を呼ぶ拡張はコンパイルでき、終了コード0で、-Xfrontend -dump-macro-expansionsはマクロが@storageRestrictions(initializes: _page) init(initialValue)アクセサ付きでprivate var _page: SwiftUICore.State<StickerPage>を生成していることを示しました。xcrun devicectl --version:642.16。devicectl list devices --json-outputは"jsonVersion": 5を書き出しました。27A266a内のIcon ComposerのInfo.plist:CFBundleShortVersionStringは27.0。 ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Apple、App Store Connect release notes、2026年9月15日取得。2026年9月14日の項目は上の表に全文引用しています。2026年9月9日の項目はRC SDKでのアップロードを記録し、iPhone Duo、iPhone 18 Pro Max、iPhone 18 Pro、Apple Watch Ultra 4、Apple Watch Series 12のスクリーンショットとAppプレビューの仕様を追加しており、「Support for uploading assets for iPhone Duo in App Store Connect will be available later this year.」(App Store ConnectでのiPhone Duo向けアセットのアップロード対応は今年後半に提供予定)とあります。 ↩↩↩↩↩
-
Apple、iOS & iPadOS 27 Release Notes、SwiftUI、New Features(105893279)、2026年9月15日取得。次の引用の出典です。”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.”。StickerPageViewのリストを伴う”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:「。リストを伴う」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:「。そして」The state macro disables this synthesized initializer. So the code above no longer compiles. To mitigate, assign value to members explicitly:「。またリストのない2つの例外、」In rare situations, the automatic inference of generic arguments of@Stateis less flexible with the macro implementation. Write the type with more specificity.「と」Composing@Statewith other property wrappers or macros is not supported.”。同じ文書のUIKitセクションには手順6で引用した2つの要件があります。New Featuresの”iOS and iPadOS apps built with the 27.0 SDK or later are required to include a launch screen.”(27.0 SDK以降でビルドしたiOSおよびiPadOSアプリには起動画面が必須)(168247372)と、Deprecationsの”Apps built with the latest SDK must adopt the scene-based life cycle or they fail to launch.”(最新SDKでビルドしたアプリはシーンベースのライフサイクルを採用しなければ起動に失敗する)(141837548)です。 ↩↩↩↩↩↩↩↩↩↩ -
Cal Stephens、SE-0508: Array expression trailing closures、Swift Evolution、ステータス”Implemented (Swift 6.4)”、実装はswiftlang/swift#86244、2026年9月15日取得。”Init accessors”の小節が次の出典です。”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:”、上で引用した曖昧さ解消の文、そして”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)、2026年9月15日取得:「The classic linker can still be explicitly requested using -ld64, and will be removed in a future release.」(クラシックリンカは-ld64で明示的に要求でき、将来のリリースで削除される予定)。 ↩↩