iOS 27.0リリースノート:非推奨API、挙動の変化、修正点
iOS 27.0とiPadOS 27.0は、2026年9月14日(月)にビルド24A437として公開されました。これは9月11日にAppleがRCとして配布したものと同じビルドで、同じ日にXcode 27(27A266a)に同梱されたSDKが出荷され、App Store Connectも同日から27.0 GAビルドの受け付けを始めています。13 「どのiOS 27.0か」という問いには、今や3つのビルド番号が答えになります。デバイスが実行するのは24A437、Xcode 27内のSDKが名乗るのは24A430、シミュレータランタイムは24A434です。4 リリースノートは93の見出し領域にわたり、新機能65件、解決済みの問題197件、既知の問題23件、非推奨11件を含みます。既存コードにとって重要なのは、27.0 SDKでビルドした瞬間に発火する変更群、SDK自身のヘッダで裏付けが取れる非推奨、そして1つのバイナリでiOS 26.5とiOS 27.0の両ランタイムにまたがって再現できるFoundationの修正1件です。24 {.answer-block}
TL;DR
- ビルド番号。 デバイスは24A437、SDKは24A430、シミュレータランタイムは24A434です。RCとGAはデバイスビルドを共有しており、SDKの番号はデバイスの番号ではありません。バグ報告でビルド番号を求められたときに効いてくる違いです。14
- 27にリンクしたときの挙動。 12カテゴリ、計23エントリの変更が、27.0 SDKでビルドした瞬間からアプリの動作を変えます。起動画面の必須化、シーンライフサイクルの義務化、非表示の選択で
TabViewがクラッシュする件、選択可能なTextでのシステムテキスト選択、表示されたView Controllerのトレイト継承、インラインのスコープバー、外部ディスプレイのシーンが自動では提供されなくなる件、シートとポップオーバー内でコントロール修飾子がリセットされる件、containerRelativeFrameのセーフエリア計算、ステータスバーのアクセサ、UIRequiresFullScreen下でのiPadのリサイズ規則、そしてメニューとスクロールトップに関する2つの小さなSwiftUIの変化です。2 - 再コンパイルしなければクラッシュ。 MetricKitの
HitchTimeMetric.ratioは新しいHitchTimeRatio単位で計測するようになり、ScrollHitchTimeMetricはSwift APIから姿を消しました。Appleは、起動時のクラッシュとシンボル欠落によるクラッシュを避けるために最新SDKで再コンパイルするよう求めており、SDKのインターフェースを見ればその型が消えていることを確認できます。24 - 11件の非推奨、その大半は無音。
canOpenURL:(ヘッダではios(3.0, 27.0))、On Demand Resources(ios(9.0, 27.0))、PHAssetResource.originalFilename(ios(9, 27))、旧来のMetricKit API(API_TO_BE_DEPRECATEDが付いているのでソフトな非推奨)、ScrollHitchTimeMetric、FileDocument、calendar.deleteEventsからcalendar.deleteEventへの改名、PencilKitの改名、シーンの義務化、AirPortユーティリティ、そしてWeather Highlightsの言語に関する注記です。ハードな非推奨の3件は、デプロイメントターゲットが27.0のときにしか警告を出しません。17.0や26.0では、同じファイルが警告なしでコンパイルされます。24 - Foundationの2つの変更を検証。
+[NSURL URLWithString:]は、文字列内の別の場所にあるスペースをエスケープする際に、正当な%20を二重エンコードしなくなりました。1つのシミュレータバイナリがiOS 26.5ランタイムでは%2520を、iOS 27.0ランタイムでは%20を出力し、Macビルドは旧挙動側と一致するので、この修正はSDKではなくOSに従います。volumeAvailableCapacityKeyが有効数字3桁に切り詰められる件はシミュレータでは現れず、55,177,985ブロックが正確に報告されます。24
どのビルドがどれなのか?
| 場所 | ビルド | 根拠 |
|---|---|---|
| デバイス、iOS 27.0 / iPadOS 27.0 | 24A437 | Releasesフィード、2026年9月14日(月)。9月11日(金)に「iOS 27.0 RC (24A437)」1 |
| Xcode 27(27A266a)内のSDK | 24A430 | iPhoneOS.sdk/System/Library/CoreServices/SystemVersion.plistのProductBuildVersion4 |
| iOS 27.0シミュレータランタイム | 24A434 | xcrun simctl list runtimesが「iOS 27.0 (27.0 - 24A434)」と表示4 |
| macOS 27.0 | 26A428 | Releasesフィード、9月14日(月)1 |
| App Store Connect | 27.0 GA SDKを受け付け | 「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.」(Xcode 27と27.0 SDKでビルドしたアプリを、App Store向けとTestFlight経由の内部・外部テスト向けにアップロードできるようになった)9月14日。RC SDKでのアップロードは9月9日から受け付け3 |
3つの番号が並ぶのは間違いではありません。SDKはヘッダとインターフェースのスナップショット、シミュレータランタイムはAppleがXcode向けに出荷する別個のcryptex、そしてデバイスビルドは実際に人々が動かしているものです。このどれかを伴わずに「iOS 27.0」とだけ書かれた再現手順は、修正が適用されたかどうかを決める番号を欠いています。4
リリースノート自体は、対象範囲を示す2文「The iOS & iPadOS 27 SDK provides support to develop apps for iPhone and iPad running iOS & iPadOS 27. The SDK comes bundled with Xcode 27, available from the Mac App Store.」(iOS & iPadOS 27 SDKはiOS & iPadOS 27を実行するiPhoneとiPad向けのアプリ開発をサポートし、Mac App Storeで入手できるXcode 27に同梱される)で始まり、そこから93の見出し領域を順に扱います。各見出しの下のリスト項目を数えると、新機能65件、解決済みの問題197件、既知の問題23件、非推奨11件になります。Siriだけで解決済み38件と既知8件、SwiftUIは新機能23件と解決済み13件、UIKitは新機能9件と解決済み13件です。2 ツールチェーン側はXcode 27の記事で扱っており、いま読んでいるこの記事はOSとSDKの側を扱います。
27.0 SDKでビルドした瞬間に何が変わるのか?
Appleは挙動の変更を、アプリがリンクするSDKで切り替えます。そのため、これらはすでに出荷済みのビルドには何もせず、Xcode 27からの最初のアーカイブですべてが発火します。それぞれのノートを引用します。2
- 起動画面。 「iOS and iPadOS apps built with the 27.0 SDK or later are required to include a launch screen. Your app’s
Info.plistmust contain one of the following keys:UILaunchStoryboardName,UILaunchStoryboards,UILaunchScreen, orUILaunchScreens. Apps that don’t include a launch screen are rejected when the App Store begins accepting apps built with the 27.0 SDK.」(27.0 SDK以降でビルドしたアプリには起動画面が必須で、Info.plistに上記のいずれかのキーが必要。App Storeが27.0 SDKビルドの受け付けを始めた時点で、起動画面のないアプリは拒否される)App Store Connectは、27.0 RC SDKでビルドしたApp Store向けアップロードを9月9日から、GA SDKでのアップロードを9月14日から受け付けています。どちらのエントリも拒否がいつ始まったかには触れていないので、両方とも施行日ではなくアップロード受け付け日として読んでください。3 私の起動画面の記事では、生成されたplistを監査しています。 - シーンライフサイクル。 UIKitの非推奨の項に「Apps built with the latest SDK must adopt the scene-based life cycle or they fail to launch.」(最新SDKでビルドしたアプリはシーンベースのライフサイクルを採用しなければ起動に失敗する)とあります。移行手順はシーン義務化の記事にまとめています。
TabViewの選択。 「In apps built with the iOS 27.0 and iPadOS 27.0 SDKs, aTabViewenforces that its selection is set to a visible tab.TabViewmight crash when its selection is set to a hidden or otherwise unavailable tab.」(iOS 27.0とiPadOS 27.0のSDKでビルドしたアプリでは、TabViewは選択が表示中のタブであることを強制し、非表示または利用不可のタブが選択されるとクラッシュすることがある)UserDefaultsから復元した選択が、後から非表示にしたタブを指しているケースが、探すべき形です。- 選択可能な
Text。 「In apps built with the iOS 27.0 and iPadOS 27.0 SDKs, aTextview with.textSelection(.enabled)applied now supports user-interactive selection using the system text selection UI.」(27.0 SDKでビルドしたアプリでは、.textSelection(.enabled)を適用したTextがシステムのテキスト選択UIによる対話的な選択に対応する)Appleはさらに、そうしたViewが「might include additional gestures for system text selection interactions」(システムテキスト選択のための追加ジェスチャを含むことがある)と述べ、カスタムジェスチャには.highPriorityGesture()を使うよう案内しています。同じビルドで、TextRendererも選択可能なText上で動作するようになりました。 - 表示されたView Controller。 「In apps built with the iOS 27.0 SDK, a presented view controller inherits its trait collection by walking up its view’s superview chain through the intermediate views of the presentation, rather than jumping directly to the presentation controller.」(iOS 27.0 SDKでビルドしたアプリでは、表示されたView Controllerはプレゼンテーションコントローラへ直接飛ぶのではなく、プレゼンテーションの中間Viewを経由してsuperviewチェーンをたどる形でトレイトコレクションを継承する)トレイトを設定するカスタムの
UIPresentationControllerサブクラスが、再テストの対象です。 - スコープバー。 「In apps built with the iOS 27.0 SDK, when
UISearchControlleruses center search-bar placement, the scope bar appears inline on the same row as the search field rather than on a separate row beneath it.」(iOS 27.0 SDKでビルドしたアプリでは、UISearchControllerが中央配置の検索バーを使うとき、スコープバーは下の別の行ではなく検索フィールドと同じ行にインライン表示される) - 外部ディスプレイ。 「In apps built with the iOS 27.0 SDK,
windowExternalDisplayNonInteractivescenes are no longer offered automatically by the system. UseUIViewController.registerSceneAccessory(_:)with aUISceneAccessory.externalNonInteractiveinstance to display non-interactive content on external display scenes.」(iOS 27.0 SDKでビルドしたアプリでは、windowExternalDisplayNonInteractiveシーンはシステムから自動では提供されなくなる。外部ディスプレイのシーンに非対話型コンテンツを表示するには、UISceneAccessory.externalNonInteractiveインスタンスを渡してUIViewController.registerSceneAccessory(_:)を使う)SwiftUIにも、ExternalNonInteractiveAccessoryを伴う.sceneAccessoryという同じ入り口が用意されています。 - シートとポップオーバー。 修正済みとして掲載されています。「In apps built with the 27.0 SDKs, the
controlSize,buttonSizing,buttonRepeatBehavior,menuIndicatorVisibility, andButtonBorderShapeenvironment values are now reset to their default values in sheets and popovers.」(27.0 SDKでビルドしたアプリでは、これらの環境値がシートとポップオーバー内でデフォルト値にリセットされる)シートが表示元から.controlSize(.large)を継承していたなら、それは継承されなくなります。 containerRelativeFrame。 これも27.0 SDKビルド向けの修正です。「incorrectly accounts for safe-area insets on aScrollView’s non-scrollable axis, causing the calculated scrollable content size to be too small」(ScrollViewのスクロールしない軸でセーフエリアのインセットを誤って計算に含め、算出されるスクロール可能コンテンツのサイズが小さすぎていた)とあり、containerRelativeFrame(.vertical)を使う横方向のScrollViewはサイズが変わります。- ステータスバーのアクセサ。 27.0 SDKビルド向けの修正です。
UIApplicationの非推奨ステータスバーアクセサ、ノートの列挙ではstatusBarFrame、statusBarOrientation、statusBarStyle、isStatusBarHiddenが「might return NaN or null values」(NaNやnullの値を返すことがある)とされています。 - iPadとiPhoneミラーリングのリサイズと向き。 UIKitの解決済みの問題9件が、「built with the iOS 27 SDK」(iOS 27 SDKでビルドした)アプリがシーン接続時、あるいはユーザーがウィンドウをリサイズや回転したときに何を見るべきかを記述しています。
UIRequiresFullScreenのアプリは連続的なリサイズ更新の代わりに「a discrete change to a newUIScreenwith an updated bounds」(更新されたboundsを持つ新しいUIScreenへの離散的な変化)を受け取り、UIScreen.mainのboundsは「should remain fixed once the screen connects」(画面接続後は固定されたままであるべき)、そして「supported interface orientations should no longer be a condition for continuous resizability」(サポートするインターフェースの向きは、もはや連続リサイズ可否の条件ではない)とされています。 - メニューとスクロールトップ。 SwiftUIの小さな変化が2つあります。「In apps built with the 27.0 SDKs, a
LabeledContentview used inside aMenumaps its value to the platform menu item’s subtitle」(27.0 SDKでビルドしたアプリでは、Menu内で使ったLabeledContentの値がプラットフォームのメニュー項目のサブタイトルに対応づけられる)と、修正済みとして「In apps built with the 2027 SDKs, tapping the status bar to scroll aScrollViewto its top correctly updates a boundscrollPosition」(2027 SDKでビルドしたアプリでは、ステータスバーをタップしてScrollViewを先頭までスクロールしたとき、バインドされたscrollPositionが正しく更新される)です。レイアウトの都合で値を持たせていたメニューラベルにはサブタイトルが生え、ステータスバーのタップ後に古い値のままだったscrollPositionバインディングは更新されるようになります。
この12カテゴリが、既存の挙動を変えるエントリを網羅しています。同じSDKゲートの背後にある新機能、たとえばReadableDocumentプロトコル、その上に築かれたDocumentプロトコル、UIScene.extendStateRestorationなどは後の節で扱います。外部ディスプレイのカテゴリは、UIKit側の削除とSwiftUI側の代替を対にしたものです。
MetricKitの2つのエントリは、リンクではなく再コンパイルの話ですが、ここに属します。「HitchTimeMetric.ratio and SignpostIntervalMetric.hitchTimeRatio now use the new HitchTimeRatio type, a Dimension subclass that expresses hitch time as a ratio of milliseconds hitching per second of tracked duration. Recompile your app with the latest SDK to pick up this type change and avoid any crashes on launch.」(HitchTimeMetric.ratioとSignpostIntervalMetric.hitchTimeRatioは、追跡時間1秒あたりのヒッチ時間ミリ秒の比率を表すDimensionサブクラスの新しいHitchTimeRatio型を使う。型の変更を取り込んで起動時のクラッシュを避けるために、最新SDKで再コンパイルすること)そして「The scrollHitchTime(_:) case of MetricResult and the ScrollHitchTimeMetric type are no longer part of the new Swift MetricKit API, and MetricReport values no longer contain scroll hitch entries. Use the hitchTime(_:) case and HitchTimeMetric instead, which report per-app animation hitch time. Recompile your app with the latest SDK to avoid a missing symbol crash if it references ScrollHitchTimeMetric or scrollHitchTime(_:).」(MetricResultのscrollHitchTime(_:)ケースとScrollHitchTimeMetric型は新しいSwift MetricKit APIから外れ、MetricReportにスクロールヒッチのエントリは含まれなくなった。代わりにアプリ単位のアニメーションヒッチ時間を報告するhitchTime(_:)ケースとHitchTimeMetricを使い、これらの名前を参照しているならシンボル欠落のクラッシュを避けるために最新SDKで再コンパイルすること)2 iOS 27 SDKのMetricKit Swiftインターフェースでは、ScrollHitchTimeMetricとscrollHitchTimeの出現は0回、HitchTimeRatioは4回です。つまり、ベータSDKに対してビルドしてどちらかの名前を使っていたバイナリは、GAインターフェースがエクスポートしていないシンボルを参照していることになります。4 私のMetricKitの記事では、6月のベータ時点の新APIを扱っています。
27.0で非推奨になったAPIはどれか?
リリースノートには11件の非推奨が並びます。ただし、リリースノート上の非推奨は1つの文にすぎず、SDK上の非推奨はコンパイラが読む可用性アノテーションであり、この2つは常に同じことを言っているとは限りません。各エントリを、Xcode 27内のiPhoneOS 27.0 SDKにあるヘッダとSwiftインターフェースと突き合わせて確認しました。24
| ノートのエントリ | SDKが言っていること |
|---|---|
「canOpenURL: is deprecated. Attempt to open the URL and handle any failure instead of validating it first.」(canOpenURL:は非推奨。事前に検証するのではなく、URLを開いてみて失敗を処理する) |
UIApplication.hにAPI_DEPRECATED("Prefer attempting to open URLs and handling any failures", ios(3.0, 27.0), visionos(1.0, 27.0), tvos(9.0, 27.0))。置き換えのパターンはcanOpenURLの記事にあります |
「On Demand Resources and the NSBundleResourceRequest API are deprecated. Use Background Assets instead.」(On Demand ResourcesとNSBundleResourceRequest APIは非推奨。代わりにBackground Assetsを使う) |
クラス本体、preservation priorityのメソッド群、通知と優先度の定数にAPI_DEPRECATED("Use Background Assets instead.", ios(9.0, 27.0), watchos(2.0, 27.0), tvos(9.0, 27.0))。ODRの記事では移行コストを見積もっており、そのFAQの「得られるのはコンパイラの警告」という項には、次の節で述べるデプロイメントターゲットの但し書きが付いています |
「The originalFilename property on PHAssetResource is incorrectly marked as non-nullable, which misrepresents the property value; a new, nullable filename property is available as a replacement.」(PHAssetResourceのoriginalFilenameは誤ってnon-nullableとされており、値を正しく表していない。代替としてnullableな新プロパティfilenameが使える) |
originalFilenameはAPI_DEPRECATED("Use filename instead", ios(9, 27), macos(10.15, 27), tvos(10, 27), visionos(1, 27))。filenameはnullableかつAPI_AVAILABLE(macos(27), ios(27), tvos(27), visionos(27)) |
旧来のMetricKit API、MXMetricManager、MXMetricManagerSubscriber、MXMetricPayload、MXDiagnosticPayloadは「are no longer recommended for new adoption. Use MetricManager instead.」(新規採用はもう推奨されない。代わりにMetricManagerを使う) |
MXMetricManagerにAPI_DEPRECATED("Use MetricManager instead.", ios(13.0, API_TO_BE_DEPRECATED), macos(12.0, API_TO_BE_DEPRECATED))。バージョンのないソフトな非推奨なので、今日のところ警告は出ません。Appleのクラスリファレンスページは全プラットフォームで27.0に非推奨と記載しており、ドキュメントとヘッダは食い違っています。私のMetricKitの記事はそのページのバージョンをそのまま書いていたため、この食い違いについて日付入りの注記を付けました6 |
ScrollHitchTimeMetricとscrollHitchTime(_:)は「are no longer part of the new Swift MetricKit API」(新しいSwift MetricKit APIの一部ではなくなった) |
MetricKit.swiftmodule内にどちらの名前も0回。非推奨ではなく削除です |
「The FileDocument protocol is deprecated. Use ReadableDocument for read-only documents or Document for documents that support reading and writing.」(FileDocumentプロトコルは非推奨。読み取り専用ならReadableDocument、読み書き両対応ならDocumentを使う) |
FileDocumentはdeprecated: 100000.0, message: "Conform your type to Document instead."、ReferenceFileDocumentは"Use Document protocol instead."。どちらもソフトで、Documentは@available(iOS 27.0, macOS 27.0, visionOS 27.0, *)なので、置き換え先には27の下限が必要です |
「The calendar.deleteEvents schema has been renamed to calendar.deleteEvent.」(calendar.deleteEventsスキーマはcalendar.deleteEventに改名された) |
AppIntents.swiftmodule内にdeleteEventsは0回。deleteEvent: some AppSchemaIntentはあります。エイリアスのない改名なので、旧名を使っている人にはコンパイルエラーです |
「__PKStrokeRenderState has been renamed to PKStrokeRenderStateReference, with PKStrokeRenderStateReference.init(…) replacing PKStrokeRenderState.asObjCRenderState().」(__PKStrokeRenderStateはPKStrokeRenderStateReferenceに改名され、PKStrokeRenderState.asObjCRenderState()はPKStrokeRenderStateReference.init(…)に置き換わった) |
PKStrokeRenderState.hはAPI_AVAILABLE(ios(27.0), macos(27.0), visionos(27.0))の下で@interface PKStrokeRenderStateをNS_SWIFT_NAME(PKStrokeRenderStateReference)付きで宣言しています。SwiftインターフェースにはasObjCRenderStateがまったくありません。Appleが挙げる置き換え先は参照クラスのinit(_ swiftValue: PKStroke.RenderState)なので、新しい呼び出しの形はPKStrokeRenderStateReference(state)で、旧来の呼び出しはコンパイルに失敗します |
| 「Apps built with the latest SDK must adopt the scene-based life cycle or they fail to launch.」(最新SDKでビルドしたアプリはシーンベースのライフサイクルを採用しなければ起動に失敗する) | アノテーションではなく、起動失敗です。シーン義務化の記事を参照してください |
| 「AirPort Utility will no longer be available for new downloads from the App Store.」(AirPortユーティリティはApp Storeから新規ダウンロードできなくなる)再ダウンロードは引き続き可能。iOS 27では「functionality is not guaranteed」(機能は保証されない) | APIではなく、アプリです |
| 「Weather Highlights is currently only available in US English.」(Weather Highlightsは現在、米国英語でのみ利用可能) | AppleはこれをDeprecationsに分類していますが、読めば提供状況の注記です |
Deprecationsの見出しの外にも、ソフトな非推奨が1つと改名が1つあります。テキストフィールドスタイル.roundedBorderには、SwiftUIインターフェース内にdeprecated: 100000.0のアノテーションが付いており、そのメッセージは内側のバッククォートを除くと「Use textFieldStyle(.bordered) with textInputBorderShape(.roundedRectangle)」(textInputBorderShape(.roundedRectangle)と組み合わせてtextFieldStyle(.bordered)を使う)と読めます。これはTextInputBorderShapeを導入する新機能のエントリと対応しています。100000.0というバージョンは、Appleの「非推奨だが、まだ先」を表す慣習で、デフォルトのコンパイラ設定ではコンパイラは沈黙し、メッセージはインターフェース内にしか現れません。改名のほうは手強いです。UINavigationItem.navigationBarMinimizationは「replaces UINavigationItem.barMinimizeBehavior and UINavigationItem.barMinimizationSafeAreaAdjustment」(UINavigationItem.barMinimizeBehaviorとUINavigationItem.barMinimizationSafeAreaAdjustmentを置き換える)とあり、SwiftUIのtoolbarMinimizationBehaviorも同じ形でtoolbarMinimizeBehaviorを置き換えます。この3つの旧名はどれも、27.0 SDKのUIKitヘッダにもUIKitとSwiftUIのSwiftインターフェースにも現れません。したがって、これらに依存するコードは警告ではなくコンパイル失敗になります。deleteEventsと同じ部類です。24
ハードな非推奨も、見かけより静かです。コンパイラは非推奨バージョンをSDKではなくデプロイメントターゲットと比較するので、ios(3.0, 27.0)が警告を出すのは最小iOSが27.0のターゲットだけです。canOpenURLを呼び、NSBundleResourceRequestを作り、originalFilenameを読む1つのファイルを27 SDKに対して3回コンパイルしました。-target arm64-apple-ios17.0-simulatorと26.0では診断なしでコンパイルが通り、27.0では3つの警告、'canOpenURL' was deprecated in iOS 27.0: Prefer attempting to open URLs and handling any failures、'NSBundleResourceRequest' was deprecated in iOS 27.0: Use Background Assets instead.、'originalFilename' was deprecated in iOS 27: Use filename insteadが出ました。4 現実的な下限バージョンを持つアプリは、このどれについてもコンパイラから知らされることはありません。デフォルトのコンパイラ設定では、後述のチェックリストにあるgrepだけが唯一の通知です。
私が検証した修正はどれか?
Foundationの2つのエントリは、読むだけでなく実際に走らせて確かめられます。1つ目は修正済みとして掲載されています。「+[NSURL URLWithString:] no longer double-encodes the % of valid percent-escape sequences when encoding other invalid characters.」(+[NSURL URLWithString:]は、他の不正な文字をエンコードする際に、正当なパーセントエスケープの%を二重エンコードしなくなった)2 プローブは、正当なエスケープ1つとNSURLがエスケープしなければならない文字1つをそれぞれ含む3つの文字列からNSURL(string:)を作り、absoluteStringを出力します。Xcode 27で2回ビルドしました。1回はMac向け、もう1回は最小iOS 26.0のシミュレータ向けで、そのシミュレータバイナリ1つを、手を加えずにiOS 26.5ランタイムとiOS 27.0ランタイムの両方で実行しました。4
| 入力 | macOS 26.6.2、およびiOS 26.5上のシミュレータバイナリ(同一) | 同じシミュレータバイナリをiOS 27.0(24A434)で実行 |
|---|---|---|
https://example.com/a%20b c |
https://example.com/a%2520b%20c |
https://example.com/a%20b%20c |
https://example.com/search?q=caf%C3%A9 au lait |
https://example.com/search?q=caf%25C3%25A9%20au%20lait |
https://example.com/search?q=caf%C3%A9%20au%20lait |
https://example.com/p%20q{r |
https://example.com/p%2520q%7Br |
https://example.com/p%20q%7Br |
最初の列が旧来の挙動です。NSURLはスペースをエスケープすると同時に、すでに正当だったエスケープの%まで%25に変えてしまうため、パスはエスケープが指していたものとは別物になります。iOS 27.0の列が修正後です。LC_BUILD_VERSIONがminos 26.0とsdk 27.0を示す1つのMach-Oが両方のシミュレータ列を生み出したので、結果を決めるのはコードが動くOSであって、コンパイルに使うSDKでもビルドターゲットでもありません。今日ビルドしたアプリは、私がテストしたiOS 26.5ランタイム上では旧来のエンコードのままで、他の26.xリリースで違う結果になると期待する根拠はリリースノートにありません。
2つ目は新機能として掲載されていますが、私がコードを走らせられる場所では再現できませんでした。「volumeAvailableCapacityKey is truncated to 3 significant decimal digits at the block count level (e.g., 123,456,789 blocks becomes 123,000,000 blocks).」(volumeAvailableCapacityKeyはブロック数の段階で有効数字3桁に切り詰められる。たとえば123,456,789ブロックは123,000,000ブロックになる)2 iOS 27.0シミュレータでは、URL.resourceValues(forKeys: [.volumeAvailableCapacityKey])は226,009,026,560バイトを返し、同じパスに対するstatfsはf_bsize 4,096でf_bavail 55,177,985を返しました。掛け合わせると正確に同じ値です。有効数字3桁のブロック数なら55,100,000ブロック、つまり225,689,600,000バイトになっていたはずです。4 ホストのMacは同じコードで55,177,998ブロックを報告しました。私の読みでは、この切り詰めはFoundationではなくデバイスのカーネル側にあり、Macのカーネルに対してMacのボリュームを問い合わせるシミュレータでは現れようがありません。実機ではこのプローブを走らせていないので、このエントリは誤りではなく未検証として扱い、これまで正確だった空き容量のデバイス報告に丸めが現れることを見込んでおいてください。
新機能のうち、既存コードに影響するものは?
HealthKitの限定履歴。 ノートは1行、「Updated HealthKit permissions flow now lets users grant apps access to limited history or full history」(更新されたHealthKitの権限フローでは、ユーザーがアプリに限定的な履歴か全履歴かを選んで許可できる)だけで、その帰結はAPIリファレンスのほうに書かれています。25 データ種別の画面の後に、「a second screen prompts them to choose how much historical data to grant your app, either a recent limited window or their full history」(2つ目の画面で、直近の限定的な期間か全履歴か、どれだけの履歴データをアプリに許可するかを選ばせる)とあり、「Time-bound authorization applies only to sample types」(期間限定の認可はサンプル型にのみ適用される)とされています。5 iOS 27.0とwatchOS 27.0から使える新しいearliestAuthorizedSampleDate(for:)は、HKObjectTypeから読み取り可能な最古の日付への辞書を返しますが、その境界は直感とは違う場所にあります。「HealthKit evaluates the boundary against a sample’s end date, so the framework might service your query with a sample that begins before the earliest authorization date as long as the sample ends after it.」(HealthKitは境界をサンプルの終了日時で評価するため、最古の認可日より前に始まるサンプルでも、終了がそれより後なら、クエリの結果に含まれることがある)45 プライバシーの原則は変わりません。「Your app can’t distinguish between denied and full access; limited authorization is the only state your app can identify, by design.」(アプリは拒否と完全許可を区別できず、識別できる状態は限定的な認可だけであり、これは設計上の意図である)5 Appleのガイダンスは、返された日付より前をすべて「存在しない」ではなく「不明」として扱い、クエリごとの開始日を型ごとにクランプすることです。HealthKitから計算するトレンド、ベースライン、連続記録はどれも、ユーザーが選んだ期間の上で正しくなければなりません。HealthKitの記事は6月の追加分を扱っており、この権限モデルの変更は扱っていません。
StoreKitのオファーコード。 「Offer code redemption APIs now return a VerificationResult when redemption completes. If a redemption succeeds, your app receives a VerificationResult that contains a Transaction object. If a redemption fails, your app receives an error that describes what caused the redemption to fail.」(オファーコードの引き換えAPIは完了時にVerificationResultを返す。成功すればTransactionを含むVerificationResultを、失敗すれば原因を示すエラーを受け取る)2 インターフェース上では、presentOfferCodeRedeemSheet(in:)は27.0で非推奨となり、メッセージは「Use presentOfferCodeRedeemSheet(from:options:) instead.」(代わりにpresentOfferCodeRedeemSheet(from:options:)を使う)です。置き換え先はpresentOfferCodeRedeemSheet(from viewController: UIViewController, options: Set<RedeemOption> = []) async throws -> VerificationResult<Transaction>で、iOS 27.0から使えます。4 シートを表示してからTransaction.updatesで結果を待っていたコードは、今後はawaitで受け取れます。
バックグラウンドでのCore AI。 「The system now restricts background access to the Neural Engine, similar to GPU usage restrictions」(システムはGPUの利用制限と同様に、Neural Engineへのバックグラウンドアクセスを制限する)、そして「Neural Engine memory usage is now attributed to your app process instead of the system, and appears in the Allocations instrument」(Neural Engineのメモリ使用量はシステムではなくアプリのプロセスに計上され、Allocationsインストゥルメントに表示される)とあります。バックグラウンドアクセスには「requires the new entitlement: “com.apple.developer.background-tasks.continued-processing.inference”」(新しいエンタイトルメントが必要)です。2 26でバックグラウンドタスクから推論を走らせ、何も申請していなかったアプリは、このエンタイトルメントを持つまでNeural Engineが閉ざされ、使っていたNeural Engineのメモリは今後Allocationsで自身のプロセスの下に現れます。
Background Assets。 「You can reduce your app’s storage usage with localized asset packs. The system delivers the appropriately localized asset packs based on the user’s preferred languages.」(ローカライズされたアセットパックでアプリのストレージ使用量を減らせる。システムはユーザーの優先言語に基づいて適切にローカライズされたパックを配信する)2 On Demand Resourcesから離れるアプリにとって、ローカライズされたパックは言語ごとのタグを置き換える機能です。
重要な通知。 重要な通知(Critical Alerts)の挙動は修正済みとして掲載されています。「Critical alerts are automatically turned on for any apps that request your permission to enable notifications.」(通知の許可を求めるアプリでは、重要な通知が自動的にオンになる)2 エントリはそれ以上何も言っていないので、ベータで権限が過剰に見えた通知フローはすべて再テストしてください。
メニュー、@State、TLS、そして新しいスライス。 4つのエントリにはそれぞれ独立した記事があります。iPadOS 27とmacOS 27のメニューバーとコンテキストメニューは「present a reduced set of menu item images」(メニュー項目の画像を絞って表示する)ようになり、上書きにはUIMenuElementのpreferredImageVisibilityを使います。メニュー画像の記事を参照してください。@Stateマクロの書き直しはこのノートのSwiftUIのエントリで、Xcode 27で何がコンパイルできるかを変えます。再現はXcode 27の記事、監査は@Stateマクロの記事にあります。MDM、登録、ソフトウェアアップデートのトラフィックに対する厳格なTLS要件は「in 27.0 operating systems」(27.0のOSで)始まります。TLS監査を参照してください。そしてCPA2を伴うarm64e.x1は「iPhone models with A20 Pro or later chips, Mac computers with M6 or later chips, and Apple Watch models with S11 or later chips」(A20 Pro以降のiPhone、M6以降のMac、S11以降のApple Watch)が対象です。arm64e.x1を参照してください。2
grepする価値のある小さなもの。 SystemにはSwiftのstat、lstat、fstat、fstatatがStat型とFilePath.stat()とともに加わり、ノートはこれらのメソッドと自作の拡張にある修飾なしのstat()との衝突を修正済みとして挙げています。NSTextTableは「and its related objects and types are available to UIKit clients starting with OS 27 releases」(および関連するオブジェクトと型が、OS 27リリースからUIKitクライアントで使える)とあります。AsyncImageは「now automatically caches downloaded images using HTTP caching protocols」(HTTPキャッシュプロトコルを使ってダウンロード画像を自動的にキャッシュする)ようになり、制御用にURLRequestのイニシャライザとView.asyncImageURLSession(_:)が用意されました。「When linked on iOS 27, tvOS 27, macCatalyst 27, or visionOS 27 SDKs」(iOS 27、tvOS 27、macCatalyst 27、visionOS 27のSDKにリンクした場合)、UIScene.extendStateRestorationとUIScene.completeStateRestorationが状態復元をバックグラウンドからフォアグラウンドへの遷移まで延長します。そしてSwiftDataには「a deadlock for @Query when saving a ModelContext on a background actor while scheduling new async tasks for a ModelActor」(ModelActor向けの新しい非同期タスクをスケジュールしながらバックグラウンドアクターでModelContextを保存したときの@Queryのデッドロック)の修正が挙げられています。2
計画に織り込むべき既知の問題
photos.assetエンティティがコンパイルできなくなる。 「Existing entities that conformed to @AppEntity(schema: .photos.asset) in prior releases might no longer compile in the 27 SDKs because new properties were added to the schema in this release.」(以前のリリースで@AppEntity(schema: .photos.asset)に準拠していた既存エンティティは、このリリースでスキーマに新しいプロパティが追加されたため、27 SDKではコンパイルできないことがある)回避策は「To continue conforming to the schema, adopt the additional properties and move the code behind an availability check.」(スキーマへの準拠を続けるには、追加されたプロパティを採用し、コードを可用性チェックの背後に移す)です。2 どのプロパティかはマクロが教えてくれません。空の@AppEntity(schema: .photos.asset)準拠はswiftcでは警告なしにコンパイルされ、その展開はスキーマ名を持つAssistantSchemaEntity準拠を加えるだけです。一覧が出てくるのはXcodeのApp Intentsメタデータ処理ステップ、appintentsmetadataprocessorで、欠けているプロパティ1つにつき1つのエラーでビルドを失敗させます。その空の準拠に対して27.0 SDKで手動実行すると12件が報告され、それぞれにfix-itが付きます。hasSuggestedEdits: Bool、isFavorite: Bool、isHidden: Bool、creationDate: Date?、location: GeoToolbox.PlaceDescriptor?、assetType: <#PhotoAssetType#>?、filter: <#PhotoFilterEffectType#>?、exposure: Double?、saturation: Double?、warmth: Double?、aperture: Double?、isPortraitModeEnabled: Bool?です。2つの<#…#>プレースホルダは、.photos.assetTypeと.photos.filterTypeの列挙スキーマに対して自分で宣言する列挙型を表し、インターフェースはそれらをPhotoAssetTypeとPhotoFilterEffectTypeと名付けています。このMacにあるXcodeは27A266aだけなので、この一覧を26 SDKと差分比較することはできませんでした。4- Now Playingのトークンがproductionに向く。 「
RemoteMediaSessionandRemoteMediaSessionRepresentablealways provision Now Playing start and update push tokens for theproductionAPNs environment, even if theaps-environmentconfiguration is set todevelopment.」(RemoteMediaSessionとRemoteMediaSessionRepresentableは、aps-environmentがdevelopmentに設定されていても、Now Playingの開始・更新プッシュトークンを常にproductionAPNs環境向けに発行する)回避策は「Use theproductionenvironment for testing and validation.」(テストと検証にはproduction環境を使う)です。2 このクラスは新しいNowPlayingフレームワークにあり、macOSとvisionOSでは利用不可とマークされています。4 SpotlightSearchToolがオンデバイスモデルを溢れさせる。 設定なしでは、「the tool’s description and parameter schema alone exceed the on-device model’s context window before any prompt is added」(ツールの説明とパラメータスキーマだけで、プロンプトを加える前にオンデバイスモデルのコンテキストウィンドウを超えてしまう)とあります。回避策は絞り込んだガイド、「.focused(.communications),.focused(.calendar),.focused(.documents),.focused(.visualMedia), or.focused(.audio)」です。2 このAPIは実在します。SpotlightSearchTool.Guide.focused(_ domain: ContentDomain = .items)が、_CoreSpotlight_FoundationModelsインターフェース内で.completeと.dynamic(_:)の隣に並んでいます。4 私のオンデバイスAIの記事ではこのツールを扱っていますが、6月時点の採用手順はデフォルト設定とシステムモデルを組み合わせていたので、日付入りの訂正を付けています。- コントロールセンターからのパフォーマンストレース。 「Gathering
PowerProfilerandLookbacktraces through thePerformance TraceControl Center widget might fail to produce traces.」(Performance Traceコントロールセンターウィジェット経由でPowerProfilerとLookbackのトレースを収集しても、トレースが生成されないことがある)Appleが示す回避策は「Gather traces on iOS 27.0 beta 1 or earlier」(iOS 27.0 beta 1以前でトレースを収集する)で、すでにアップデートしたデバイスでは、ほとんどのチームにとって取れる手ではありません。2 - StoreKitテスト。 「Changing the storefront or locale using
SKTestSessiondoesn’t propagate throughStorefront.updates」(SKTestSessionでストアフロントやロケールを変更してもStorefront.updatesに伝播しない)、そして「Failed purchases usingSKTestSessionmight display error dialogs even whendialogsDisabledis set to true」(SKTestSessionでの購入失敗時に、dialogsDisabledがtrueでもエラーダイアログが表示されることがある)です。2 - ショートカットと
UnionValue。 「two number-related types (for example, both Int and Double)」(2つの数値関連の型、たとえばIntとDoubleの両方)を持つパラメータでは数値の選択肢が2回表示されます。Appleの回避策は片方だけを宣言することです。2
今週私ならこうする
- Xcode 27で一度アーカイブし、TestFlightに出す前に上記の27リンク時のリストをアプリに当ててください。起動画面のキー、シーンライフサイクル、選択が非表示タブを指しうる
TabView、コントロール修飾子を継承していたシートです。2 - 出荷前にMetricKitのコードをGA SDKでビルドしてください。
ScrollHitchTimeMetricや旧来のratio型をまだ参照しているバイナリは、Appleの説明によれば起動時クラッシュであり、インターフェースはもうその名前をエクスポートしていません。24 canOpenURL、NSBundleResourceRequest、originalFilename、FileDocument、deleteEvents、asObjCRenderState、barMinimizeBehaviorをgrepしてください。最初の3つは27.0デプロイメントターゲットでしか警告が出ず、FileDocumentはソフト、最後の3つはコンパイルに失敗するので、grepが通知の代わりです。4- HealthKitを読むなら、認可後に
earliestAuthorizedSampleDate(for:)を呼び、クエリごとの開始日を型ごとにクランプしてください。そのうえで、ユーザーが選んだ期間の上で連続記録やベースラインが何を意味するのかを決めてください。5 - バグ報告には3か所からビルド番号を記録してください。デバイス上の
ProcessInfo、ビルドマシン上のSDKのSystemVersion.plist、シミュレータ再現用のsimctl list runtimesです。これらは異なり、24A437に入っている修正が24A434には入っていないこともあります。4 NSURL(string:)で文字列からURLを作っているなら、iOS 26でのテストを続けてください。%25の二重エンコードを直すのはリビルドではなくOSで、1つのXcode 27バイナリが26.5ランタイムではそれを出力し、27.0では出力しません。4
よくある質問
iOS 27.0はいつ公開され、ビルド番号は何ですか?
2026年9月14日(月)、ビルド24A437です。Appleが9月11日(金)にリリース候補として配布したものと同じビルドです。iPadOS 27.0も同じ番号を共有します。1
Xcode 27のSDKに入っているiOS 27.0のビルドはどれですか?
Xcode 27(27A266a)内のiPhoneOS 27.0 SDKはProductBuildVersionとして24A430を報告し、iOS 27.0シミュレータランタイムは24A434を報告します。どちらもデバイスビルドではありません。4
iOS 27で非推奨になったものは何ですか?
ノートには11件が並びます。canOpenURL:、On Demand ResourcesとNSBundleResourceRequest、PHAssetResource.originalFilename、旧来のMetricKit API、ScrollHitchTimeMetric、FileDocument、calendar.deleteEventsスキーマ、__PKStrokeRenderState、UIKitのシーンライフサイクル義務化、AirPortユーティリティ、Weather Highlightsの言語に関する注記です。3件はSDK内にハードな27.0の非推奨バージョンを持ち、27.0デプロイメントターゲットでのみ警告を出します。2件はソフト、2件は改名、1件は削除、3件はAPIの変更ではありません。24
iOS 27向けにアプリをリビルドする必要はありますか?
動かし続けるだけなら不要で、エントリは3通りに分かれます。SDKでゲートされるもの:上記の27リンク時の12カテゴリで、27.0 SDKでビルドするまで何も変わりません。OSレベルで27.0デバイス上のすべてのバイナリに及ぶもの:Neural Engineのバックグラウンド制限とそのエンタイトルメント、HealthKitの限定履歴の権限フロー、MDMとアップデートのトラフィックへのTLS強制、iPadOS 27のメニュー画像の変更、重要な通知の修正、NSURLエンコードの修正です。ベータバイナリ:ベータSDKに対してビルドしたMetricKitのコードで、クラッシュを避けるためにGA SDKで再コンパイルするようAppleが求めています。AppleのApp Store向けSDKの最低要件は2026年4月28日以降26 SDKであり、27 SDKの要件はこのノートでは定められていない、後日の締め切りです。23
iOS 27のリリースノートはどこにありますか?
Appleの開発者ドキュメントサイトのiOS & iPadOS Release Notesの下に、27.0向けのページが1つあり、領域ごとにNew Features、Resolved Issues、Known Issues、Deprecationsが並んでいます。この記事の件数は、2026年9月15日に取得したそのページから数えたものです。2
NSURLの修正はSDK側ですか、OS側ですか?
OS側です。Xcode 27で27.0 SDKに対し最小iOS 26.0でビルドした1つのシミュレータバイナリが、iOS 26.5ランタイムでは二重エンコードし、iOS 27.0ランタイムではしません。macOS 26.6.2上のMacビルドも二重エンコードします。2回のシミュレータ実行の間で変わったのはOSだけです。4
出典
-
Apple、Releases、2026年9月15日に取得したRSSフィード。2026年9月14日(月)付けで「iOS 27.0 (24A437)」「iPadOS 27.0 (24A437)」「macOS 27.0 (26A428)」「Xcode 27 (27A266a)」「tvOS 27.0 (24J361)」「visionOS 27.0 (24M362)」「watchOS 27.0 (24R364)」、2026年9月11日(金)付けで「iOS 27.0 RC (24A437)」、2026年6月8日(月)付けで「iOS 27.0 beta (24A5355q)」。 ↩↩↩↩↩
-
Apple、iOS & iPadOS 27 Release Notes、GAリリース後の2026年9月15日に取得。件数(93の見出し領域。New Features 65件、Resolved Issues 197件、Known Issues 23件、Deprecations 11件)は各領域の見出し下のリスト項目を数えたものです。引用したエントリをradar番号で示します。Overview段落。UIKit、New Features(起動画面 168247372、表示されたView Controller 170005251、スコープバー 173860616、外部ディスプレイ 177015874、状態復元 161843040、メニュー画像と
preferredImageVisibility170479084、navigationBarMinimization177953926)、Resolved Issues(ステータスバーアクセサ 162044221、リサイズ 166422120、178555304、178558224、178558897、178559386、178560235、178561952、178562971、178573319)、Deprecations(シーンライフサイクル 141837548、canOpenURL:179874781)。SwiftUI、New Features(TabView164516837、選択可能なText79770704、選択可能なText上のTextRenderer158160386、.sceneAccessory175548901、AsyncImage78212597、@State105893279、メニュー画像 170480710、TextInputBorderShape173362083、toolbarMinimizationBehavior177954148)、Resolved Issues(シートとポップオーバー 167448274、containerRelativeFrame165913417、ステータスバータップ後のscrollPosition111501113、FB12477370)、New Features(Menu内のLabeledContent175594929)、Deprecations(FileDocument178776840)。MetricKit、New Features(HitchTimeRatio180024784)とDeprecations(174892111、180455992)。Foundation、New Features(volumeAvailableCapacityKey75545872)とResolved Issues(NSURL161588649、FB20439045)。App Intents、Known Issues(photos.asset181800016、FB23652582)とDeprecations(calendar.deleteEvent176751155)。On Demand Resources、Deprecations(170066290)。PhotoKit、Deprecations(175412725、FB22589474)。PencilKit、Deprecations(176410709)。AirPort Utility、Deprecations(158364073)。Weather Highlights、Deprecations(164408676)。HealthKit、New Features(172310874)。StoreKit、New Features(141012819)。Core AI、New Features(174796039、179282606)。Background Assets、New Features(163944365)。Notifications、Resolved Issues(179179362)。Network Security、New Features(176055825)。Hardware Security、New Features(152103975)。System、New Features(160612181)とResolved Issues(177911316)。TextKit、New Features(159870239)。SwiftData、Resolved Issues(178113288)。Now Playing、Known Issues(186036238)。Core Spotlight、Known Issues(183770678)。Control Center、Known Issues(184729556)。StoreKit Testing in Xcode、Known Issues(184155259、184255116)。Shortcuts、Known Issues(168315587)。 ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Apple、App Store Connect release notes、2026年9月15日に取得。2026年9月14日のエントリは表に全文を引用しました。2026年9月9日のエントリがRC SDKでのアップロード受け付けを記録しています。2026年4月28日以降の26 SDK最低要件は、AppleのUpcoming requirementsページによります。 ↩↩↩↩
-
筆者による再現。
DEVELOPER_DIRをXcode 27.0(27A266a)に向け、macOS 26.6.2(25G83)上で2026年9月15日に実施。ビルド番号:iPhoneOS.sdk/System/Library/CoreServices/SystemVersion.plistのProductBuildVersionは24A430、ProductVersionは27.0。xcrun simctl list runtimesは「iOS 27.0 (27.0 - 24A434)」と表示。ヘッダとインターフェースはすべてiPhoneOS.sdk/System/Library/Frameworks配下:UIKit.framework/Headers/UIApplication.hの98行目(canOpenURL:)。Foundation.framework/Headers/NSBundle.hの721行目から796行目(NSBundleResourceRequest)。Photos.framework/Headers/PHAssetResource.hの29行目と33行目。MetricKit.framework/Headers/MXMetricManager.hの32行目。MetricKit.framework/Modules/MetricKit.swiftmodule/arm64e-apple-ios.swiftinterfaceはScrollHitchTimeMetricとscrollHitchTimeが0件、HitchTimeRatioが4件。SwiftUI.framework/Modules/SwiftUI.swiftmodule/arm64e-apple-ios.swiftinterfaceの23088行目から23093行目(FileDocument)、9334行目から9338行目(ReferenceFileDocument)、1728行目から1731行目(Document)、9489行目(.roundedBorderのメッセージ)、13763行目(toolbarMinimizationBehavior)。UIKit.framework/Headers、UIKit.framework/Modules、SwiftUI.framework/Modulesを通して、barMinimizeBehavior、barMinimizationSafeAreaAdjustment、toolbarMinimizeBehaviorの識別子全体一致は0件(部分文字列として引っかかるのはtoolbarMinimizationSafeAreaAdjustment修飾子とそのToolbarMinimizationSafeAreaAdjustment型だけ)で、一方UINavigationItem.hはnavigationBarMinimizationを宣言。AppIntents.framework/Modules/AppIntents.swiftmodule/arm64e-apple-ios.swiftinterfaceはdeleteEventsが0件、deleteEvent: some AppIntents::AppSchemaIntentが12608行目。PencilKit.framework/Headers/PKStrokeRenderState.hの15行目から17行目、およびPencilKit.framework/Modules/PencilKit.swiftmodule/arm64e-apple-ios.swiftinterfaceはasObjCが0件で、PKStrokeRenderStateReference上のconvenience public init(_ swiftValue: PencilKit::PKStroke.PencilKit::RenderState)が46行目、逆方向のpublic init(_ objcValue: PencilKit::PKStrokeRenderStateReference)がPKStroke.RenderState内の38行目。StoreKit.framework/Modules/StoreKit.swiftmodule/arm64e-apple-ios.swiftinterfaceの311行目から322行目。HealthKit.framework/Modules/HealthKit.swiftmodule/arm64e-apple-ios.swiftinterfaceの741行目と742行目(earliestAuthorizedSampleDate(for:)、@available(iOS 27.0, watchOS 27.0, macCatalyst 27.0, macOS 27.0, visionOS 27.0, *))。NowPlaying.framework/Modules/NowPlaying.swiftmodule/arm64e-apple-ios.swiftinterfaceの180行目から182行目と276行目から278行目。_CoreSpotlight_FoundationModels.framework/Modules/_CoreSpotlight_FoundationModels.swiftmodule/arm64e-apple-ios.swiftinterfaceの64行目から78行目と100行目から129行目。photos.assetプローブ:AppIntentsとCoreLocationをインポートし、EntityQuery、id、displayRepresentationを持ちスキーマプロパティを持たない@AppEntity(schema: .photos.asset) struct ProbeAssetを宣言する15行のSwiftファイル。swiftc -c -target arm64-apple-ios27.0-simulatorは終了コード0、診断なしでコンパイルし、-Xfrontend -dump-macro-expansionsは、マクロが@available(iOS 27.0, macOS 27.0, tvOS 27.0, watchOS 27.0, visionOS 27.0, *)属性の下にextension ProbeAsset: AssistantSchemaEntity { static let __appSchemaEntity = "photos.asset" }と空のAppEntity拡張を追加することを示しました。ドライバ自身のswift-frontend行(swiftc -###で取得)を、-emit-const-values-pathと、私が書いた18プロトコルの一覧(AppIntent、AppEntity、AppEnum、AssistantSchemaEntity、EntityQuery、その他のApp Intentsプロトコル)を指す-const-gather-protocols-file付きで再実行すると.swiftconstvaluesファイルが生成され、それに対するappintentsmetadataprocessor --module-name ProbeMod --sdk-root <iPhoneSimulator27.0.sdk> --xcode-version 27A266a --platform-family iOS --deployment-target 27.0 --target-triple arm64-apple-ios27.0-simulatorは「At least one halting error was produced during export」とともに終了コード255で終わり、「error: Missing required property ‘exposure’ from AppSchemaEntity ‘photos.asset’」の形の行が12行、それぞれに「var exposure: Double?」のようなfix-itが続きました(assetTypeとfilterのfix-itは<#PhotoAssetType#>?と<#PhotoFilterEffectType#>?のプレースホルダを含みます。AppIntents.framework/Modules/AppIntents.swiftmodule/arm64e-apple-ios.swiftinterfaceは11695行目と11705行目で、assetTypeの下にAppSchema.Enum("PhotoAssetType")、filterTypeの下にAppSchema.Enum("PhotoFilterEffectType")としてこれらの名前を宣言しています)。この実行はXcodeのメタデータステップを模したものですが、ビルドシステムのものとバイト単位で同一ではなく、ビルドシステムのプロトコル一覧はSWIFT_EMIT_CONST_VALUE_PROTOCOLSから来ます。非推奨警告のプローブ:UIKit、Foundation、Photosをインポートし、canOpenURL(_:)を呼び、NSBundleResourceRequest(tags:)を構築し、PHAssetResource.originalFilenameを読む11行のSwiftファイルを、iPhoneSimulator 27.0 SDKに対してswiftc -cで-target arm64-apple-ios17.0-simulator、ios26.0、ios27.0の3通りでコンパイル。17.0と26.0では診断0件、27.0では本文に引用した3件の[#DeprecatedDeclaration]警告。NSURLプローブ:表の3つの入力についてNSURL(string:)?.absoluteStringを出力する16行のSwiftファイルを、ホスト向けにswiftc -Oで、また一度だけiPhoneSimulator 27.0 SDKに対してswiftc -O -target arm64-apple-ios26.0-simulatorでコンパイル(結果へのotool -lはminos 26.0とsdk 27.0を持つLC_BUILD_VERSIONを示します)。その単一のシミュレータバイナリを、iOS 26.5(23F77)ランタイムで起動したシミュレータ上、次にiOS 27.0(24A434)ランタイムで起動したiPhone 18 Proシミュレータ上でxcrun simctl spawnにより実行。macOSとiOS 26.5の出力は同一で、すべての出力は表のとおりです。容量プローブ:URL(fileURLWithPath: NSHomeDirectory()).resourceValues(forKeys: [.volumeAvailableCapacityKey, .volumeTotalCapacityKey, .volumeAvailableCapacityForImportantUsageKey])とstatfs。シミュレータでの実行はvolumeAvailableCapacity = 226009026560、f_bavail = 55177985、f_bsize = 4096を出力し、ホストでの実行はvolumeAvailableCapacity = 226009079808、f_bavail = 55177998を出力しました。 ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Apple、HealthKitドキュメント、earliestAuthorizedSampleDate(for:)およびAuthorizing access to health data、2026年9月15日に取得。メソッドのページは可用性としてiOS 27.0、iPadOS 27.0、Mac Catalyst 27.0、macOS 27.0、visionOS 27.0、watchOS 27.0を挙げており、終了日時に関する文と「Your app can’t distinguish between denied and full access; limited authorization is the only state your app can identify, by design.」の出典です。ガイドは「people can choose to grant your app access to only a limited window of recent data rather than their full history」、2つ目の画面に関する文、および「Time-bound authorization applies only to sample types.」の出典です。 ↩↩↩↩↩
-
Apple、MXMetricManager、MetricKitクラスリファレンス、2026年9月15日にAppleのドキュメントJSON経由で取得。可用性としてiOS 13.0、iPadOS 13.0、Mac Catalyst 13.1、macOS 12.0、visionOS 1.0を挙げ、それぞれに
deprecatedAt27.0が付いており、非推奨の要約は「Use MetricManager instead.」です。 ↩