← Alle Beiträge

Release Notes zu iOS 27.0: Deprecations, Breaking Changes und Fixes

iOS 27.0 und iPadOS 27.0 sind am Montag, dem 14. September 2026, als Build 24A437 erschienen, demselben Build, den Apple am 11. September als RC veröffentlicht hatte; das SDK in Xcode 27 (27A266a) kam am selben Tag, und App Store Connect nimmt seit demselben Datum Builds mit den 27.0-GA-SDKs an.13 Drei Build-Nummern beantworten jetzt die Frage „welches iOS 27.0?“: Das Gerät läuft mit 24A437, das SDK in Xcode 27 meldet sich als 24A430, und die Simulator-Runtime ist 24A434.4 Die Notes umfassen 93 Bereiche mit 65 neuen Funktionen, 197 behobenen Problemen, 23 bekannten Problemen und 11 Deprecations; für bestehenden Code zählen vor allem die Änderungen, die in dem Moment greifen, in dem Sie mit dem 27.0 SDK bauen, die Deprecations, die die Header des SDKs selbst bestätigen, und ein Foundation-Fix, den eine einzige Binärdatei auf einer iOS-26.5- und einer iOS-27.0-Runtime reproduziert.24 {.answer-block}

Das Wichtigste in Kürze

  • Builds. Gerät 24A437, SDK 24A430, Simulator-Runtime 24A434; RC und GA teilen sich den Geräte-Build, und die SDK-Nummer ist nicht die Gerätenummer, was zählt, sobald ein Bug-Report nach einer fragt.14
  • Linked-on-27-Verhalten. 12 Kategorien von Änderungen, insgesamt 23 Einträge, verändern das Verhalten einer App in dem Moment, in dem Sie sie mit dem 27.0 SDK bauen: die Launch-Screen-Pflicht, die Scene-Lifecycle-Vorgabe, ein TabView, das bei einer versteckten Auswahl abstürzt, Systemtextauswahl auf selektierbarem Text, Trait-Vererbung für präsentierte View Controller, die Inline-Scope-Bar, externe Display-Szenen, die nicht mehr automatisch angeboten werden, in Sheets und Popovers zurückgesetzte Control-Modifier, die Safe-Area-Rechnung von containerRelativeFrame, die Statusleisten-Accessoren, iPad-Resize-Regeln unter UIRequiresFullScreen und zwei kleinere SwiftUI-Verschiebungen bei Menüs und beim Scroll-to-Top.2
  • Neu kompilieren oder abstürzen. HitchTimeMetric.ratio in MetricKit misst jetzt in einer neuen Einheit HitchTimeRatio, und ScrollHitchTimeMetric hat die Swift-API verlassen; Apple rät, mit dem neuesten SDK neu zu kompilieren, um Abstürze beim Start und einen Missing-Symbol-Crash zu vermeiden, und das SDK-Interface bestätigt, dass der Typ weg ist.24
  • 11 Deprecations, größtenteils stumm. canOpenURL: (ios(3.0, 27.0) im Header), On Demand Resources (ios(9.0, 27.0)), PHAssetResource.originalFilename (ios(9, 27)), die ursprünglichen MetricKit-APIs (markiert als API_TO_BE_DEPRECATED, also eine weiche Deprecation), ScrollHitchTimeMetric, FileDocument, calendar.deleteEvents, umbenannt in calendar.deleteEvent, eine PencilKit-Umbenennung, die Scene-Vorgabe, AirPort Utility und ein Sprachhinweis zu Weather Highlights. Die drei harten warnen nur bei einem Deployment-Target von 27.0; bei 17.0 oder 26.0 kompiliert dieselbe Datei ohne Befund.24
  • Zwei Foundation-Änderungen, getestet. +[NSURL URLWithString:] kodiert ein gültiges %20 nicht mehr doppelt, wenn es an anderer Stelle im String ein Leerzeichen escapen muss: Eine einzige Simulator-Binärdatei liefert %2520 auf einer iOS-26.5-Runtime und %20 auf der iOS-27.0-Runtime, und der Mac-Build entspricht der alten Seite, der Fix folgt also dem Betriebssystem, nicht dem SDK. Die Kürzung von volumeAvailableCapacityKey auf drei signifikante Stellen zeigt sich im Simulator nicht, der exakt 55.177.985 Blöcke meldet.24

Welcher Build ist welcher?

Wo Build Beleg
Gerät, iOS 27.0 / iPadOS 27.0 24A437 Releases-Feed, Mon, Sep 14, 2026; „iOS 27.0 RC (24A437)“ am Fri, Sep 111
SDK in Xcode 27 (27A266a) 24A430 iPhoneOS.sdk/System/Library/CoreServices/SystemVersion.plist, ProductBuildVersion4
iOS 27.0 Simulator-Runtime 24A434 xcrun simctl list runtimes gibt „iOS 27.0 (27.0 - 24A434)“ aus4
macOS 27.0 26A428 Releases-Feed, Mon, Sep 141
App Store Connect 27.0-GA-SDKs werden angenommen „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.“ (Apps, die mit Xcode 27 und den 27.0-SDKs gebaut wurden, können jetzt für den App Store und für TestFlight-Tests hochgeladen werden.) 14. September; Uploads mit den RC-SDKs werden seit dem 9. September angenommen3

Die drei Nummern sind kein Versehen. Das SDK ist ein Schnappschuss aus Headern und Interfaces, die Simulator-Runtime ist ein separater Cryptex, den Apple an Xcode ausliefert, und der Geräte-Build ist das, was die Leute tatsächlich ausführen; eine Reproduktion, die „iOS 27.0“ sagt, ohne eine dieser Nummern zu nennen, lässt genau die Zahl weg, die entscheidet, ob ein Fix gegriffen hat.4

Die Notes selbst beginnen mit zwei Sätzen zum Umfang, „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“ (das SDK für iOS und iPadOS 27 dient der App-Entwicklung für iPhone und iPad mit iOS und iPadOS 27 und liegt Xcode 27 aus dem Mac App Store bei), und arbeiten dann 93 Bereiche ab. Zählt man die Listenpunkte unter jeder Überschrift, ergeben sich 65 neue Funktionen, 197 behobene Probleme, 23 bekannte Probleme und 11 Deprecations; allein Siri kommt auf 38 behobene und acht bekannte, SwiftUI auf 23 neue und 13 behobene, UIKit auf neun neue und 13 behobene.2 Der Beitrag zu Xcode 27 behandelt die Toolchain-Seite, der Beitrag, den Sie gerade lesen, die Seite von Betriebssystem und SDK.

Was ändert sich in dem Moment, in dem Sie mit dem 27.0 SDK bauen?

Apple koppelt Verhaltensänderungen an das SDK, gegen das eine App gelinkt ist; für den Build, den Sie bereits ausgeliefert haben, passiert also nichts, und alle greifen beim ersten Archiv aus Xcode 27. Zu jedem Punkt die jeweilige Note im Wortlaut:2

  • Launch Screen. „iOS and iPadOS apps built with the 27.0 SDK or later are required to include a launch screen. Your app’s Info.plist must contain one of the following keys: UILaunchStoryboardName, UILaunchStoryboards, UILaunchScreen, or UILaunchScreens. Apps that don’t include a launch screen are rejected when the App Store begins accepting apps built with the 27.0 SDK.“ (Apps, die mit dem 27.0 SDK oder neuer gebaut sind, brauchen einen Launch Screen; die Info.plist muss einen der vier genannten Schlüssel enthalten, sonst lehnt der App Store die App ab, sobald er Builds mit dem 27.0 SDK annimmt.) App Store Connect nahm App-Store-Uploads mit den 27.0-RC-SDKs ab dem 9. September und mit den GA-SDKs ab dem 14. September an; keiner der beiden Einträge sagt, wann die Ablehnungen begannen, lesen Sie beide also als Upload-Daten, nicht als Stichtag der Durchsetzung.3 Mein Beitrag zum Launch Screen prüft eine generierte plist.
  • Scene-Lifecycle. Unter den UIKit-Deprecations: „Apps built with the latest SDK must adopt the scene-based life cycle or they fail to launch.“ (Apps, die mit dem neuesten SDK gebaut sind, müssen den szenenbasierten Lebenszyklus übernehmen, sonst starten sie nicht.) Der Beitrag zur Scene-Vorgabe enthält die Migration.
  • TabView-Auswahl. „In apps built with the iOS 27.0 and iPadOS 27.0 SDKs, a TabView enforces that its selection is set to a visible tab. TabView might crash when its selection is set to a hidden or otherwise unavailable tab.“ (Ein TabView erzwingt jetzt, dass die Auswahl auf einen sichtbaren Tab zeigt, und kann abstürzen, wenn sie auf einen versteckten oder anderweitig nicht verfügbaren Tab zeigt.) Eine aus UserDefaults wiederhergestellte Auswahl, die einen später versteckten Tab benennt, ist das Muster, nach dem Sie suchen sollten.
  • Selektierbarer Text. „In apps built with the iOS 27.0 and iPadOS 27.0 SDKs, a Text view with .textSelection(.enabled) applied now supports user-interactive selection using the system text selection UI.“ (Eine Text-View mit .textSelection(.enabled) nutzt jetzt die Textauswahl-Oberfläche des Systems.) Apple ergänzt, solche Views „might include additional gestures for system text selection interactions“ (könnten zusätzliche Gesten für die Systemtextauswahl mitbringen) und verweist eigene Gesten auf .highPriorityGesture(); derselbe Build lässt außerdem TextRenderer auf selektierbarem Text funktionieren.
  • Präsentierte 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.“ (Ein präsentierter View Controller erbt seine Trait Collection jetzt entlang der Superview-Kette durch die Zwischen-Views der Präsentation, statt direkt zum Presentation Controller zu springen.) Eigene UIPresentationController-Subklassen, die Traits setzen, sind die Kandidaten für einen erneuten Test.
  • Scope-Bar. „In apps built with the iOS 27.0 SDK, when UISearchController uses 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.“ (Bei zentrierter Suchleiste im UISearchController erscheint die Scope-Bar in derselben Zeile wie das Suchfeld, nicht mehr in einer eigenen Zeile darunter.)
  • Externe Displays. „In apps built with the iOS 27.0 SDK, windowExternalDisplayNonInteractive scenes are no longer offered automatically by the system. Use UIViewController.registerSceneAccessory(_:) with a UISceneAccessory.externalNonInteractive instance to display non-interactive content on external display scenes.“ (Das System bietet windowExternalDisplayNonInteractive-Szenen nicht mehr automatisch an; für nicht interaktive Inhalte auf externen Displays dient UIViewController.registerSceneAccessory(_:) mit einer UISceneAccessory.externalNonInteractive-Instanz.) SwiftUI bekommt dieselbe Tür über .sceneAccessory mit einem ExternalNonInteractiveAccessory.
  • Sheets und Popovers. Als behoben gelistet: „In apps built with the 27.0 SDKs, the controlSize, buttonSizing, buttonRepeatBehavior, menuIndicatorVisibility, and ButtonBorderShape environment values are now reset to their default values in sheets and popovers.“ (Diese Environment-Werte werden in Sheets und Popovers jetzt auf ihre Standardwerte zurückgesetzt.) Hat ein Sheet bisher .controlSize(.large) von seinem Presenter geerbt, tut es das nicht mehr.
  • containerRelativeFrame. Ebenfalls für 27.0-SDK-Builds behoben: Es „incorrectly accounts for safe-area insets on a ScrollView’s non-scrollable axis, causing the calculated scrollable content size to be too small“ (rechnet Safe-Area-Insets auf der nicht scrollbaren Achse eines ScrollView fälschlich ein, sodass die berechnete scrollbare Inhaltsgröße zu klein ausfällt), ein horizontales ScrollView mit containerRelativeFrame(.vertical) ändert also seine Größe.
  • Statusleisten-Accessoren. Für 27.0-SDK-Builds behoben: Die veralteten Statusleisten-Accessoren auf UIApplication, laut Note statusBarFrame, statusBarOrientation, statusBarStyle und isStatusBarHidden, „might return NaN or null values“ (könnten NaN oder Null-Werte zurückgeben).
  • Größenänderung und Ausrichtung auf iPad und bei iPhone-Synchronisierung. Neun behobene UIKit-Probleme beschreiben, was eine App „built with the iOS 27 SDK“ (mit dem iOS 27 SDK gebaut) jetzt sehen sollte, wenn ihre Szene verbunden wird oder der Benutzer ihr Fenster vergrößert oder dreht: UIRequiresFullScreen-Apps bekommen „a discrete change to a new UIScreen with an updated bounds“ (einen diskreten Wechsel zu einem neuen UIScreen mit aktualisierten Bounds) statt fortlaufender Resize-Updates, die Bounds von UIScreen.main „should remain fixed once the screen connects“ (sollten fest bleiben, sobald der Bildschirm verbunden ist), und „supported interface orientations should no longer be a condition for continuous resizability“ (unterstützte Ausrichtungen sollten keine Bedingung mehr für stufenlose Größenänderung sein).
  • Menüs und Scroll-to-Top. Zwei kleinere SwiftUI-Verschiebungen: „In apps built with the 27.0 SDKs, a LabeledContent view used inside a Menu maps its value to the platform menu item’s subtitle“ (ein LabeledContent in einem Menu bildet seinen Wert auf den Untertitel des Plattform-Menüeintrags ab), und, als behoben gelistet, „In apps built with the 2027 SDKs, tapping the status bar to scroll a ScrollView to its top correctly updates a bound scrollPosition“ (ein Tipp auf die Statusleiste, der ein ScrollView nach oben scrollt, aktualisiert jetzt korrekt eine gebundene scrollPosition). Ein Menü-Label, das aus Layout-Gründen einen Wert trug, bekommt jetzt einen Untertitel, und ein scrollPosition-Binding, das nach dem Tipp auf die Statusleiste veraltet las, wird jetzt aktualisiert.

Diese 12 Kategorien decken die Einträge ab, die bestehendes Verhalten ändern. Neue Fähigkeiten hinter derselben SDK-Schwelle, etwa das Protokoll ReadableDocument, das darauf aufbauende Protokoll Document und UIScene.extendStateRestoration, stehen in den späteren Abschnitten; die Kategorie der externen Displays führt die UIKit-Entfernung zusammen mit ihrem SwiftUI-Ersatz auf.

Zwei MetricKit-Einträge gehören hierher, obwohl es bei ihnen ums Neukompilieren geht und nicht ums Linken. „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.“ (Beide Properties verwenden jetzt den neuen Typ HitchTimeRatio, eine Dimension-Subklasse, die Ruckelzeit als Millisekunden pro Sekunde erfasster Dauer ausdrückt; kompilieren Sie mit dem neuesten SDK neu, um die Typänderung zu übernehmen und Abstürze beim Start zu vermeiden.) Und: „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(_:).“ (scrollHitchTime(_:) und ScrollHitchTimeMetric gehören nicht mehr zur neuen Swift-API von MetricKit, und MetricReport-Werte enthalten keine Scroll-Hitch-Einträge mehr; verwenden Sie stattdessen hitchTime(_:) und HitchTimeMetric und kompilieren Sie mit dem neuesten SDK neu, um einen Missing-Symbol-Crash zu vermeiden.)2 Im Swift-Interface von MetricKit im iOS 27 SDK kommen ScrollHitchTimeMetric und scrollHitchTime null Mal vor und HitchTimeRatio vier Mal; eine gegen das Beta-SDK gebaute Binärdatei, die einen der beiden Namen verwendet hat, referenziert also ein Symbol, das das GA-Interface nicht exportiert.4 Mein Beitrag zu MetricKit beschreibt die neue API aus der Juni-Beta.

Welche APIs sind in 27.0 als veraltet markiert?

Die Notes führen 11 Deprecations auf. Eine Deprecation in einer Release Note ist ein Satz; eine Deprecation im SDK ist eine Availability-Annotation, die der Compiler liest, und beide sagen nicht immer dasselbe. Ich habe jeden Eintrag mit den Headern und Swift-Interfaces im iPhoneOS 27.0 SDK von Xcode 27 abgeglichen:24

Eintrag in den Notes Was das SDK sagt
canOpenURL: is deprecated. Attempt to open the URL and handle any failure instead of validating it first.“ (canOpenURL: ist veraltet; öffnen Sie die URL direkt und behandeln Sie Fehler, statt vorher zu prüfen.) 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)) in UIApplication.h; der Beitrag zu canOpenURL enthält das Ersatzmuster
„On Demand Resources and the NSBundleResourceRequest API are deprecated. Use Background Assets instead.“ (On Demand Resources und die NSBundleResourceRequest-API sind veraltet; verwenden Sie stattdessen Background Assets.) API_DEPRECATED("Use Background Assets instead.", ios(9.0, 27.0), watchos(2.0, 27.0), tvos(9.0, 27.0)) auf der Klasse, ihren Preservation-Priority-Methoden und ihren Notification- und Prioritätskonstanten; der Beitrag zu ODR beziffert die Migration, und die FAQ-Antwort „Was Sie bekommen, ist eine Compiler-Warnung“ trägt jetzt die Einschränkung zum Deployment-Target aus dem nächsten Abschnitt
„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.“ (originalFilename auf PHAssetResource ist fälschlich als non-nullable markiert; als Ersatz gibt es die neue, nullable Property filename.) originalFilename ist API_DEPRECATED("Use filename instead", ios(9, 27), macos(10.15, 27), tvos(10, 27), visionos(1, 27)); filename ist nullable und API_AVAILABLE(macos(27), ios(27), tvos(27), visionos(27))
Die ursprünglichen MetricKit-APIs, MXMetricManager, MXMetricManagerSubscriber, MXMetricPayload und MXDiagnosticPayload, „are no longer recommended for new adoption. Use MetricManager instead.“ (werden für neue Projekte nicht mehr empfohlen; verwenden Sie stattdessen MetricManager.) API_DEPRECATED("Use MetricManager instead.", ios(13.0, API_TO_BE_DEPRECATED), macos(12.0, API_TO_BE_DEPRECATED)) auf MXMetricManager: eine weiche Deprecation ohne Version, also heute keine Warnung. Apples Referenzseite zur Klasse führt sie auf jeder Plattform als in 27.0 veraltet, Dokumentation und Header widersprechen sich also; mein Beitrag zu MetricKit hatte die Version der Seite übernommen und trägt jetzt eine datierte Anmerkung zu dieser Abweichung6
ScrollHitchTimeMetric und scrollHitchTime(_:) „are no longer part of the new Swift MetricKit API“ (gehören nicht mehr zur neuen Swift-API von MetricKit) Null Vorkommen beider Namen in MetricKit.swiftmodule; nicht veraltet, sondern entfernt
„The FileDocument protocol is deprecated. Use ReadableDocument for read-only documents or Document for documents that support reading and writing.“ (Das Protokoll FileDocument ist veraltet; verwenden Sie ReadableDocument für schreibgeschützte Dokumente oder Document für lesende und schreibende.) FileDocument: deprecated: 100000.0, message: "Conform your type to Document instead."; ReferenceFileDocument: "Use Document protocol instead."; beide weich, und Document ist @available(iOS 27.0, macOS 27.0, visionOS 27.0, *), der Ersatz braucht also ein Minimum von 27
„The calendar.deleteEvents schema has been renamed to calendar.deleteEvent.“ (Das Schema calendar.deleteEvents wurde in calendar.deleteEvent umbenannt.) deleteEvents kommt in AppIntents.swiftmodule null Mal vor; deleteEvent: some AppSchemaIntent ist da. Eine Umbenennung ohne Alias ist für jeden auf dem alten Namen ein Compile-Fehler
__PKStrokeRenderState has been renamed to PKStrokeRenderStateReference, with PKStrokeRenderStateReference.init(…) replacing PKStrokeRenderState.asObjCRenderState().“ (__PKStrokeRenderState heißt jetzt PKStrokeRenderStateReference, und PKStrokeRenderStateReference.init(…) ersetzt PKStrokeRenderState.asObjCRenderState().) PKStrokeRenderState.h deklariert @interface PKStrokeRenderState unter API_AVAILABLE(ios(27.0), macos(27.0), visionos(27.0)) mit NS_SWIFT_NAME(PKStrokeRenderStateReference); das Swift-Interface kennt überhaupt kein asObjCRenderState; der von Apple genannte Ersatz ist das init(_ swiftValue: PKStroke.RenderState) der Referenzklasse, PKStrokeRenderStateReference(state) ist also die neue Aufrufform, und der alte Aufruf kompiliert nicht
„Apps built with the latest SDK must adopt the scene-based life cycle or they fail to launch.“ (Apps, die mit dem neuesten SDK gebaut sind, müssen den szenenbasierten Lebenszyklus übernehmen, sonst starten sie nicht.) Keine Annotation, sondern ein Startfehler. Siehe den Beitrag zur Scene-Vorgabe
„AirPort Utility will no longer be available for new downloads from the App Store.“ (AirPort Utility steht im App Store nicht mehr zum Neu-Download bereit.) Erneute Downloads funktionieren weiterhin; „functionality is not guaranteed“ (die Funktion ist nicht garantiert) unter iOS 27 Eine App, keine API
„Weather Highlights is currently only available in US English.“ (Weather Highlights ist derzeit nur auf US-Englisch verfügbar.) Apple führt es unter Deprecations; es liest sich wie ein Verfügbarkeitshinweis

Eine weiche Deprecation und eine Umbenennung stehen außerhalb der Deprecations-Überschriften. Der Textfeldstil .roundedBorder trägt im SwiftUI-Interface eine Annotation deprecated: 100000.0, deren Meldung, ohne die inneren Backticks, „Use textFieldStyle(.bordered) with textInputBorderShape(.roundedRectangle)“ lautet; sie passt zum New-Features-Eintrag, der TextInputBorderShape einführt. Die Version 100000.0 ist Apples Konvention für „veraltet, aber noch nicht“: Unter den Standard-Compiler-Einstellungen bleibt der Compiler stumm, und die Meldung erscheint nur im Interface. Die Umbenennung ist härter. UINavigationItem.navigationBarMinimization „replaces UINavigationItem.barMinimizeBehavior and UINavigationItem.barMinimizationSafeAreaAdjustment“ (ersetzt die beiden alten Properties), und toolbarMinimizationBehavior in SwiftUI ersetzt toolbarMinimizeBehavior auf dieselbe Weise; keiner der drei alten Namen taucht in den UIKit-Headern des 27.0 SDK oder in den Swift-Interfaces von UIKit und SwiftUI auf, Code darauf kompiliert also nicht, statt zu warnen, dieselbe Klasse wie deleteEvents.24

Auch die harten sind leiser, als sie aussehen. Der Compiler vergleicht eine Deprecation-Version mit Ihrem Deployment-Target, nicht mit dem SDK, ios(3.0, 27.0) erzeugt also nur in einem Target eine Warnung, dessen Minimum-iOS 27.0 ist. Ich habe eine Datei, die canOpenURL aufruft, ein NSBundleResourceRequest erzeugt und originalFilename liest, dreimal gegen das 27er SDK kompiliert: Bei -target arm64-apple-ios17.0-simulator und bei 26.0 kompilierte sie ohne Diagnosen, bei 27.0 erzeugte sie drei Warnungen, '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. und 'originalFilename' was deprecated in iOS 27: Use filename instead.4 Eine App mit einem realistischen Minimum erfährt vom Compiler von keiner davon; unter den Standard-Compiler-Einstellungen ist das grep in der Checkliste unten der einzige Hinweis, den Sie bekommen.

Welche Fixes habe ich verifiziert?

Zwei Foundation-Einträge lassen sich ausführen statt nur lesen. Den ersten führen die Notes als behoben: „+[NSURL URLWithString:] no longer double-encodes the % of valid percent-escape sequences when encoding other invalid characters.“ (+[NSURL URLWithString:] kodiert das % gültiger Prozent-Escape-Sequenzen nicht mehr doppelt, wenn es andere ungültige Zeichen kodiert.)2 Die Probe baut NSURL(string:) aus drei Strings, die jeweils ein gültiges Escape und ein Zeichen enthalten, das NSURL escapen muss, und gibt absoluteString aus. Ich habe sie zweimal mit Xcode 27 gebaut: einmal für den Mac und einmal für den Simulator mit einem Minimum-iOS von 26.0, und dann diese eine Simulator-Binärdatei unverändert auf einer iOS-26.5-Runtime und auf der iOS-27.0-Runtime ausgeführt:4

Eingabe macOS 26.6.2 und die Simulator-Binärdatei auf iOS 26.5 (identisch) Dieselbe Simulator-Binärdatei auf 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

Die erste Spalte ist das alte Verhalten: NSURL escapet das Leerzeichen und macht zusätzlich aus dem % eines bereits gültigen Escapes ein %25, sodass ein anderer Pfad herauskommt als der, den das Escape benannt hat. Die Spalte für iOS 27.0 ist der Fix. Ein einziges Mach-O, dessen LC_BUILD_VERSION minos 26.0 und sdk 27.0 ausweist, hat beide Simulator-Spalten erzeugt; über das Ergebnis entscheidet also das Betriebssystem, auf dem der Code läuft, nicht das SDK, gegen das Sie kompilieren, und nicht das Target, für das Sie bauen. Eine App, die Sie heute bauen, behält auf der von mir getesteten iOS-26.5-Runtime die alte Kodierung, und die Release Note liefert keinen Grund, auf einem anderen 26.x-Release ein anderes Ergebnis zu erwarten.

Den zweiten führen die Notes als neu, und ich konnte ihn dort, wo ich Code ausführen kann, nicht reproduzieren: „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 wird auf der Ebene der Blockanzahl auf drei signifikante Dezimalstellen gekürzt, aus 123.456.789 Blöcken werden zum Beispiel 123.000.000.)2 Im iOS-27.0-Simulator lieferte URL.resourceValues(forKeys: [.volumeAvailableCapacityKey]) 226.009.026.560 Bytes, und statfs auf demselben Pfad lieferte f_bavail 55.177.985 bei f_bsize 4.096, was multipliziert exakt dieselbe Zahl ergibt; eine auf drei signifikante Stellen gekürzte Blockanzahl wären 55.100.000 Blöcke oder 225.689.600.000 Bytes gewesen.4 Der Host-Mac meldete über denselben Code 55.177.998 Blöcke. Meine Lesart: Die Kürzung sitzt im Kernel des Geräts und nicht in Foundation, und der Simulator, der den Kernel des Mac nach dem Volume des Mac fragt, kann sie nicht zeigen; ich habe die Probe nicht auf einem Gerät ausgeführt, behandeln Sie den Eintrag also als ungetestet, nicht als falsch, und rechnen Sie damit, dass die Rundung in Geräteberichten zum freien Speicher auftaucht, die bisher exakt waren.

Was ist neu und ändert Code, den Sie bereits haben?

Eingeschränkte Historie in HealthKit. Die Note ist eine Zeile, „Updated HealthKit permissions flow now lets users grant apps access to limited history or full history“ (der überarbeitete HealthKit-Berechtigungsfluss lässt Benutzer Apps Zugriff auf eine eingeschränkte oder die vollständige Historie gewähren), und die Konsequenzen stehen in der API-Referenz.25 Nach dem Bildschirm mit den Datentypen „a second screen prompts them to choose how much historical data to grant your app, either a recent limited window or their full history“ (fragt ein zweiter Bildschirm, wie viele historische Daten die App bekommen soll: ein begrenztes jüngeres Fenster oder die vollständige Historie), und „Time-bound authorization applies only to sample types“ (zeitlich begrenzte Autorisierung gilt nur für Sample-Typen).5 Das neue earliestAuthorizedSampleDate(for:), verfügbar ab iOS 27.0 und watchOS 27.0, liefert ein Dictionary von HKObjectType auf das früheste lesbare Datum, und die Grenze liegt nicht dort, wo man sie vermuten würde: „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 prüft die Grenze gegen das Enddatum eines Samples; ein Sample, das vor dem frühesten autorisierten Datum beginnt, kann Ihre Abfrage also trotzdem bedienen, solange es danach endet.)45 Die Datenschutzregel bleibt: „Your app can’t distinguish between denied and full access; limited authorization is the only state your app can identify, by design.“ (Ihre App kann verweigerten und vollen Zugriff nicht unterscheiden; die eingeschränkte Autorisierung ist absichtlich der einzige Zustand, den sie erkennen kann.)5 Apples Empfehlung: Alles vor dem gelieferten Datum als unbekannt behandeln, nicht als nicht vorhanden, und das Startdatum jeder Abfrage pro Typ beschneiden. Jeder Trend, jede Baseline und jede Serie, die aus HealthKit berechnet wird, muss jetzt auf einem Fenster stimmen, das der Benutzer gewählt hat. Der Beitrag zu HealthKit behandelt die Neuerungen aus dem Juni, nicht die Änderung am Berechtigungsmodell.

StoreKit-Angebotscodes. „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.“ (Die APIs zum Einlösen von Angebotscodes liefern nach Abschluss ein VerificationResult; bei Erfolg enthält es eine Transaction, bei Misserfolg kommt ein Fehler mit der Ursache.)2 Im Interface ist presentOfferCodeRedeemSheet(in:) in 27.0 veraltet mit „Use presentOfferCodeRedeemSheet(from:options:) instead.“, und der Ersatz ist presentOfferCodeRedeemSheet(from viewController: UIViewController, options: Set<RedeemOption> = []) async throws -> VerificationResult<Transaction>, verfügbar ab iOS 27.0.4 Code, der das Sheet präsentiert und dann auf Transaction.updates auf das Ergebnis gelauscht hat, kann es jetzt per await abwarten.

Core AI im Hintergrund. „The system now restricts background access to the Neural Engine, similar to GPU usage restrictions“ (das System beschränkt jetzt den Hintergrundzugriff auf die Neural Engine, ähnlich den GPU-Beschränkungen), und „Neural Engine memory usage is now attributed to your app process instead of the system, and appears in the Allocations instrument“ (der Speicherverbrauch der Neural Engine wird jetzt Ihrem App-Prozess statt dem System zugerechnet und erscheint im Allocations-Instrument). Der Hintergrundzugriff „requires the new entitlement: “com.apple.developer.background-tasks.continued-processing.inference”“ (erfordert dieses neue Entitlement).2 Eine App, die unter 26 Inferenz aus einem Background-Task heraus ausgeführt und nie um etwas gebeten hat, findet die Neural Engine geschlossen vor, bis sie das Entitlement besitzt, und der Neural-Engine-Speicher, den sie nutzt, erscheint jetzt unter ihrem eigenen Prozess in 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.“ (Mit lokalisierten Asset-Packs lässt sich der Speicherbedarf der App senken; das System liefert die passenden Packs anhand der bevorzugten Sprachen des Benutzers.)2 Für eine App, die On Demand Resources hinter sich lässt, sind lokalisierte Packs die Funktion, die die Tags pro Sprache ersetzt.

Kritische Hinweise. Die Notes führen das Verhalten der kritischen Hinweise als behoben: „Critical alerts are automatically turned on for any apps that request your permission to enable notifications.“ (Kritische Hinweise werden für jede App automatisch eingeschaltet, die um die Erlaubnis für Mitteilungen bittet.)2 Mehr sagt der Eintrag nicht, testen Sie also jeden Mitteilungsfluss erneut, der in den Betas überprivilegiert wirkte.

Menüs, @State, TLS und das neue Slice. Vier Einträge haben eigene Beiträge. Menüleiste und Kontextmenüs auf iPadOS 27 und macOS 27 „present a reduced set of menu item images“ (zeigen einen reduzierten Satz an Menübildern), mit preferredImageVisibility auf UIMenuElement als Überschreibung: siehe Menübilder. Die Neufassung des @State-Makros ist in diesen Notes ein SwiftUI-Eintrag und ändert, was unter Xcode 27 kompiliert: siehe den Beitrag zu Xcode 27 für die Reproduktion und den Beitrag zum @State-Makro für das Audit. Die strengere TLS-Anforderung für MDM-, Enrollment- und Software-Update-Verkehr beginnt „in 27.0 operating systems“ (in den 27.0-Betriebssystemen): siehe das TLS-Audit. Und arm64e.x1 mit CPA2 auf „iPhone models with A20 Pro or later chips, Mac computers with M6 or later chips, and Apple Watch models with S11 or later chips“ (iPhone-Modellen ab A20 Pro, Macs ab M6 und Apple-Watch-Modellen ab S11): siehe arm64e.x1.2

Kleinere Punkte, die ein grep wert sind. System bekommt Swift-Varianten von stat, lstat, fstat und fstatat mit einem Typ Stat und FilePath.stat(), und die Notes führen als behoben einen Konflikt zwischen diesen Methoden und einem unqualifizierten stat() in Ihren eigenen Extensions. NSTextTable „and its related objects and types are available to UIKit clients starting with OS 27 releases“ (und die zugehörigen Objekte und Typen stehen UIKit-Clients ab den OS-27-Releases zur Verfügung). AsyncImage „now automatically caches downloaded images using HTTP caching protocols“ (cacht heruntergeladene Bilder jetzt automatisch nach den HTTP-Caching-Regeln), mit URLRequest-Initialisierern und View.asyncImageURLSession(_:) zur Steuerung. „When linked on iOS 27, tvOS 27, macCatalyst 27, or visionOS 27 SDKs“ (beim Linken gegen diese 27er SDKs) dehnen UIScene.extendStateRestoration und UIScene.completeStateRestoration die Zustandswiederherstellung auf den Übergang vom Hintergrund in den Vordergrund aus. Und SwiftData führt einen Fix für „a deadlock for @Query when saving a ModelContext on a background actor while scheduling new async tasks for a ModelActor“ (einen Deadlock von @Query beim Speichern eines ModelContext auf einem Background-Actor, während neue asynchrone Tasks für einen ModelActor eingeplant werden).2

Bekannte Probleme, mit denen Sie planen sollten

  • photos.asset-Entities kompilieren nicht mehr. „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.“ (Bestehende Entities, die in früheren Releases @AppEntity(schema: .photos.asset) erfüllt haben, kompilieren mit den 27er SDKs womöglich nicht mehr, weil das Schema neue Properties bekommen hat.) Workaround: „To continue conforming to the schema, adopt the additional properties and move the code behind an availability check.“ (Übernehmen Sie die zusätzlichen Properties und stellen Sie den Code hinter eine Availability-Prüfung.)2 Das Makro verrät Ihnen nicht, welche Properties: Eine leere @AppEntity(schema: .photos.asset)-Konformität kompiliert unter swiftc sauber, und ihre Expansion fügt nur eine AssistantSchemaEntity-Konformität hinzu, die den Schemanamen trägt. Die Liste stammt aus dem App-Intents-Metadatenschritt von Xcode, appintentsmetadataprocessor, der den Build mit einem Fehler pro fehlender Property abbricht. Von Hand auf dieser leeren Konformität gegen das 27.0 SDK ausgeführt, meldet er 12, jede mit einem 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? und isPortraitModeEnabled: Bool?; die beiden <#…#>-Platzhalter stehen für Enums, die Sie selbst gegen die Enum-Schemata .photos.assetType und .photos.filterType deklarieren und die das Interface PhotoAssetType und PhotoFilterEffectType nennt. Diese Liste konnte ich nicht gegen das 26er SDK diffen, weil das einzige Xcode auf diesem Mac 27A266a ist.4
  • Now-Playing-Tokens gehen an Production.RemoteMediaSession and RemoteMediaSessionRepresentable always provision Now Playing start and update push tokens for the production APNs environment, even if the aps-environment configuration is set to development.“ (Beide Typen stellen Start- und Update-Push-Tokens für Now Playing immer für die APNs-Umgebung production bereit, selbst wenn aps-environment auf development steht.) Workaround: „Use the production environment for testing and validation.“ (Verwenden Sie zum Testen und Validieren die Umgebung production.)2 Die Klasse liegt im neuen Framework NowPlaying und ist auf macOS und visionOS als nicht verfügbar markiert.4
  • SpotlightSearchTool sprengt das On-Device-Modell. Ohne Konfiguration „the tool’s description and parameter schema alone exceed the on-device model’s context window before any prompt is added“ (überschreiten schon Beschreibung und Parameterschema des Tools das Kontextfenster des On-Device-Modells, bevor ein Prompt hinzukommt). Workaround: ein fokussierter Guide, „.focused(.communications), .focused(.calendar), .focused(.documents), .focused(.visualMedia), or .focused(.audio)“.2 Die API existiert: SpotlightSearchTool.Guide.focused(_ domain: ContentDomain = .items) steht neben .complete und .dynamic(_:) im Interface von _CoreSpotlight_FoundationModels.4 Mein Beitrag zur On-Device-KI beschreibt das Tool; seine Adoptionsschritte aus dem Juni hatten die Standardkonfiguration mit dem Systemmodell kombiniert und tragen jetzt eine datierte Korrektur.
  • Performance-Traces aus dem Kontrollzentrum. „Gathering PowerProfiler and Lookback traces through the Performance Trace Control Center widget might fail to produce traces.“ (Das Erfassen von PowerProfiler- und Lookback-Traces über das Kontrollzentrum-Widget Performance Trace liefert womöglich keine Traces.) Apples Workaround lautet „Gather traces on iOS 27.0 beta 1 or earlier“ (Traces auf iOS 27.0 Beta 1 oder früher erfassen), was für die meisten Teams auf einem bereits aktualisierten Gerät kein gangbarer Weg ist.2
  • StoreKit-Tests. „Changing the storefront or locale using SKTestSession doesn’t propagate through Storefront.updates“ (ein Wechsel von Storefront oder Locale über SKTestSession kommt nicht über Storefront.updates an), und „Failed purchases using SKTestSession might display error dialogs even when dialogsDisabled is set to true“ (fehlgeschlagene Käufe über SKTestSession zeigen womöglich Fehlerdialoge, obwohl dialogsDisabled auf true steht).2
  • Kurzbefehle und UnionValue. Ein Parameter mit „two number-related types (for example, both Int and Double)“ (zwei zahlenartigen Typen, etwa Int und Double zugleich) zeigt die Zahlenoption doppelt; Apples Workaround ist, nur einen zu deklarieren.2

Was ich diese Woche tun würde

  1. Einmal aus Xcode 27 archivieren und die Linked-on-27-Liste oben vor TestFlight gegen die App abarbeiten: Launch-Screen-Schlüssel, Scene-Lifecycle, jedes TabView, dessen Auswahl einen versteckten Tab benennen kann, und jedes Sheet, das Control-Modifier geerbt hat.2
  2. Den MetricKit-Code vor der Auslieferung gegen das GA-SDK bauen; eine Binärdatei, die noch ScrollHitchTimeMetric oder den alten Typ von ratio referenziert, ist nach Apples Beschreibung ein Absturz beim Start, und das Interface exportiert den Namen nicht mehr.24
  3. Nach canOpenURL, NSBundleResourceRequest, originalFilename, FileDocument, deleteEvents, asObjCRenderState und barMinimizeBehavior greppen; die ersten drei warnen nur bei einem Deployment-Target von 27.0, FileDocument ist weich, und die letzten drei kompilieren nicht, das grep ist also die Benachrichtigung.4
  4. Wenn Sie HealthKit lesen, nach der Autorisierung earliestAuthorizedSampleDate(for:) aufrufen und das Startdatum jeder Abfrage pro Typ beschneiden; dann entscheiden, was eine Serie oder eine Baseline auf einem Fenster bedeutet, das der Benutzer gewählt hat.5
  5. Die Build-Nummer in Bug-Reports aus drei Quellen protokollieren: ProcessInfo auf dem Gerät, die SystemVersion.plist des SDKs auf der Build-Maschine und simctl list runtimes für Simulator-Reproduktionen. Sie unterscheiden sich, und ein Fix aus 24A437 muss in 24A434 nicht enthalten sein.4
  6. Wenn Sie URLs mit NSURL(string:) aus Strings bauen, weiter auf iOS 26 testen: Das Betriebssystem behebt die %25-Doppelkodierung, nicht Ihr Rebuild, und eine einzige Xcode-27-Binärdatei erzeugt sie auf der 26.5-Runtime und auf 27.0 nicht.4

Häufige Fragen

Wann ist iOS 27.0 erschienen, und welcher Build ist es?

Am Montag, dem 14. September 2026, als Build 24A437, demselben Build, den Apple am Freitag, dem 11. September, als Release Candidate veröffentlicht hatte. iPadOS 27.0 teilt sich die Nummer.1

Welcher iOS-27.0-Build steckt im SDK von Xcode 27?

Das iPhoneOS 27.0 SDK in Xcode 27 (27A266a) meldet als ProductBuildVersion 24A430, und die iOS 27.0 Simulator-Runtime meldet 24A434. Keiner von beiden ist der Geräte-Build.4

Was ist in iOS 27 als veraltet markiert?

Die Notes führen 11 Einträge auf: canOpenURL:, On Demand Resources und NSBundleResourceRequest, PHAssetResource.originalFilename, die ursprünglichen MetricKit-APIs, ScrollHitchTimeMetric, FileDocument, das Schema calendar.deleteEvents, __PKStrokeRenderState, die UIKit-Vorgabe zum Scene-Lifecycle, AirPort Utility und einen Sprachhinweis zu Weather Highlights. Drei tragen im SDK harte Deprecation-Versionen 27.0 und warnen nur bei einem Deployment-Target von 27.0, zwei sind weich, zwei sind Umbenennungen, einer ist eine Entfernung, und drei sind keine API-Änderungen.24

Muss meine App für iOS 27 neu gebaut werden?

Nicht, um weiterzulaufen, und die Einträge teilen sich dreifach auf. SDK-gebunden: die 12 Linked-on-27-Kategorien oben, die nichts ändern, bis Sie mit dem 27.0 SDK bauen. Auf OS-Ebene, für jede Binärdatei auf einem 27.0-Gerät: die Hintergrundbeschränkung der Neural Engine samt Entitlement, der Berechtigungsfluss für die eingeschränkte HealthKit-Historie, die TLS-Durchsetzung für MDM- und Update-Verkehr, die Änderung der Menübilder auf iPadOS 27, der Fix für kritische Hinweise und der NSURL-Kodierungsfix. Beta-Binärdateien: MetricKit-Code, der gegen ein Beta-SDK gebaut wurde und laut Apple mit dem GA-SDK neu kompiliert werden muss, um Abstürze zu vermeiden. Apples SDK-Minimum für den App Store sind seit dem 28. April 2026 die 26er SDKs; die Anforderung des 27er SDK ist eine spätere Frist, die diese Notes nicht setzen.23

Wo finde ich die Release Notes zu iOS 27?

Auf Apples Developer-Dokumentationsseite unter iOS & iPadOS Release Notes, eine Seite für 27.0, gegliedert nach Bereichen mit New Features, Resolved Issues, Known Issues und Deprecations unter jedem. Die Zahlen in diesem Beitrag stammen von dieser Seite, abgerufen am 15. September 2026.2

Steckt der NSURL-Fix im SDK oder im OS?

Im OS. Eine einzige Simulator-Binärdatei, mit Xcode 27 gegen das 27.0 SDK und mit einem Minimum-iOS von 26.0 gebaut, kodiert auf einer iOS-26.5-Runtime doppelt und auf der iOS-27.0-Runtime nicht, und der Mac-Build auf macOS 26.6.2 kodiert ebenfalls doppelt; zwischen den beiden Simulator-Läufen hat sich nichts geändert außer dem Betriebssystem.4

Quellen


  1. Apple, Releases, RSS-Feed abgerufen am 15. September 2026: „iOS 27.0 (24A437)“, „iPadOS 27.0 (24A437)“, „macOS 27.0 (26A428)“, „Xcode 27 (27A266a)“, „tvOS 27.0 (24J361)“, „visionOS 27.0 (24M362)“ und „watchOS 27.0 (24R364)“ datiert auf Mon, 14 Sep 2026; „iOS 27.0 RC (24A437)“ datiert auf Fri, 11 Sep 2026; „iOS 27.0 beta (24A5355q)“ datiert auf Mon, 08 Jun 2026. 

  2. Apple, iOS & iPadOS 27 Release Notes, abgerufen am 15. September 2026 nach dem GA-Release. Die Zahlen (93 Bereiche; 65 New Features, 197 Resolved Issues, 23 Known Issues, 11 Deprecations) sind Listenpunkte unter den Überschriften der einzelnen Bereiche. Zitierte Einträge, nach Radar: Overview-Absatz; UIKit, New Features (Launch Screen 168247372, präsentierte View Controller 170005251, Scope-Bar 173860616, externe Displays 177015874, Zustandswiederherstellung 161843040, Menübilder und preferredImageVisibility 170479084, navigationBarMinimization 177953926), Resolved Issues (Statusleisten-Accessoren 162044221, Größenänderung 166422120, 178555304, 178558224, 178558897, 178559386, 178560235, 178561952, 178562971, 178573319), Deprecations (Scene-Lifecycle 141837548, canOpenURL: 179874781); SwiftUI, New Features (TabView 164516837, selektierbarer Text 79770704, TextRenderer auf selektierbarem Text 158160386, .sceneAccessory 175548901, AsyncImage 78212597, @State 105893279, Menübilder 170480710, TextInputBorderShape 173362083, toolbarMinimizationBehavior 177954148), Resolved Issues (Sheets und Popovers 167448274, containerRelativeFrame 165913417, scrollPosition nach Tipp auf die Statusleiste 111501113, FB12477370), New Features (LabeledContent in Menu 175594929), Deprecations (FileDocument 178776840); MetricKit, New Features (HitchTimeRatio 180024784) und Deprecations (174892111, 180455992); Foundation, New Features (volumeAvailableCapacityKey 75545872) und Resolved Issues (NSURL 161588649, FB20439045); App Intents, Known Issues (photos.asset 181800016, FB23652582) und Deprecations (calendar.deleteEvent 176751155); 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) und 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). 

  3. Apple, App Store Connect release notes, abgerufen am 15. September 2026. Der Eintrag vom 14. September 2026 ist in der Tabelle vollständig zitiert; der Eintrag vom 9. September 2026 hält die Uploads mit den RC-SDKs fest. Das 26er-SDK-Minimum seit dem 28. April 2026 stammt von Apples Seite Upcoming requirements

  4. Reproduktion des Autors auf Xcode 27.0 (27A266a) mit darauf gesetztem DEVELOPER_DIR, macOS 26.6.2 (25G83), 15. September 2026. Builds: iPhoneOS.sdk/System/Library/CoreServices/SystemVersion.plist enthält ProductBuildVersion 24A430 und ProductVersion 27.0; xcrun simctl list runtimes gibt „iOS 27.0 (27.0 - 24A434)“ aus. Header und Interfaces, alle unter iPhoneOS.sdk/System/Library/Frameworks: UIKit.framework/Headers/UIApplication.h Zeile 98 (canOpenURL:); Foundation.framework/Headers/NSBundle.h Zeilen 721 bis 796 (NSBundleResourceRequest); Photos.framework/Headers/PHAssetResource.h Zeilen 29 und 33; MetricKit.framework/Headers/MXMetricManager.h Zeile 32; MetricKit.framework/Modules/MetricKit.swiftmodule/arm64e-apple-ios.swiftinterface, null Treffer für ScrollHitchTimeMetric oder scrollHitchTime, vier für HitchTimeRatio; SwiftUI.framework/Modules/SwiftUI.swiftmodule/arm64e-apple-ios.swiftinterface Zeilen 23088 bis 23093 (FileDocument), 9334 bis 9338 (ReferenceFileDocument), 1728 bis 1731 (Document), 9489 (Meldung zu .roundedBorder), 13763 (toolbarMinimizationBehavior); null Treffer als ganzer Bezeichner für barMinimizeBehavior, barMinimizationSafeAreaAdjustment oder toolbarMinimizeBehavior über UIKit.framework/Headers, UIKit.framework/Modules und SwiftUI.framework/Modules hinweg (die einzigen Teilstring-Treffer sind der Modifier toolbarMinimizationSafeAreaAdjustment und sein Typ ToolbarMinimizationSafeAreaAdjustment), während UINavigationItem.h navigationBarMinimization deklariert; AppIntents.framework/Modules/AppIntents.swiftmodule/arm64e-apple-ios.swiftinterface, null Treffer für deleteEvents, deleteEvent: some AppIntents::AppSchemaIntent in Zeile 12608; PencilKit.framework/Headers/PKStrokeRenderState.h Zeilen 15 bis 17 sowie PencilKit.framework/Modules/PencilKit.swiftmodule/arm64e-apple-ios.swiftinterface mit null Treffern für asObjC, convenience public init(_ swiftValue: PencilKit::PKStroke.PencilKit::RenderState) auf PKStrokeRenderStateReference in Zeile 46 und dem umgekehrten public init(_ objcValue: PencilKit::PKStrokeRenderStateReference) in PKStroke.RenderState in Zeile 38; StoreKit.framework/Modules/StoreKit.swiftmodule/arm64e-apple-ios.swiftinterface Zeilen 311 bis 322; HealthKit.framework/Modules/HealthKit.swiftmodule/arm64e-apple-ios.swiftinterface Zeilen 741 und 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 Zeilen 180 bis 182 und 276 bis 278; _CoreSpotlight_FoundationModels.framework/Modules/_CoreSpotlight_FoundationModels.swiftmodule/arm64e-apple-ios.swiftinterface Zeilen 64 bis 78 und 100 bis 129. photos.asset-Probe: eine 15-zeilige Swift-Datei, die AppIntents und CoreLocation importiert und @AppEntity(schema: .photos.asset) struct ProbeAsset mit einer EntityQuery, einer id, einer displayRepresentation und ohne Schema-Properties deklariert; swiftc -c -target arm64-apple-ios27.0-simulator kompilierte sie mit Exit-Code 0 und ohne Diagnosen, und -Xfrontend -dump-macro-expansions zeigte, dass das Makro unter einem Attribut @available(iOS 27.0, macOS 27.0, tvOS 27.0, watchOS 27.0, visionOS 27.0, *) extension ProbeAsset: AssistantSchemaEntity { static let __appSchemaEntity = "photos.asset" } und eine leere AppEntity-Extension hinzufügt. Das erneute Ausführen der swift-frontend-Zeile des Treibers (mit swiftc -### mitgeschnitten) mit -emit-const-values-path und -const-gather-protocols-file, gerichtet auf eine von mir geschriebene Liste mit 18 Protokollen (AppIntent, AppEntity, AppEnum, AssistantSchemaEntity, EntityQuery und die übrigen App-Intents-Protokolle), erzeugte eine .swiftconstvalues-Datei, und 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 darauf endete mit Exit-Code 255, „At least one halting error was produced during export“ und 12 Zeilen der Form „error: Missing required property ‘exposure’ from AppSchemaEntity ‘photos.asset’“, jeweils gefolgt von einem Fix-it wie „var exposure: Double?“ (die Fix-its für assetType und filter tragen die Platzhalter <#PhotoAssetType#>? und <#PhotoFilterEffectType#>?; AppIntents.framework/Modules/AppIntents.swiftmodule/arm64e-apple-ios.swiftinterface deklariert diese Namen in den Zeilen 11695 und 11705 als AppSchema.Enum("PhotoAssetType") unter assetType und AppSchema.Enum("PhotoFilterEffectType") unter filterType); der Aufruf spiegelt den Metadatenschritt von Xcode, ist aber nicht Byte für Byte der des Build-Systems, dessen Protokollliste aus SWIFT_EMIT_CONST_VALUE_PROTOCOLS stammt. Probe für Deprecation-Warnungen: eine 11-zeilige Swift-Datei, die UIKit, Foundation und Photos importiert, canOpenURL(_:) aufruft, NSBundleResourceRequest(tags:) konstruiert und PHAssetResource.originalFilename liest, mit swiftc -c gegen das iPhoneSimulator 27.0 SDK bei -target arm64-apple-ios17.0-simulator, ios26.0 und ios27.0 kompiliert: null Diagnosen bei 17.0 und 26.0, drei [#DeprecatedDeclaration]-Warnungen bei 27.0, im Text zitiert. NSURL-Probe: eine 16-zeilige Swift-Datei, die NSURL(string:)?.absoluteString für die drei Eingaben der Tabelle ausgibt, mit swiftc -O für den Host und einmal mit swiftc -O -target arm64-apple-ios26.0-simulator gegen das iPhoneSimulator 27.0 SDK kompiliert (otool -l auf dem Ergebnis zeigt LC_BUILD_VERSION mit minos 26.0 und sdk 27.0); diese eine Simulator-Binärdatei habe ich mit xcrun simctl spawn auf einem gebooteten Simulator mit der iOS-26.5-Runtime (23F77) und danach auf einem gebooteten iPhone-18-Pro-Simulator mit der iOS-27.0-Runtime (24A434) ausgeführt; die Ausgaben von macOS und iOS 26.5 waren identisch, und alle Ausgaben sind wie in der Tabelle. Kapazitätsprobe: URL(fileURLWithPath: NSHomeDirectory()).resourceValues(forKeys: [.volumeAvailableCapacityKey, .volumeTotalCapacityKey, .volumeAvailableCapacityForImportantUsageKey]) plus statfs; der Simulator-Lauf gab volumeAvailableCapacity = 226009026560, f_bavail = 55177985, f_bsize = 4096 aus; der Host-Lauf gab volumeAvailableCapacity = 226009079808, f_bavail = 55177998 aus. 

  5. Apple, HealthKit-Dokumentation, earliestAuthorizedSampleDate(for:) und Authorizing access to health data, abgerufen am 15. September 2026. Die Methodenseite nennt als Verfügbarkeit iOS 27.0, iPadOS 27.0, Mac Catalyst 27.0, macOS 27.0, visionOS 27.0 und watchOS 27.0 und ist die Quelle des Satzes zum Enddatum sowie von „Your app can’t distinguish between denied and full access; limited authorization is the only state your app can identify, by design.“; der Guide ist die Quelle von „people can choose to grant your app access to only a limited window of recent data rather than their full history“, des Satzes zum zweiten Bildschirm und von „Time-bound authorization applies only to sample types.“ 

  6. Apple, MXMetricManager, MetricKit-Klassenreferenz, abgerufen am 15. September 2026 über Apples Dokumentations-JSON: Die Verfügbarkeit nennt iOS 13.0, iPadOS 13.0, Mac Catalyst 13.1, macOS 12.0 und visionOS 1.0 mit deprecatedAt 27.0 bei jedem Eintrag, und die Deprecation-Zusammenfassung lautet „Use MetricManager instead.“ 

Verwandte Beiträge

canOpenURL ist veraltet: Was Sie stattdessen aufrufen

Apple hat canOpenURL in drei Sätzen abgekündigt und die Scheme-Positivliste auf 25 Einträge halbiert. Der Ersatz kann ei…

29 Min. Lesezeit

Das @State-Makro: Was Xcode 27 nicht mehr kompiliert

Xcode 27 implementiert SwiftUIs @State als Swift-Makro neu. Der Bruch kommt mit der Toolchain, nicht dem Deployment Targ…

23 Min. Lesezeit

Design für das iPhone Duo: Was sich bewegt, was sich teilt und was bleibt

Apples Designleitfaden zum iPhone Duo und drei Tech Talks, als Regeln gelesen: zwei Größenklassen statt einer Pose je La…

23 Min. Lesezeit