← Wszystkie wpisy

Uwagi do wydania iOS 27.0: wycofania, zmiany łamiące i poprawki

iOS 27.0 i iPadOS 27.0 ukazały się w poniedziałek 14 września 2026 roku jako build 24A437, ten sam, który Apple opublikowało jako RC 11 września; tego samego dnia pojawił się SDK w Xcode 27 (27A266a), a App Store Connect od tej samej daty przyjmuje buildy GA z 27.0.13 Na pytanie „który iOS 27.0?” odpowiadają teraz trzy numery buildu: urządzenie działa na 24A437, SDK w Xcode 27 identyfikuje się jako 24A430, a runtime symulatora to 24A434.4 Uwagi obejmują 93 obszary z nagłówkami, a w nich 65 nowych funkcji, 197 rozwiązanych problemów, 23 znane problemy i 11 wycofań; dla istniejącego kodu liczy się zestaw zmian, które uruchamiają się w chwili zbudowania aplikacji z SDK 27.0, wycofania potwierdzone w samych nagłówkach SDK oraz jedna poprawka w Foundation, którą jeden plik binarny odtwarza na runtime iOS 26.5 i na runtime iOS 27.0.24 {.answer-block}

TL;DR

  • Buildy. Urządzenie 24A437, SDK 24A430, runtime symulatora 24A434; RC i GA mają wspólny build urządzenia, a numer SDK nie jest numerem urządzenia, co ma znaczenie, gdy zgłoszenie błędu prosi o jeden z nich.14
  • Zachowanie po zlinkowaniu z 27. 12 kategorii zmian, łącznie 23 wpisy, zmienia to, co robi aplikacja w chwili zbudowania jej z SDK 27.0: wymóg ekranu startowego, nakaz cyklu życia opartego na scenach, awaria TabView przy ukrytym zaznaczeniu, systemowe zaznaczanie tekstu w zaznaczalnym Text, dziedziczenie traitów przez prezentowane kontrolery widoków, pasek zakresu w jednym wierszu, sceny zewnętrznych wyświetlaczy, których system już nie oferuje automatycznie, modyfikatory kontrolek resetowane w widokach sheet i popover, obliczanie bezpiecznego obszaru w containerRelativeFrame, akcesory paska stanu, reguły zmiany rozmiaru na iPadzie pod UIRequiresFullScreen oraz dwie mniejsze zmiany w SwiftUI dotyczące menu i przewijania na górę.2
  • Rekompilacja albo awaria. HitchTimeMetric.ratio w MetricKit mierzy teraz w nowej jednostce HitchTimeRatio, a ScrollHitchTimeMetric zniknął z API Swift; Apple zaleca rekompilację z najnowszym SDK, aby uniknąć awarii przy uruchomieniu i awarii z powodu brakującego symbolu, a interfejs SDK potwierdza, że typu już nie ma.24
  • 11 wycofań, w większości cichych. canOpenURL: (ios(3.0, 27.0) w nagłówku), On Demand Resources (ios(9.0, 27.0)), PHAssetResource.originalFilename (ios(9, 27)), pierwotne API MetricKit (oznaczone API_TO_BE_DEPRECATED, a więc wycofanie miękkie), ScrollHitchTimeMetric, FileDocument, calendar.deleteEvents przemianowane na calendar.deleteEvent, zmiana nazwy w PencilKit, nakaz scen, AirPort Utility oraz uwaga o języku Weather Highlights. Trzy twarde ostrzegają tylko przy deployment target 27.0; przy 17.0 lub 26.0 ten sam plik kompiluje się bez uwag.24
  • Dwie zmiany w Foundation, sprawdzone. +[NSURL URLWithString:] nie koduje już podwójnie poprawnego %20, gdy escapuje spację w innym miejscu ciągu: jeden plik binarny dla symulatora daje %2520 na runtime iOS 26.5 i %20 na runtime iOS 27.0, a build dla Maca zachowuje się jak stara strona, więc poprawka podąża za systemem, nie za SDK. Obcięcie volumeAvailableCapacityKey do trzech cyfr znaczących nie pojawia się w symulatorze, który raportuje dokładnie 55 177 985 bloków.24

Który build jest który?

Gdzie Build Dowód
Urządzenie, iOS 27.0 / iPadOS 27.0 24A437 Kanał Releases, poniedziałek 14 września 2026; „iOS 27.0 RC (24A437)” w piątek 11 września1
SDK w Xcode 27 (27A266a) 24A430 iPhoneOS.sdk/System/Library/CoreServices/SystemVersion.plist, ProductBuildVersion4
Runtime symulatora iOS 27.0 24A434 xcrun simctl list runtimes wypisuje „iOS 27.0 (27.0 - 24A434)”4
macOS 27.0 26A428 Kanał Releases, poniedziałek 14 września1
App Store Connect SDK GA 27.0 przyjmowane „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.” (można już przesyłać do App Store i TestFlight aplikacje zbudowane w Xcode 27 z SDK 27.0). 14 września; przesyłki z SDK RC przyjmowane od 9 września3

Te trzy numery to nie pomyłka. SDK jest migawką nagłówków i interfejsów, runtime symulatora to osobny cryptex, który Apple dostarcza do Xcode, a build urządzenia to ten, na którym pracują użytkownicy; reprodukcja, która mówi „iOS 27.0” bez jednego z tych numerów, pomija liczbę rozstrzygającą o tym, czy poprawka zadziałała.4

Same uwagi otwierają dwa zdania o zakresie, „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,” (SDK służy do tworzenia aplikacji na iPhone’a i iPada z iOS i iPadOS 27 i jest dołączony do Xcode 27 dostępnego w Mac App Store), po czym przechodzą przez 93 obszary z nagłówkami. Zliczenie pozycji list pod każdym nagłówkiem daje 65 nowych funkcji, 197 rozwiązanych problemów, 23 znane problemy i 11 wycofań; sama Siri odpowiada za 38 rozwiązanych i osiem znanych, SwiftUI za 23 nowe i 13 rozwiązanych, UIKit za dziewięć nowych i 13 rozwiązanych.2 Wpis o Xcode 27 omawia stronę narzędzi, a niniejszy wpis stronę systemu operacyjnego i SDK.

Co zmienia się w chwili zbudowania aplikacji z SDK 27.0?

Apple uzależnia zmiany zachowania od SDK, z którym aplikacja jest linkowana, więc nie dotykają one buildu, który już trafił do sklepu, a wszystkie uruchamiają się przy pierwszym archiwum z Xcode 27. Cytując uwagę przy każdej z nich:2

  • Ekran startowy. „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.” (aplikacje zbudowane z SDK 27.0 lub nowszym muszą zawierać ekran startowy zadeklarowany jednym z tych czterech kluczy w Info.plist, inaczej App Store je odrzuca). App Store Connect przyjmował przesyłki do App Store zbudowane z SDK RC 27.0 od 9 września, a z SDK GA od 14 września; żaden z wpisów nie mówi, kiedy zaczęły się odrzucenia, więc obie daty należy czytać jako daty przesyłania, a nie jako datę egzekwowania.3 Mój wpis o ekranie startowym audytuje wygenerowany plist.
  • Cykl życia scen. W sekcji wycofań UIKit: „Apps built with the latest SDK must adopt the scene-based life cycle or they fail to launch.” (aplikacje zbudowane z najnowszym SDK muszą przyjąć cykl życia oparty na scenach, inaczej się nie uruchamiają). Wpis o nakazie scen zawiera migrację.
  • Zaznaczenie w TabView. „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.” (TabView wymusza, aby zaznaczenie wskazywało widoczną kartę, i może ulec awarii, gdy wskazuje kartę ukrytą lub niedostępną). Zaznaczenie przywrócone z UserDefaults, które wskazuje kartę później ukrytą, to wzorzec, którego należy szukać.
  • Zaznaczalny 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.” (widok Text z .textSelection(.enabled) obsługuje teraz interaktywne zaznaczanie przez systemowy interfejs zaznaczania tekstu). Apple dodaje, że takie widoki „might include additional gestures for system text selection interactions” (mogą zawierać dodatkowe gesty systemowego zaznaczania tekstu) i kieruje własne gesty do .highPriorityGesture(); ten sam build sprawia też, że TextRenderer działa na zaznaczalnym Text.
  • Prezentowane kontrolery widoków. „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.” (prezentowany kontroler widoku dziedziczy trait collection, wędrując w górę łańcucha superview przez pośrednie widoki prezentacji, zamiast przeskakiwać wprost do presentation controllera). Ponownie przetestować należy własne podklasy UIPresentationController, które ustawiają traity.
  • Pasek zakresu. „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.” (gdy UISearchController używa środkowego położenia paska wyszukiwania, pasek zakresu pojawia się w tym samym wierszu co pole wyszukiwania, a nie w osobnym wierszu poniżej).
  • Zewnętrzne wyświetlacze. „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.” (system nie oferuje już automatycznie scen windowExternalDisplayNonInteractive; nieinteraktywną treść na zewnętrznych wyświetlaczach pokazuje się przez rejestrację akcesorium sceny). SwiftUI dostaje te same drzwi przez .sceneAccessory z ExternalNonInteractiveAccessory.
  • Sheet i popover. Wymienione jako naprawione: „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.” (te wartości środowiska wracają w widokach sheet i popover do wartości domyślnych). Jeśli sheet dziedziczył .controlSize(.large) od widoku, który go prezentuje, przestaje to robić.
  • containerRelativeFrame. Również naprawione dla buildów z SDK 27.0: modyfikator „incorrectly accounts for safe-area insets on a ScrollView’s non-scrollable axis, causing the calculated scrollable content size to be too small,” (błędnie uwzględniał marginesy bezpiecznego obszaru na nieprzewijalnej osi ScrollView, przez co obliczony rozmiar przewijanej treści był za mały), więc poziomy ScrollView z containerRelativeFrame(.vertical) zmienia rozmiar.
  • Akcesory paska stanu. Naprawione dla buildów z SDK 27.0: przestarzałe akcesory paska stanu w UIApplication, które uwaga wymienia jako statusBarFrame, statusBarOrientation, statusBarStyle i isStatusBarHidden, „might return NaN or null values” (mogą zwracać NaN lub wartości null).
  • Zmiana rozmiaru i orientacja na iPadzie oraz w iPhone Mirroring. Dziewięć rozwiązanych problemów UIKit opisuje, co aplikacja „built with the iOS 27 SDK” (zbudowana z SDK iOS 27) powinna teraz widzieć, gdy jej scena się łączy albo gdy użytkownik zmienia rozmiar lub obraca jej okno: aplikacje z UIRequiresFullScreen dostają „a discrete change to a new UIScreen with an updated bounds” (dyskretną zmianę na nowy UIScreen ze zaktualizowanymi granicami) zamiast ciągłych aktualizacji rozmiaru, granice UIScreen.main „should remain fixed once the screen connects” (powinny pozostać stałe po podłączeniu ekranu), a „supported interface orientations should no longer be a condition for continuous resizability” (obsługiwane orientacje interfejsu nie powinny już warunkować ciągłej zmiany rozmiaru).
  • Menu i przewijanie na górę. Dwie mniejsze zmiany w SwiftUI: „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,” (widok LabeledContent użyty w Menu mapuje swoją wartość na podtytuł systemowej pozycji menu) oraz, wymienione jako naprawione, „In apps built with the 2027 SDKs, tapping the status bar to scroll a ScrollView to its top correctly updates a bound scrollPosition.” (stuknięcie paska stanu w celu przewinięcia ScrollView na górę poprawnie aktualizuje powiązany scrollPosition). Etykieta menu, która niosła wartość ze względów układu, zyskuje teraz podtytuł, a binding scrollPosition, który po stuknięciu paska stanu pokazywał nieaktualną wartość, teraz się aktualizuje.

Te 12 kategorii obejmuje wpisy, które zmieniają istniejące zachowanie. Nowe możliwości za tą samą bramką SDK, takie jak protokół ReadableDocument, zbudowany na nim protokół Document i UIScene.extendStateRestoration, znajdują się w dalszych sekcjach; kategoria zewnętrznych wyświetlaczy łączy usunięcie w UIKit z jego zamiennikiem w SwiftUI.

Dwa wpisy MetricKit należą do tego miejsca, choć dotyczą rekompilacji, a nie linkowania. „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.” (obie właściwości używają teraz nowego typu HitchTimeRatio, podklasy Dimension, która wyraża czas zacięć jako liczbę milisekund zacięcia na sekundę mierzonego czasu; aplikację należy przekompilować z najnowszym SDK, aby przyjąć zmianę typu i uniknąć awarii przy uruchomieniu). Oraz: „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(_:).” (przypadek scrollHitchTime(_:) i typ ScrollHitchTimeMetric nie są już częścią nowego API Swift MetricKit; zamiast nich należy używać hitchTime(_:) i HitchTimeMetric oraz przekompilować aplikację, aby uniknąć awarii z powodu brakującego symbolu).2 W interfejsie Swift MetricKit w SDK iOS 27 ScrollHitchTimeMetric i scrollHitchTime występują zero razy, a HitchTimeRatio cztery razy, więc plik binarny zbudowany z SDK beta, który używał którejkolwiek z tych nazw, odwołuje się do symbolu, którego interfejs GA nie eksportuje.4 Mój wpis o MetricKit omawia nowe API od czerwcowej bety.

Które API są wycofane w 27.0?

Uwagi wymieniają 11 wycofań. Wycofanie w uwagach do wydania to zdanie; wycofanie w SDK to adnotacja dostępności, którą czyta kompilator, a te dwie rzeczy nie zawsze mówią to samo. Sprawdziłem każdy wpis w nagłówkach i interfejsach Swift w SDK iPhoneOS 27.0 w Xcode 27:24

Wpis w uwagach Co mówi SDK
canOpenURL: is deprecated. Attempt to open the URL and handle any failure instead of validating it first.” (należy próbować otworzyć URL i obsłużyć błąd, zamiast najpierw go walidować) 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)) w UIApplication.h; wpis o canOpenURL zawiera wzorzec zamiennika
„On Demand Resources and the NSBundleResourceRequest API are deprecated. Use Background Assets instead.” (zamiast nich należy używać Background Assets) API_DEPRECATED("Use Background Assets instead.", ios(9.0, 27.0), watchos(2.0, 27.0), tvos(9.0, 27.0)) na klasie, jej metodach priorytetu zachowania oraz stałych powiadomień i priorytetu; wpis o ODR wycenia migrację, a odpowiedź „What you get is a compiler warning” w jego FAQ ma teraz zastrzeżenie o deployment target z następnej sekcji
„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.” (właściwość jest błędnie oznaczona jako nienullowalna, a zamiennikiem jest nowa, nullowalna właściwość filename) originalFilename ma API_DEPRECATED("Use filename instead", ios(9, 27), macos(10.15, 27), tvos(10, 27), visionos(1, 27)); filename jest nullable i API_AVAILABLE(macos(27), ios(27), tvos(27), visionos(27))
Pierwotne API MetricKit, MXMetricManager, MXMetricManagerSubscriber, MXMetricPayload i MXDiagnosticPayload, „are no longer recommended for new adoption. Use MetricManager instead.” (nie są już zalecane do nowych wdrożeń; należy używać MetricManager) API_DEPRECATED("Use MetricManager instead.", ios(13.0, API_TO_BE_DEPRECATED), macos(12.0, API_TO_BE_DEPRECATED)) na MXMetricManager: wycofanie miękkie bez wersji, więc dziś bez ostrzeżenia. Strona referencyjna Apple dla tej klasy podaje wycofanie w 27.0 na każdej platformie, więc dokumentacja i nagłówek się różnią; mój wpis o MetricKit powtarzał wersję ze strony i ma teraz datowaną uwagę o tej rozbieżności6
ScrollHitchTimeMetric i scrollHitchTime(_:) „are no longer part of the new Swift MetricKit API” (nie są już częścią nowego API Swift MetricKit) Zero wystąpień którejkolwiek z nazw w MetricKit.swiftmodule; nie wycofanie, lecz usunięcie
„The FileDocument protocol is deprecated. Use ReadableDocument for read-only documents or Document for documents that support reading and writing.” (należy używać ReadableDocument dla dokumentów tylko do odczytu lub Document dla dokumentów z odczytem i zapisem) FileDocument: deprecated: 100000.0, message: "Conform your type to Document instead."; ReferenceFileDocument: "Use Document protocol instead."; oba miękkie, a Document ma @available(iOS 27.0, macOS 27.0, visionOS 27.0, *), więc zamiennik wymaga minimum 27
„The calendar.deleteEvents schema has been renamed to calendar.deleteEvent.” (schemat został przemianowany) deleteEvents występuje zero razy w AppIntents.swiftmodule; deleteEvent: some AppSchemaIntent tam jest. Zmiana nazwy bez aliasu to błąd kompilacji dla każdego, kto używa starej nazwy
__PKStrokeRenderState has been renamed to PKStrokeRenderStateReference, with PKStrokeRenderStateReference.init(…) replacing PKStrokeRenderState.asObjCRenderState().” (zmiana nazwy, przy czym inicjalizator klasy referencyjnej zastępuje starą metodę) PKStrokeRenderState.h deklaruje @interface PKStrokeRenderState pod API_AVAILABLE(ios(27.0), macos(27.0), visionos(27.0)) z NS_SWIFT_NAME(PKStrokeRenderStateReference); interfejs Swift w ogóle nie ma asObjCRenderState; zamiennikiem, który wskazuje Apple, jest init(_ swiftValue: PKStroke.RenderState) klasy referencyjnej, więc PKStrokeRenderStateReference(state) to nowa postać wywołania, a stare wywołanie się nie kompiluje
„Apps built with the latest SDK must adopt the scene-based life cycle or they fail to launch.” (bez cyklu życia opartego na scenach aplikacja się nie uruchamia) To nie adnotacja, lecz niepowodzenie uruchomienia. Zob. wpis o nakazie scen
„AirPort Utility will no longer be available for new downloads from the App Store.” (AirPort Utility nie będzie już dostępne do nowych pobrań z App Store). Ponowne pobrania nadal działają; „functionality is not guaranteed” (działanie nie jest gwarantowane) na iOS 27 Aplikacja, nie API
„Weather Highlights is currently only available in US English.” (Weather Highlights jest obecnie dostępne tylko w amerykańskiej odmianie angielskiego) Apple umieszcza to pod Deprecations; czyta się to jak uwagę o dostępności

Jedno miękkie wycofanie i jedna zmiana nazwy leżą poza nagłówkami Deprecations. Styl pola tekstowego .roundedBorder ma w interfejsie SwiftUI adnotację deprecated: 100000.0, której komunikat, po usunięciu wewnętrznych odwrotnych apostrofów, brzmi „Use textFieldStyle(.bordered) with textInputBorderShape(.roundedRectangle)”; pasuje do wpisu w New Features, który wprowadza TextInputBorderShape. Wersja 100000.0 to konwencja Apple na „wycofane, ale jeszcze nie”: przy domyślnych ustawieniach kompilator milczy, a komunikat widać tylko w interfejsie. Zmiana nazwy jest twardsza. UINavigationItem.navigationBarMinimization „replaces UINavigationItem.barMinimizeBehavior and UINavigationItem.barMinimizationSafeAreaAdjustment,” (zastępuje te dwie właściwości), a toolbarMinimizationBehavior w SwiftUI w ten sam sposób zastępuje toolbarMinimizeBehavior; żadna z trzech starych nazw nie występuje w nagłówkach UIKit w SDK 27.0 ani w interfejsach Swift UIKit i SwiftUI, więc kod, który ich używa, nie kompiluje się zamiast ostrzegać, czyli ta sama klasa przypadków co deleteEvents.24

Te twarde są też cichsze, niż wyglądają. Kompilator porównuje wersję wycofania z deployment target, nie z SDK, więc ios(3.0, 27.0) daje ostrzeżenie tylko w targecie, którego minimalny iOS to 27.0. Skompilowałem trzy razy z SDK 27 jeden plik, który wywołuje canOpenURL, tworzy NSBundleResourceRequest i czyta originalFilename: przy -target arm64-apple-ios17.0-simulator i przy 26.0 skompilował się bez diagnostyki, a przy 27.0 dał trzy ostrzeżenia: '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. oraz 'originalFilename' was deprecated in iOS 27: Use filename instead.4 Aplikacja z realistycznym minimum nie usłyszy o żadnym z nich od kompilatora; przy domyślnych ustawieniach kompilatora grep z poniższej listy jest jedynym ostrzeżeniem, jakie się dostaje.

Które poprawki zweryfikowałem?

Dwa wpisy Foundation można uruchomić zamiast czytać. Uwagi wymieniają pierwszy jako naprawiony: „+[NSURL URLWithString:] no longer double-encodes the % of valid percent-escape sequences when encoding other invalid characters.” (nie koduje już podwójnie % z poprawnych sekwencji procentowych przy kodowaniu innych niedozwolonych znaków).2 Program testowy buduje NSURL(string:) z trzech ciągów, z których każdy zawiera jedną poprawną sekwencję i jeden znak, który NSURL musi zakodować, i wypisuje absoluteString. Zbudowałem go dwa razy w Xcode 27: raz na Maca i raz dla symulatora z minimalnym iOS 26.0, a następnie uruchomiłem ten jeden plik binarny symulatora, bez zmian, na runtime iOS 26.5 i na runtime iOS 27.0:4

Wejście macOS 26.6.2 i plik binarny symulatora na iOS 26.5 (identyczne) Ten sam plik binarny symulatora na 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

Pierwsza kolumna to stare zachowanie: NSURL koduje spację, a przy okazji zamienia % z sekwencji, która już była poprawna, na %25, więc ścieżka wychodzi inna niż ta, którą sekwencja nazywała. Kolumna iOS 27.0 to poprawka. Jeden Mach-O, którego LC_BUILD_VERSION podaje minos 26.0 i sdk 27.0, dał obie kolumny symulatora, więc o wyniku decyduje system operacyjny, na którym kod działa, a nie SDK, z którym się kompiluje, ani target, dla którego się buduje. Aplikacja zbudowana dziś zachowuje stare kodowanie na runtime iOS 26.5, który testowałem, a uwaga do wydania nie daje powodu, by spodziewać się innego wyniku na jakimkolwiek innym wydaniu 26.x.

Drugi wpis uwagi wymieniają jako nowy, a ja nie zdołałem go odtworzyć tam, gdzie mogę uruchamiać kod: „volumeAvailableCapacityKey is truncated to 3 significant decimal digits at the block count level (e.g., 123,456,789 blocks becomes 123,000,000 blocks).” (wartość jest obcinana do trzech cyfr znaczących na poziomie liczby bloków).2 W symulatorze iOS 27.0 URL.resourceValues(forKeys: [.volumeAvailableCapacityKey]) zwróciło 226 009 026 560 bajtów, a statfs na tej samej ścieżce zwróciło f_bavail 55 177 985 przy f_bsize 4096, co po pomnożeniu daje dokładnie tę samą liczbę; liczba bloków obcięta do trzech cyfr znaczących wyniosłaby 55 100 000 bloków, czyli 225 689 600 000 bajtów.4 Mac hosta zgłosił tym samym kodem 55 177 998 bloków. Moje odczytanie jest takie, że obcięcie mieszka w jądrze urządzenia, a nie w Foundation, i że symulator, który pyta jądro Maca o wolumin Maca, nie może go pokazać; nie uruchamiałem tego testu na urządzeniu, więc wpis należy traktować jako niesprawdzony, a nie fałszywy, i spodziewać się zaokrąglenia w raportach wolnego miejsca z urządzeń, które dotąd były dokładne.

Co nowego zmienia kod, który już istnieje?

Ograniczona historia w HealthKit. Uwaga to jedna linijka, „Updated HealthKit permissions flow now lets users grant apps access to limited history or full history,” (zaktualizowany przepływ uprawnień pozwala użytkownikom przyznać aplikacjom dostęp do ograniczonej lub pełnej historii), a konsekwencje niesie dokumentacja API.25 Po ekranie typów danych „a second screen prompts them to choose how much historical data to grant your app, either a recent limited window or their full history,” (drugi ekran prosi o wybór, ile danych historycznych przyznać aplikacji: niedawne ograniczone okno albo pełną historię) oraz „Time-bound authorization applies only to sample types.” (autoryzacja ograniczona w czasie dotyczy tylko typów próbek).5 Nowa metoda earliestAuthorizedSampleDate(for:), dostępna od iOS 27.0 i watchOS 27.0, zwraca słownik z HKObjectType na najwcześniejszą datę do odczytu, a granica nie leży tam, gdzie można by zgadywać: „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 ocenia granicę względem daty końca próbki, więc może obsłużyć zapytanie próbką, która zaczyna się przed najwcześniejszą datą autoryzacji, o ile kończy się po niej).45 Reguła prywatności pozostaje: „Your app can’t distinguish between denied and full access; limited authorization is the only state your app can identify, by design.” (aplikacja nie odróżnia odmowy od pełnego dostępu; ograniczona autoryzacja to jedyny stan, który może rozpoznać, i tak to zaprojektowano).5 Wskazówka Apple brzmi: wszystko sprzed zwróconej daty traktować jako nieznane, a nie nieobecne, i przycinać datę początkową każdego zapytania osobno dla każdego typu. Każdy trend, punkt odniesienia czy seria obliczane z HealthKit muszą teraz być poprawne w oknie, które wybrał użytkownik. Wpis o HealthKit omawia czerwcowe dodatki i nie obejmuje zmiany modelu uprawnień.

Kody ofert w 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 realizacji kodów ofert zwracają teraz VerificationResult z obiektem Transaction przy powodzeniu, a przy niepowodzeniu błąd opisujący przyczynę).2 W interfejsie presentOfferCodeRedeemSheet(in:) jest wycofane w 27.0 z komunikatem „Use presentOfferCodeRedeemSheet(from:options:) instead.”, a zamiennikiem jest presentOfferCodeRedeemSheet(from viewController: UIViewController, options: Set<RedeemOption> = []) async throws -> VerificationResult<Transaction>, dostępny od iOS 27.0.4 Kod, który prezentował arkusz, a potem nasłuchiwał wyniku na Transaction.updates, może teraz po prostu wykonać await.

Core AI w tle. „The system now restricts background access to the Neural Engine, similar to GPU usage restrictions,” (system ogranicza teraz dostęp do Neural Engine w tle, podobnie jak do GPU) oraz „Neural Engine memory usage is now attributed to your app process instead of the system, and appears in the Allocations instrument.” (zużycie pamięci Neural Engine jest teraz przypisywane procesowi aplikacji zamiast systemowi i pojawia się w instrumencie Allocations). Dostęp w tle „requires the new entitlement: “com.apple.developer.background-tasks.continued-processing.inference”.” (wymaga tego nowego entitlementu).2 Aplikacja, która na 26 uruchamiała wnioskowanie z zadania w tle i nigdy o nic nie prosiła, zastaje Neural Engine zamknięty, dopóki nie ma entitlementu, a używana przez nią pamięć Neural Engine pojawia się teraz w Allocations pod jej własnym procesem.

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.” (zlokalizowane pakiety zasobów zmniejszają zajętość pamięci aplikacji; system dostarcza odpowiednio zlokalizowane pakiety na podstawie preferowanych języków użytkownika).2 Dla aplikacji, która porzuca On Demand Resources, zlokalizowane pakiety są funkcją zastępującą tagi per język.

Alerty krytyczne. Uwagi wymieniają zachowanie alertów krytycznych jako naprawione: „Critical alerts are automatically turned on for any apps that request your permission to enable notifications.” (alerty krytyczne są automatycznie włączane dla każdej aplikacji, która prosi o zgodę na powiadomienia).2 Wpis nie mówi nic więcej, więc warto ponownie przetestować każdy przepływ powiadomień, który w betach wyglądał na nadmiernie uprzywilejowany.

Menu, @State, TLS i nowy slice. Cztery wpisy mają własne artykuły. Pasek menu i menu kontekstowe w iPadOS 27 i macOS 27 „present a reduced set of menu item images,” (pokazują ograniczony zestaw obrazów pozycji menu), a nadpisaniem jest preferredImageVisibility na UIMenuElement: zob. obrazy w menu. Przepisanie makra @State jest wpisem SwiftUI w tych uwagach i zmienia to, co kompiluje się w Xcode 27: zob. wpis o Xcode 27 z reprodukcją oraz wpis o makrze @State z audytem. Ostrzejszy wymóg TLS dla ruchu MDM, rejestracji i aktualizacji oprogramowania zaczyna się „in 27.0 operating systems” (w systemach operacyjnych 27.0): zob. audyt TLS. A arm64e.x1 z CPA2 na „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’ach z układem A20 Pro lub nowszym, Macach z M6 lub nowszym i Apple Watch z S11 lub nowszym): zob. arm64e.x1.2

Drobiazgi warte grepa. System zyskuje w Swift stat, lstat, fstat i fstatat z typem Stat i FilePath.stat(), a uwagi wymieniają jako naprawiony konflikt między tymi metodami a niekwalifikowanym stat() we własnych rozszerzeniach. NSTextTable „and its related objects and types are available to UIKit clients starting with OS 27 releases.” (wraz z powiązanymi obiektami i typami jest dostępny dla klientów UIKit od wydań systemów 27). AsyncImage „now automatically caches downloaded images using HTTP caching protocols,” (automatycznie buforuje teraz pobrane obrazy zgodnie z protokołami pamięci podręcznej HTTP), z inicjalizatorami URLRequest i View.asyncImageURLSession(_:) do sterowania. „When linked on iOS 27, tvOS 27, macCatalyst 27, or visionOS 27 SDKs,” (po zlinkowaniu z tymi SDK) UIScene.extendStateRestoration i UIScene.completeStateRestoration rozszerzają przywracanie stanu na przejście z tła na pierwszy plan. A SwiftData wymienia poprawkę dla „a deadlock for @Query when saving a ModelContext on a background actor while scheduling new async tasks for a ModelActor.” (zakleszczenia @Query przy zapisywaniu ModelContext na aktorze w tle podczas planowania nowych zadań asynchronicznych dla ModelActor).2

Znane problemy, które warto uwzględnić w planach

  • Encje photos.asset przestają się kompilować. „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.” (istniejące encje zgodne z tym schematem mogą przestać się kompilować w SDK 27, bo w tym wydaniu do schematu dodano nowe właściwości). Obejście: „To continue conforming to the schema, adopt the additional properties and move the code behind an availability check.” (należy przyjąć dodatkowe właściwości i przenieść kod za sprawdzenie dostępności).2 Makro nie powie, które właściwości: pusta zgodność @AppEntity(schema: .photos.asset) kompiluje się bez uwag pod swiftc, a jej rozwinięcie dodaje tylko zgodność z AssistantSchemaEntity niosącą nazwę schematu. Lista pochodzi z kroku metadanych App Intents w Xcode, appintentsmetadataprocessor, który przerywa build jednym błędem na każdą brakującą właściwość. Uruchomiony ręcznie na tej pustej zgodności z SDK 27.0 zgłasza ich 12, każdą z fix-item: hasSuggestedEdits: Bool, isFavorite: Bool, isHidden: Bool, creationDate: Date?, location: GeoToolbox.PlaceDescriptor?, assetType: <#PhotoAssetType#>?, filter: <#PhotoFilterEffectType#>?, exposure: Double?, saturation: Double?, warmth: Double?, aperture: Double? i isPortraitModeEnabled: Bool?; dwa symbole zastępcze <#…#> oznaczają enumy deklarowane samodzielnie względem schematów enumów .photos.assetType i .photos.filterType, które interfejs nazywa PhotoAssetType i PhotoFilterEffectType. Nie mogłem porównać tej listy z SDK 26, bo jedynym Xcode na tym Macu jest 27A266a.4
  • Tokeny Now Playing trafiają do produkcji.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.” (zawsze przydzielają tokeny push startu i aktualizacji Now Playing dla środowiska APNs production, nawet gdy aps-environment jest ustawione na development). Obejście: „Use the production environment for testing and validation.” (do testów i walidacji należy używać środowiska production).2 Klasa znajduje się w nowym frameworku NowPlaying, oznaczonym jako niedostępny na macOS i visionOS.4
  • SpotlightSearchTool przepełnia model na urządzeniu. Bez konfiguracji „the tool’s description and parameter schema alone exceed the on-device model’s context window before any prompt is added.” (sam opis narzędzia i schemat parametrów przekraczają okno kontekstu modelu na urządzeniu, zanim dojdzie jakikolwiek prompt). Obejście: ukierunkowany przewodnik, „.focused(.communications), .focused(.calendar), .focused(.documents), .focused(.visualMedia), or .focused(.audio).”2 API istnieje: SpotlightSearchTool.Guide.focused(_ domain: ContentDomain = .items) stoi obok .complete i .dynamic(_:) w interfejsie _CoreSpotlight_FoundationModels.4 Mój wpis o AI na urządzeniu omawia to narzędzie; jego czerwcowe kroki wdrożenia łączyły domyślną konfigurację z modelem systemowym i mają teraz datowaną korektę.
  • Ślady wydajności z Centrum sterowania. „Gathering PowerProfiler and Lookback traces through the Performance Trace Control Center widget might fail to produce traces.” (zbieranie śladów PowerProfiler i Lookback przez widżet Performance Trace w Centrum sterowania może nie dawać śladów). Obejście, które proponuje Apple, to „Gather traces on iOS 27.0 beta 1 or earlier,” (zbierać ślady na iOS 27.0 beta 1 lub wcześniejszym), co nie jest obejściem dostępnym dla większości zespołów na urządzeniu, które już się zaktualizowało.2
  • Testowanie StoreKit. „Changing the storefront or locale using SKTestSession doesn’t propagate through Storefront.updates,” (zmiana sklepu lub ustawień regionalnych przez SKTestSession nie propaguje się przez Storefront.updates) oraz „Failed purchases using SKTestSession might display error dialogs even when dialogsDisabled is set to true.” (nieudane zakupy przez SKTestSession mogą pokazywać okna błędów, nawet gdy dialogsDisabled ma wartość true).2
  • Skróty i UnionValue. Parametr z „two number-related types (for example, both Int and Double)” (dwoma typami liczbowymi, na przykład jednocześnie Int i Double) pokazuje opcję liczbową dwa razy; obejściem według Apple jest zadeklarowanie jednego.2

Co zrobiłbym w tym tygodniu

  1. Zarchiwizować raz z Xcode 27 i przejść z aplikacją przez powyższą listę zmian po zlinkowaniu z 27 przed TestFlight: klucze ekranu startowego, cykl życia scen, każdy TabView, którego zaznaczenie może wskazać ukrytą kartę, i każdy sheet, który dziedziczył modyfikatory kontrolek.2
  2. Zbudować kod MetricKit z SDK GA przed wydaniem; plik binarny, który nadal odwołuje się do ScrollHitchTimeMetric lub starego typu ratio, to według opisu Apple awaria przy uruchomieniu, a interfejs nie eksportuje już tej nazwy.24
  3. Przeszukać grepem kod pod kątem canOpenURL, NSBundleResourceRequest, originalFilename, FileDocument, deleteEvents, asObjCRenderState i barMinimizeBehavior; pierwsze trzy ostrzegają tylko przy deployment target 27.0, FileDocument jest miękkie, a ostatnie trzy nie kompilują się, więc grep jest jedynym ostrzeżeniem.4
  4. Przy odczycie z HealthKit wywołać earliestAuthorizedSampleDate(for:) po autoryzacji i przyciąć datę początkową każdego zapytania osobno dla każdego typu; potem zdecydować, co oznacza seria lub punkt odniesienia w oknie wybranym przez użytkownika.5
  5. Zapisywać w zgłoszeniach błędów numer buildu z trzech miejsc: ProcessInfo na urządzeniu, SystemVersion.plist SDK na maszynie budującej i simctl list runtimes dla reprodukcji w symulatorze. Różnią się, a poprawka obecna w 24A437 może nie być w 24A434.4
  6. Jeśli URL-e powstają z ciągów przez NSURL(string:), nadal testować na iOS 26: podwójne kodowanie %25 naprawia system, nie przebudowa, a jeden plik binarny z Xcode 27 daje je na runtime 26.5, a na 27.0 nie.4

Często zadawane pytania

Kiedy ukazał się iOS 27.0 i jaki to build?

W poniedziałek 14 września 2026 roku, jako build 24A437, ten sam, który Apple opublikowało jako release candidate w piątek 11 września. iPadOS 27.0 ma ten sam numer.1

Który build iOS 27.0 jest w SDK Xcode 27?

SDK iPhoneOS 27.0 w Xcode 27 (27A266a) podaje ProductBuildVersion 24A430, a runtime symulatora iOS 27.0 podaje 24A434. Żaden z nich nie jest buildem urządzenia.4

Co jest wycofane w iOS 27?

Uwagi wymieniają 11 wpisów: canOpenURL:, On Demand Resources i NSBundleResourceRequest, PHAssetResource.originalFilename, pierwotne API MetricKit, ScrollHitchTimeMetric, FileDocument, schemat calendar.deleteEvents, __PKStrokeRenderState, nakaz cyklu życia scen w UIKit, AirPort Utility oraz uwagę o języku Weather Highlights. Trzy mają w SDK twarde wersje wycofania 27.0 i ostrzegają tylko przy deployment target 27.0, dwa są miękkie, dwa to zmiany nazw, jedno to usunięcie, a trzy nie są zmianami API.24

Czy aplikację trzeba przebudować dla iOS 27?

Nie po to, by dalej działała, a wpisy dzielą się na trzy grupy. Zależne od SDK: 12 powyższych kategorii po zlinkowaniu z 27, które nie zmieniają nic, dopóki aplikacja nie zostanie zbudowana z SDK 27.0. Systemowe, docierające do każdego pliku binarnego na urządzeniu z 27.0: ograniczenie Neural Engine w tle i jego entitlement, przepływ uprawnień ograniczonej historii w HealthKit, egzekwowanie TLS dla ruchu MDM i aktualizacji, zmiana obrazów w menu na iPadOS 27, poprawka alertów krytycznych i poprawka kodowania w NSURL. Binaria z bety: kod MetricKit zbudowany z SDK beta, który według Apple trzeba przekompilować z SDK GA, aby uniknąć awarii. Minimalnym SDK w App Store są od 28 kwietnia 2026 roku SDK 26; wymóg SDK 27 to późniejszy termin, którego te uwagi nie wyznaczają.23

Gdzie są uwagi do wydania iOS 27?

W witrynie dokumentacji Apple dla deweloperów, pod iOS & iPadOS Release Notes, jedna strona dla 27.0, uporządkowana według obszarów z sekcjami New Features, Resolved Issues, Known Issues i Deprecations pod każdym z nich. Liczby w tym wpisie pochodzą z tej strony pobranej 15 września 2026 roku.2

Czy poprawka NSURL jest w SDK, czy w systemie?

W systemie. Jeden plik binarny symulatora, zbudowany w Xcode 27 z SDK 27.0 przy minimalnym iOS 26.0, koduje podwójnie na runtime iOS 26.5, a na runtime iOS 27.0 nie, a build dla Maca na macOS 26.6.2 też koduje podwójnie; między dwoma uruchomieniami w symulatorze nie zmieniło się nic poza systemem operacyjnym.4

Źródła


  1. Apple, Releases, kanał RSS pobrany 15 września 2026 roku: „iOS 27.0 (24A437)”, „iPadOS 27.0 (24A437)”, „macOS 27.0 (26A428)”, „Xcode 27 (27A266a)”, „tvOS 27.0 (24J361)”, „visionOS 27.0 (24M362)” i „watchOS 27.0 (24R364)” z datą poniedziałek 14 września 2026; „iOS 27.0 RC (24A437)” z datą piątek 11 września 2026; „iOS 27.0 beta (24A5355q)” z datą poniedziałek 8 czerwca 2026. 

  2. Apple, iOS & iPadOS 27 Release Notes, pobrane 15 września 2026 roku po wydaniu GA. Liczby (93 obszary z nagłówkami; 65 New Features, 197 Resolved Issues, 23 Known Issues, 11 Deprecations) to pozycje list pod nagłówkami każdego obszaru. Cytowane wpisy, według numerów radar: akapit Overview; UIKit, New Features (ekran startowy 168247372, prezentowane kontrolery widoków 170005251, pasek zakresu 173860616, zewnętrzne wyświetlacze 177015874, przywracanie stanu 161843040, obrazy w menu i preferredImageVisibility 170479084, navigationBarMinimization 177953926), Resolved Issues (akcesory paska stanu 162044221, zmiana rozmiaru 166422120, 178555304, 178558224, 178558897, 178559386, 178560235, 178561952, 178562971, 178573319), Deprecations (cykl życia scen 141837548, canOpenURL: 179874781); SwiftUI, New Features (TabView 164516837, zaznaczalny Text 79770704, TextRenderer na zaznaczalnym Text 158160386, .sceneAccessory 175548901, AsyncImage 78212597, @State 105893279, obrazy w menu 170480710, TextInputBorderShape 173362083, toolbarMinimizationBehavior 177954148), Resolved Issues (sheet i popover 167448274, containerRelativeFrame 165913417, scrollPosition po stuknięciu paska stanu 111501113, FB12477370), New Features (LabeledContent w Menu 175594929), Deprecations (FileDocument 178776840); MetricKit, New Features (HitchTimeRatio 180024784) i Deprecations (174892111, 180455992); Foundation, New Features (volumeAvailableCapacityKey 75545872) i Resolved Issues (NSURL 161588649, FB20439045); App Intents, Known Issues (photos.asset 181800016, FB23652582) i 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) i 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, uwagi do wydania App Store Connect, pobrane 15 września 2026 roku. Wpis z 14 września 2026 zacytowany w całości w tabeli; wpis z 9 września 2026 odnotowuje przesyłki z SDK RC. Minimum SDK 26 obowiązujące od 28 kwietnia 2026 roku pochodzi ze strony Apple Upcoming requirements

  4. Reprodukcja autora na Xcode 27.0 (27A266a) z DEVELOPER_DIR wskazującym na niego, macOS 26.6.2 (25G83), 15 września 2026 roku. Buildy: iPhoneOS.sdk/System/Library/CoreServices/SystemVersion.plist ma ProductBuildVersion 24A430 i ProductVersion 27.0; xcrun simctl list runtimes wypisuje „iOS 27.0 (27.0 - 24A434)”. Nagłówki i interfejsy, wszystkie pod iPhoneOS.sdk/System/Library/Frameworks: UIKit.framework/Headers/UIApplication.h linia 98 (canOpenURL:); Foundation.framework/Headers/NSBundle.h linie 721 do 796 (NSBundleResourceRequest); Photos.framework/Headers/PHAssetResource.h linie 29 i 33; MetricKit.framework/Headers/MXMetricManager.h linia 32; MetricKit.framework/Modules/MetricKit.swiftmodule/arm64e-apple-ios.swiftinterface, zero trafień dla ScrollHitchTimeMetric lub scrollHitchTime, cztery dla HitchTimeRatio; SwiftUI.framework/Modules/SwiftUI.swiftmodule/arm64e-apple-ios.swiftinterface linie 23088 do 23093 (FileDocument), 9334 do 9338 (ReferenceFileDocument), 1728 do 1731 (Document), 9489 (komunikat .roundedBorder), 13763 (toolbarMinimizationBehavior); zero trafień całych identyfikatorów dla barMinimizeBehavior, barMinimizationSafeAreaAdjustment lub toolbarMinimizeBehavior w UIKit.framework/Headers, UIKit.framework/Modules i SwiftUI.framework/Modules (jedyne trafienia podciągów to modyfikator toolbarMinimizationSafeAreaAdjustment i jego typ ToolbarMinimizationSafeAreaAdjustment), podczas gdy UINavigationItem.h deklaruje navigationBarMinimization; AppIntents.framework/Modules/AppIntents.swiftmodule/arm64e-apple-ios.swiftinterface, zero trafień dla deleteEvents, deleteEvent: some AppIntents::AppSchemaIntent w linii 12608; PencilKit.framework/Headers/PKStrokeRenderState.h linie 15 do 17 oraz PencilKit.framework/Modules/PencilKit.swiftmodule/arm64e-apple-ios.swiftinterface z zerem trafień dla asObjC, convenience public init(_ swiftValue: PencilKit::PKStroke.PencilKit::RenderState) na PKStrokeRenderStateReference w linii 46 i odwrotnym public init(_ objcValue: PencilKit::PKStrokeRenderStateReference) wewnątrz PKStroke.RenderState w linii 38; StoreKit.framework/Modules/StoreKit.swiftmodule/arm64e-apple-ios.swiftinterface linie 311 do 322; HealthKit.framework/Modules/HealthKit.swiftmodule/arm64e-apple-ios.swiftinterface linie 741 i 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 linie 180 do 182 i 276 do 278; _CoreSpotlight_FoundationModels.framework/Modules/_CoreSpotlight_FoundationModels.swiftmodule/arm64e-apple-ios.swiftinterface linie 64 do 78 i 100 do 129. Test photos.asset: 15-liniowy plik Swift importujący AppIntents i CoreLocation, który deklaruje @AppEntity(schema: .photos.asset) struct ProbeAsset z EntityQuery, id, displayRepresentation i bez właściwości schematu; swiftc -c -target arm64-apple-ios27.0-simulator skompilował go z kodem wyjścia 0 i bez diagnostyki, a -Xfrontend -dump-macro-expansions pokazało, że makro dodaje, pod atrybutem @available(iOS 27.0, macOS 27.0, tvOS 27.0, watchOS 27.0, visionOS 27.0, *), extension ProbeAsset: AssistantSchemaEntity { static let __appSchemaEntity = "photos.asset" } oraz puste rozszerzenie AppEntity. Ponowne uruchomienie własnej linii swift-frontend drivera (przechwyconej przez swiftc -###) z -emit-const-values-path i -const-gather-protocols-file wskazującymi na napisaną przeze mnie listę 18 protokołów (AppIntent, AppEntity, AppEnum, AssistantSchemaEntity, EntityQuery i pozostałe protokoły App Intents) dało plik .swiftconstvalues, a 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 na nim zakończył się kodem 255, komunikatem „At least one halting error was produced during export” i 12 liniami postaci „error: Missing required property ‘exposure’ from AppSchemaEntity ‘photos.asset’”, każdą z fix-item w rodzaju „var exposure: Double?” (fix-ity dla assetType i filter niosą symbole zastępcze <#PhotoAssetType#>? i <#PhotoFilterEffectType#>?; AppIntents.framework/Modules/AppIntents.swiftmodule/arm64e-apple-ios.swiftinterface deklaruje te nazwy w liniach 11695 i 11705 jako AppSchema.Enum("PhotoAssetType") pod assetType i AppSchema.Enum("PhotoFilterEffectType") pod filterType); wywołanie odzwierciedla krok metadanych Xcode, ale nie jest bajt w bajt tym z systemu budowania, którego lista protokołów pochodzi z SWIFT_EMIT_CONST_VALUE_PROTOCOLS. Test ostrzeżeń o wycofaniu: 11-liniowy plik Swift importujący UIKit, Foundation i Photos, który wywołuje canOpenURL(_:), tworzy NSBundleResourceRequest(tags:) i czyta PHAssetResource.originalFilename, skompilowany przez swiftc -c z SDK iPhoneSimulator 27.0 przy -target arm64-apple-ios17.0-simulator, ios26.0 i ios27.0: zero diagnostyki przy 17.0 i 26.0, trzy ostrzeżenia [#DeprecatedDeclaration] przy 27.0, zacytowane w tekście. Test NSURL: 16-liniowy plik Swift wypisujący NSURL(string:)?.absoluteString dla trzech wejść z tabeli, skompilowany przez swiftc -O dla hosta oraz, jeden raz, przez swiftc -O -target arm64-apple-ios26.0-simulator z SDK iPhoneSimulator 27.0 (otool -l na wyniku pokazuje LC_BUILD_VERSION z minos 26.0 i sdk 27.0); ten jeden plik binarny symulatora uruchomiłem przez xcrun simctl spawn na uruchomionym symulatorze z runtime iOS 26.5 (23F77), a potem na uruchomionym symulatorze iPhone 18 Pro z runtime iOS 27.0 (24A434); wyjścia z macOS i iOS 26.5 były identyczne, a wszystkie wyjścia są takie jak w tabeli. Test pojemności: URL(fileURLWithPath: NSHomeDirectory()).resourceValues(forKeys: [.volumeAvailableCapacityKey, .volumeTotalCapacityKey, .volumeAvailableCapacityForImportantUsageKey]) plus statfs; uruchomienie w symulatorze wypisało volumeAvailableCapacity = 226009026560, f_bavail = 55177985, f_bsize = 4096; uruchomienie na hoście wypisało volumeAvailableCapacity = 226009079808, f_bavail = 55177998

  5. Apple, dokumentacja HealthKit, earliestAuthorizedSampleDate(for:) i Authorizing access to health data, pobrane 15 września 2026 roku. Strona metody podaje dostępność iOS 27.0, iPadOS 27.0, Mac Catalyst 27.0, macOS 27.0, visionOS 27.0 i watchOS 27.0 i jest źródłem zdania o dacie końca oraz „Your app can’t distinguish between denied and full access; limited authorization is the only state your app can identify, by design.”; przewodnik jest źródłem „people can choose to grant your app access to only a limited window of recent data rather than their full history,”, zdania o drugim ekranie oraz „Time-bound authorization applies only to sample types.” 

  6. Apple, MXMetricManager, dokumentacja klasy MetricKit, pobrana 15 września 2026 roku przez dokumentacyjny JSON Apple: dostępność podaje iOS 13.0, iPadOS 13.0, Mac Catalyst 13.1, macOS 12.0 i visionOS 1.0 z deprecatedAt 27.0 na każdej, a podsumowanie wycofania brzmi „Use MetricManager instead.” 

Powiązane artykuły

canOpenURL zostało wycofane: co wywoływać zamiast niego

Apple wycofało canOpenURL w trzech zdaniach i obcięło limit listy schematów do 25 wpisów. Oto zamiennik i jedyne sprawdz…

21 min czytania

Makro @State: co przestaje się kompilować w Xcode 27

Xcode 27 przepisuje @State ze SwiftUI na makro Swift. Łamie to zgodność przy zmianie toolchainu, nie deployment target; …

17 min czytania

Projektowanie dla iPhone'a Duo: co się przesuwa, co się dzieli, a co zostaje

Przewodnik projektowy Apple dla iPhone'a Duo i trzy Tech Talki odczytane jako zbiór reguł: dwie klasy rozmiaru zamiast u…

17 min czytania