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
TabViewprzy ukrytym zaznaczeniu, systemowe zaznaczanie tekstu w zaznaczalnymText, 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 wcontainerRelativeFrame, akcesory paska stanu, reguły zmiany rozmiaru na iPadzie podUIRequiresFullScreenoraz dwie mniejsze zmiany w SwiftUI dotyczące menu i przewijania na górę.2 - Rekompilacja albo awaria.
HitchTimeMetric.ratiow MetricKit mierzy teraz w nowej jednostceHitchTimeRatio, aScrollHitchTimeMetriczniknął 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 (oznaczoneAPI_TO_BE_DEPRECATED, a więc wycofanie miękkie),ScrollHitchTimeMetric,FileDocument,calendar.deleteEventsprzemianowane nacalendar.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%2520na runtime iOS 26.5 i%20na runtime iOS 27.0, a build dla Maca zachowuje się jak stara strona, więc poprawka podąża za systemem, nie za SDK. ObcięcievolumeAvailableCapacityKeydo 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.plistmust contain one of the following keys:UILaunchStoryboardName,UILaunchStoryboards,UILaunchScreen, orUILaunchScreens. Apps that don’t include a launch screen are rejected when the App Store begins accepting apps built with the 27.0 SDK.” (aplikacje zbudowane z SDK 27.0 lub nowszym muszą zawierać ekran startowy zadeklarowany jednym z tych czterech kluczy wInfo.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, aTabViewenforces that its selection is set to a visible tab.TabViewmight crash when its selection is set to a hidden or otherwise unavailable tab.” (TabViewwymusza, aby zaznaczenie wskazywało widoczną kartę, i może ulec awarii, gdy wskazuje kartę ukrytą lub niedostępną). Zaznaczenie przywrócone zUserDefaults, 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, aTextview with.textSelection(.enabled)applied now supports user-interactive selection using the system text selection UI.” (widokTextz.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ż, żeTextRendererdziała na zaznaczalnymText. - 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
UISearchControlleruses center search-bar placement, the scope bar appears inline on the same row as the search field rather than on a separate row beneath it.” (gdyUISearchControlleruż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,
windowExternalDisplayNonInteractivescenes are no longer offered automatically by the system. UseUIViewController.registerSceneAccessory(_:)with aUISceneAccessory.externalNonInteractiveinstance to display non-interactive content on external display scenes.” (system nie oferuje już automatycznie scenwindowExternalDisplayNonInteractive; nieinteraktywną treść na zewnętrznych wyświetlaczach pokazuje się przez rejestrację akcesorium sceny). SwiftUI dostaje te same drzwi przez.sceneAccessoryzExternalNonInteractiveAccessory. - Sheet i popover. Wymienione jako naprawione: „In apps built with the 27.0 SDKs, the
controlSize,buttonSizing,buttonRepeatBehavior,menuIndicatorVisibility, andButtonBorderShapeenvironment values are now reset to their default values in sheets and popovers.” (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 aScrollView’s non-scrollable axis, causing the calculated scrollable content size to be too small,” (błędnie uwzględniał marginesy bezpiecznego obszaru na nieprzewijalnej osiScrollView, przez co obliczony rozmiar przewijanej treści był za mały), więc poziomyScrollViewzcontainerRelativeFrame(.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 jakostatusBarFrame,statusBarOrientation,statusBarStyleiisStatusBarHidden, „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
UIRequiresFullScreendostają „a discrete change to a newUIScreenwith an updated bounds” (dyskretną zmianę na nowyUIScreenze zaktualizowanymi granicami) zamiast ciągłych aktualizacji rozmiaru, graniceUIScreen.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
LabeledContentview used inside aMenumaps its value to the platform menu item’s subtitle,” (widokLabeledContentużyty wMenumapuje swoją wartość na podtytuł systemowej pozycji menu) oraz, wymienione jako naprawione, „In apps built with the 2027 SDKs, tapping the status bar to scroll aScrollViewto its top correctly updates a boundscrollPosition.” (stuknięcie paska stanu w celu przewinięciaScrollViewna górę poprawnie aktualizuje powiązanyscrollPosition). Etykieta menu, która niosła wartość ze względów układu, zyskuje teraz podtytuł, a bindingscrollPosition, 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.assetprzestają 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 podswiftc, a jej rozwinięcie dodaje tylko zgodność zAssistantSchemaEntityniosą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?iisPortraitModeEnabled: Bool?; dwa symbole zastępcze<#…#>oznaczają enumy deklarowane samodzielnie względem schematów enumów.photos.assetTypei.photos.filterType, które interfejs nazywaPhotoAssetTypeiPhotoFilterEffectType. 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. „
RemoteMediaSessionandRemoteMediaSessionRepresentablealways provision Now Playing start and update push tokens for theproductionAPNs environment, even if theaps-environmentconfiguration is set todevelopment.” (zawsze przydzielają tokeny push startu i aktualizacji Now Playing dla środowiska APNsproduction, nawet gdyaps-environmentjest ustawione nadevelopment). Obejście: „Use theproductionenvironment for testing and validation.” (do testów i walidacji należy używać środowiskaproduction).2 Klasa znajduje się w nowym frameworkuNowPlaying, oznaczonym jako niedostępny na macOS i visionOS.4 SpotlightSearchToolprzepeł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.completei.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
PowerProfilerandLookbacktraces through thePerformance TraceControl Center widget might fail to produce traces.” (zbieranie śladówPowerProfileriLookbackprzez widżetPerformance Tracew 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
SKTestSessiondoesn’t propagate throughStorefront.updates,” (zmiana sklepu lub ustawień regionalnych przezSKTestSessionnie propaguje się przezStorefront.updates) oraz „Failed purchases usingSKTestSessionmight display error dialogs even whendialogsDisabledis set to true.” (nieudane zakupy przezSKTestSessionmogą pokazywać okna błędów, nawet gdydialogsDisabledma 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
- 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 - Zbudować kod MetricKit z SDK GA przed wydaniem; plik binarny, który nadal odwołuje się do
ScrollHitchTimeMetriclub starego typuratio, to według opisu Apple awaria przy uruchomieniu, a interfejs nie eksportuje już tej nazwy.24 - Przeszukać grepem kod pod kątem
canOpenURL,NSBundleResourceRequest,originalFilename,FileDocument,deleteEvents,asObjCRenderStateibarMinimizeBehavior; pierwsze trzy ostrzegają tylko przy deployment target 27.0,FileDocumentjest miękkie, a ostatnie trzy nie kompilują się, więc grep jest jedynym ostrzeżeniem.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 - Zapisywać w zgłoszeniach błędów numer buildu z trzech miejsc:
ProcessInfona urządzeniu,SystemVersion.plistSDK na maszynie budującej isimctl list runtimesdla reprodukcji w symulatorze. Różnią się, a poprawka obecna w 24A437 może nie być w 24A434.4 - Jeśli URL-e powstają z ciągów przez
NSURL(string:), nadal testować na iOS 26: podwójne kodowanie%25naprawia 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
-
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. ↩↩↩↩↩
-
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
preferredImageVisibility170479084,navigationBarMinimization177953926), 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 (TabView164516837, zaznaczalnyText79770704,TextRendererna zaznaczalnymText158160386,.sceneAccessory175548901,AsyncImage78212597,@State105893279, obrazy w menu 170480710,TextInputBorderShape173362083,toolbarMinimizationBehavior177954148), Resolved Issues (sheet i popover 167448274,containerRelativeFrame165913417,scrollPositionpo stuknięciu paska stanu 111501113, FB12477370), New Features (LabeledContentwMenu175594929), Deprecations (FileDocument178776840); MetricKit, New Features (HitchTimeRatio180024784) i Deprecations (174892111, 180455992); Foundation, New Features (volumeAvailableCapacityKey75545872) i Resolved Issues (NSURL161588649, FB20439045); App Intents, Known Issues (photos.asset181800016, FB23652582) i Deprecations (calendar.deleteEvent176751155); On Demand Resources, Deprecations (170066290); PhotoKit, Deprecations (175412725, FB22589474); PencilKit, Deprecations (176410709); AirPort Utility, Deprecations (158364073); Weather Highlights, Deprecations (164408676); HealthKit, New Features (172310874); StoreKit, New Features (141012819); Core AI, New Features (174796039, 179282606); Background Assets, New Features (163944365); Notifications, Resolved Issues (179179362); Network Security, New Features (176055825); Hardware Security, New Features (152103975); System, New Features (160612181) 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). ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
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. ↩↩↩↩
-
Reprodukcja autora na Xcode 27.0 (27A266a) z
DEVELOPER_DIRwskazującym na niego, macOS 26.6.2 (25G83), 15 września 2026 roku. Buildy:iPhoneOS.sdk/System/Library/CoreServices/SystemVersion.plistmaProductBuildVersion24A430 iProductVersion27.0;xcrun simctl list runtimeswypisuje „iOS 27.0 (27.0 - 24A434)”. Nagłówki i interfejsy, wszystkie podiPhoneOS.sdk/System/Library/Frameworks:UIKit.framework/Headers/UIApplication.hlinia 98 (canOpenURL:);Foundation.framework/Headers/NSBundle.hlinie 721 do 796 (NSBundleResourceRequest);Photos.framework/Headers/PHAssetResource.hlinie 29 i 33;MetricKit.framework/Headers/MXMetricManager.hlinia 32;MetricKit.framework/Modules/MetricKit.swiftmodule/arm64e-apple-ios.swiftinterface, zero trafień dlaScrollHitchTimeMetriclubscrollHitchTime, cztery dlaHitchTimeRatio;SwiftUI.framework/Modules/SwiftUI.swiftmodule/arm64e-apple-ios.swiftinterfacelinie 23088 do 23093 (FileDocument), 9334 do 9338 (ReferenceFileDocument), 1728 do 1731 (Document), 9489 (komunikat.roundedBorder), 13763 (toolbarMinimizationBehavior); zero trafień całych identyfikatorów dlabarMinimizeBehavior,barMinimizationSafeAreaAdjustmentlubtoolbarMinimizeBehaviorwUIKit.framework/Headers,UIKit.framework/ModulesiSwiftUI.framework/Modules(jedyne trafienia podciągów to modyfikatortoolbarMinimizationSafeAreaAdjustmenti jego typToolbarMinimizationSafeAreaAdjustment), podczas gdyUINavigationItem.hdeklarujenavigationBarMinimization;AppIntents.framework/Modules/AppIntents.swiftmodule/arm64e-apple-ios.swiftinterface, zero trafień dladeleteEvents,deleteEvent: some AppIntents::AppSchemaIntentw linii 12608;PencilKit.framework/Headers/PKStrokeRenderState.hlinie 15 do 17 orazPencilKit.framework/Modules/PencilKit.swiftmodule/arm64e-apple-ios.swiftinterfacez zerem trafień dlaasObjC,convenience public init(_ swiftValue: PencilKit::PKStroke.PencilKit::RenderState)naPKStrokeRenderStateReferencew linii 46 i odwrotnympublic init(_ objcValue: PencilKit::PKStrokeRenderStateReference)wewnątrzPKStroke.RenderStatew linii 38;StoreKit.framework/Modules/StoreKit.swiftmodule/arm64e-apple-ios.swiftinterfacelinie 311 do 322;HealthKit.framework/Modules/HealthKit.swiftmodule/arm64e-apple-ios.swiftinterfacelinie 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.swiftinterfacelinie 180 do 182 i 276 do 278;_CoreSpotlight_FoundationModels.framework/Modules/_CoreSpotlight_FoundationModels.swiftmodule/arm64e-apple-ios.swiftinterfacelinie 64 do 78 i 100 do 129. Testphotos.asset: 15-liniowy plik Swift importujący AppIntents i CoreLocation, który deklaruje@AppEntity(schema: .photos.asset) struct ProbeAssetzEntityQuery,id,displayRepresentationi bez właściwości schematu;swiftc -c -target arm64-apple-ios27.0-simulatorskompilował go z kodem wyjścia 0 i bez diagnostyki, a-Xfrontend -dump-macro-expansionspokazał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 rozszerzenieAppEntity. Ponowne uruchomienie własnej liniiswift-frontenddrivera (przechwyconej przezswiftc -###) z-emit-const-values-pathi-const-gather-protocols-filewskazującymi na napisaną przeze mnie listę 18 protokołów (AppIntent,AppEntity,AppEnum,AssistantSchemaEntity,EntityQueryi pozostałe protokoły App Intents) dało plik.swiftconstvalues, aappintentsmetadataprocessor --module-name ProbeMod --sdk-root <iPhoneSimulator27.0.sdk> --xcode-version 27A266a --platform-family iOS --deployment-target 27.0 --target-triple arm64-apple-ios27.0-simulatorna 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 dlaassetTypeifilterniosą symbole zastępcze<#PhotoAssetType#>?i<#PhotoFilterEffectType#>?;AppIntents.framework/Modules/AppIntents.swiftmodule/arm64e-apple-ios.swiftinterfacedeklaruje te nazwy w liniach 11695 i 11705 jakoAppSchema.Enum("PhotoAssetType")podassetTypeiAppSchema.Enum("PhotoFilterEffectType")podfilterType); wywołanie odzwierciedla krok metadanych Xcode, ale nie jest bajt w bajt tym z systemu budowania, którego lista protokołów pochodzi zSWIFT_EMIT_CONST_VALUE_PROTOCOLS. Test ostrzeżeń o wycofaniu: 11-liniowy plik Swift importujący UIKit, Foundation i Photos, który wywołujecanOpenURL(_:), tworzyNSBundleResourceRequest(tags:)i czytaPHAssetResource.originalFilename, skompilowany przezswiftc -cz SDK iPhoneSimulator 27.0 przy-target arm64-apple-ios17.0-simulator,ios26.0iios27.0: zero diagnostyki przy 17.0 i 26.0, trzy ostrzeżenia[#DeprecatedDeclaration]przy 27.0, zacytowane w tekście. TestNSURL: 16-liniowy plik Swift wypisującyNSURL(string:)?.absoluteStringdla trzech wejść z tabeli, skompilowany przezswiftc -Odla hosta oraz, jeden raz, przezswiftc -O -target arm64-apple-ios26.0-simulatorz SDK iPhoneSimulator 27.0 (otool -lna wyniku pokazujeLC_BUILD_VERSIONzminos 26.0isdk 27.0); ten jeden plik binarny symulatora uruchomiłem przezxcrun simctl spawnna 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])plusstatfs; uruchomienie w symulatorze wypisałovolumeAvailableCapacity = 226009026560,f_bavail = 55177985,f_bsize = 4096; uruchomienie na hoście wypisałovolumeAvailableCapacity = 226009079808,f_bavail = 55177998. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
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.” ↩↩↩↩↩
-
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
deprecatedAt27.0 na każdej, a podsumowanie wycofania brzmi „Use MetricManager instead.” ↩