Notas de versão do iOS 27.0: descontinuações, quebras e correções
O iOS 27.0 e o iPadOS 27.0 saíram na segunda-feira, 14 de setembro de 2026, como o build 24A437, o mesmo que a Apple publicou como RC em 11 de setembro, com o SDK dentro do Xcode 27 (27A266a) no mesmo dia e com o App Store Connect aceitando builds GA do 27.0 a partir da mesma data.13 Três números de build agora respondem a “qual iOS 27.0?”: o dispositivo roda o 24A437, o SDK do Xcode 27 se identifica como 24A430 e o runtime do simulador é o 24A434.4 As notas cobrem 93 áreas com título, com 65 recursos novos, 197 problemas resolvidos, 23 problemas conhecidos e 11 descontinuações; o que importa para o código existente é o conjunto que dispara no momento em que você compila com o SDK 27.0, as descontinuações confirmadas nos próprios headers do SDK e uma correção do Foundation que um único binário reproduz em um runtime do iOS 26.5 e em um do iOS 27.0.24 {.answer-block}
TL;DR
- Builds. Dispositivo 24A437, SDK 24A430, runtime do simulador 24A434; o RC e o GA compartilham o build do dispositivo, e o número do SDK não é o número do dispositivo, o que importa quando um relatório de bug pede um deles.14
- Comportamento ao vincular com o 27. 12 categorias de mudança, 23 entradas ao todo, alteram o que um app faz no momento em que você o compila com o SDK 27.0: a exigência de tela de inicialização, a obrigatoriedade do ciclo de vida por cenas, o
TabViewtravando com uma seleção oculta, a seleção de texto do sistema emTextselecionável, a herança de traits para view controllers apresentados, a barra de escopo em linha, as cenas de tela externa que não são mais oferecidas automaticamente, os modificadores de controle redefinidos dentro de sheets e popovers, o cálculo de área segura docontainerRelativeFrame, os acessores da barra de status, as regras de redimensionamento no iPad sobUIRequiresFullScreene duas mudanças menores do SwiftUI em menus e na rolagem para o topo.2 - Recompile ou trave. O
HitchTimeMetric.ratiodo MetricKit agora mede em uma nova unidadeHitchTimeRatio, e oScrollHitchTimeMetricsaiu da API Swift; a Apple diz para recompilar com o SDK mais recente para evitar travamentos na inicialização e um travamento por símbolo ausente, e a interface do SDK confirma que o tipo sumiu.24 - 11 descontinuações, quase todas silenciosas.
canOpenURL:(ios(3.0, 27.0)no header), On Demand Resources (ios(9.0, 27.0)),PHAssetResource.originalFilename(ios(9, 27)), as APIs originais do MetricKit (marcadasAPI_TO_BE_DEPRECATED, ou seja, uma descontinuação branda),ScrollHitchTimeMetric,FileDocument,calendar.deleteEventsrenomeado paracalendar.deleteEvent, uma renomeação no PencilKit, a obrigatoriedade de cenas, o AirPort Utility e uma nota de idioma do Weather Highlights. As três duras só avisam com deployment target 27.0; em 17.0 ou 26.0 o mesmo arquivo compila limpo.24 - Duas mudanças no Foundation, testadas.
+[NSURL URLWithString:]não codifica mais duas vezes um%20válido quando escapa um espaço em outro ponto da string: um mesmo binário de simulador produz%2520em um runtime do iOS 26.5 e%20no runtime do iOS 27.0, e o build de Mac acompanha o lado antigo, então a correção segue o sistema operacional, não o SDK. O truncamento devolumeAvailableCapacityKeypara três dígitos significativos não aparece no simulador, que reporta exatamente 55.177.985 blocos.24
Qual build é qual?
| Onde | Build | Evidência |
|---|---|---|
| Dispositivo, iOS 27.0 / iPadOS 27.0 | 24A437 | Feed de lançamentos, segunda-feira, 14 de setembro de 2026; “iOS 27.0 RC (24A437)” na sexta-feira, 11 de setembro1 |
| SDK dentro do Xcode 27 (27A266a) | 24A430 | iPhoneOS.sdk/System/Library/CoreServices/SystemVersion.plist, ProductBuildVersion4 |
| Runtime do simulador do iOS 27.0 | 24A434 | xcrun simctl list runtimes imprime “iOS 27.0 (27.0 - 24A434)”4 |
| macOS 27.0 | 26A428 | Feed de lançamentos, segunda-feira, 14 de setembro1 |
| App Store Connect | SDKs GA do 27.0 aceitos | “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.” (já é possível enviar apps compilados com o Xcode 27 e os SDKs 27.0 para a App Store e para o TestFlight). 14 de setembro; uploads com o SDK do RC aceitos desde 9 de setembro3 |
Os três números não são um erro. O SDK é um instantâneo de headers e interfaces, o runtime do simulador é um cryptex separado que a Apple entrega ao Xcode, e o build do dispositivo é o que as pessoas rodam; uma reprodução que diz “iOS 27.0” sem um desses está deixando de fora o número que decide se uma correção se aplicou.4
As próprias notas abrem com duas frases de escopo, “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,” (o SDK permite desenvolver apps para iPhone e iPad com iOS e iPadOS 27 e vem incluído no Xcode 27, disponível na Mac App Store), e então percorrem 93 áreas com título. Contar os itens de lista sob cada título dá 65 recursos novos, 197 problemas resolvidos, 23 problemas conhecidos e 11 descontinuações; só a Siri responde por 38 resolvidos e oito conhecidos, o SwiftUI por 23 novos e 13 resolvidos, o UIKit por nove novos e 13 resolvidos.2 O post sobre o Xcode 27 cobre o lado das ferramentas, e o post que você está lendo cobre o lado do sistema operacional e do SDK.
O que muda no momento em que você compila com o SDK 27.0?
A Apple condiciona as mudanças de comportamento ao SDK com o qual o app é vinculado, então elas não fazem nada com o build que você já publicou, e todas disparam no primeiro archive feito no Xcode 27. Citando a nota de cada uma:2
- Tela de inicialização. “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.” (apps compilados com o SDK 27.0 ou posterior precisam incluir uma tela de inicialização por meio de uma dessas quatro chaves noInfo.plist, ou a App Store os rejeita). O App Store Connect aceitou uploads para a App Store compilados com os SDKs do RC 27.0 a partir de 9 de setembro e com os SDKs GA a partir de 14 de setembro; nenhuma das entradas diz quando as rejeições começaram, então leia as duas como datas de upload, e não como data de aplicação.3 Meu post sobre a tela de inicialização audita um plist gerado. - Ciclo de vida por cenas. Sob as descontinuações do UIKit: “Apps built with the latest SDK must adopt the scene-based life cycle or they fail to launch.” (apps compilados com o SDK mais recente precisam adotar o ciclo de vida baseado em cenas, ou não abrem). O post sobre a obrigatoriedade de cenas traz a migração.
- Seleção do
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.” (umTabViewexige que a seleção aponte para uma aba visível e pode travar se ela apontar para uma aba oculta ou indisponível). Uma seleção restaurada doUserDefaultsque nomeia uma aba que você depois ocultou é o padrão a procurar. Textselecionável. “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.” (uma viewTextcom.textSelection(.enabled)agora aceita seleção interativa com a interface de seleção de texto do sistema). A Apple acrescenta que essas views “might include additional gestures for system text selection interactions” (podem incluir gestos adicionais para a seleção de texto do sistema) e aponta gestos personalizados para.highPriorityGesture(); o mesmo build também faz oTextRendererfuncionar emTextselecionável.- View controllers apresentados. “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.” (um view controller apresentado herda a trait collection subindo a cadeia de superviews pelas views intermediárias da apresentação, em vez de pular direto para o presentation controller). As subclasses personalizadas de
UIPresentationControllerque definem traits são as que precisam ser retestadas. - Barra de escopo. “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.” (quando oUISearchControllerusa o posicionamento central da barra de busca, a barra de escopo aparece na mesma linha do campo de busca, e não em uma linha separada abaixo dele). - Telas externas. “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.” (o sistema não oferece mais automaticamente as cenaswindowExternalDisplayNonInteractive; para mostrar conteúdo não interativo em telas externas é preciso registrar um acessório de cena). O SwiftUI ganha a mesma porta por meio de.sceneAccessorycom umExternalNonInteractiveAccessory. - Sheets e popovers. Listado como corrigido: “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.” (esses valores de ambiente voltam aos padrões dentro de sheets e popovers). Se um sheet herdava.controlSize(.large)de quem o apresenta, deixa de herdar. containerRelativeFrame. Também corrigido para builds com o SDK 27.0: o modificador “incorrectly accounts for safe-area insets on aScrollView’s non-scrollable axis, causing the calculated scrollable content size to be too small,” (contabilizava errado as margens da área segura no eixo não rolável de umScrollView, e o tamanho calculado do conteúdo rolável ficava pequeno demais), então umScrollViewhorizontal comcontainerRelativeFrame(.vertical)muda de tamanho.- Acessores da barra de status. Corrigido para builds com o SDK 27.0: os acessores descontinuados da barra de status no
UIApplication, que a nota lista comostatusBarFrame,statusBarOrientation,statusBarStyleeisStatusBarHidden, “might return NaN or null values” (podem retornar NaN ou valores nulos). - Redimensionamento e orientação no iPad e no iPhone Mirroring. Nove problemas resolvidos do UIKit descrevem o que um app “built with the iOS 27 SDK” (compilado com o SDK do iOS 27) deve ver agora quando sua cena se conecta, ou quando o usuário redimensiona ou gira a janela: apps com
UIRequiresFullScreenrecebem “a discrete change to a newUIScreenwith an updated bounds” (uma mudança discreta para uma novaUIScreencom bounds atualizados) em vez de atualizações contínuas de tamanho, os bounds deUIScreen.main“should remain fixed once the screen connects” (devem ficar fixos depois que a tela se conecta) e “supported interface orientations should no longer be a condition for continuous resizability” (as orientações de interface suportadas não devem mais ser condição para o redimensionamento contínuo). - Menus e rolagem para o topo. Duas mudanças menores do SwiftUI: “In apps built with the 27.0 SDKs, a
LabeledContentview used inside aMenumaps its value to the platform menu item’s subtitle,” (umLabeledContentdentro de umMenumapeia seu valor para o subtítulo do item de menu da plataforma) e, listado como corrigido, “In apps built with the 2027 SDKs, tapping the status bar to scroll aScrollViewto its top correctly updates a boundscrollPosition.” (tocar na barra de status para rolar umScrollViewaté o topo atualiza corretamente umscrollPositionvinculado). Um rótulo de menu que carregava um valor por razões de layout agora ganha um subtítulo, e um binding descrollPositionque ficava desatualizado depois de um toque na barra de status agora é atualizado.
Essas 12 categorias cobrem as entradas que mudam comportamento existente. Os recursos novos atrás da mesma condição de SDK, como o protocolo ReadableDocument, o protocolo Document construído sobre ele e UIScene.extendStateRestoration, ficam nas seções seguintes; a categoria de telas externas emparelha a remoção no UIKit com sua substituição no SwiftUI.
Duas entradas do MetricKit pertencem a esta seção mesmo tratando de recompilar, e não de vincular. “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.” (as duas propriedades agora usam o novo tipo HitchTimeRatio, uma subclasse de Dimension que expressa o tempo de engasgo como milissegundos de engasgo por segundo de duração medida; recompile com o SDK mais recente para adotar a mudança de tipo e evitar travamentos na inicialização). E: “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(_:).” (o case scrollHitchTime(_:) e o tipo ScrollHitchTimeMetric não fazem mais parte da nova API Swift do MetricKit; use hitchTime(_:) e HitchTimeMetric no lugar e recompile para evitar um travamento por símbolo ausente).2 Na interface Swift do MetricKit no SDK do iOS 27, ScrollHitchTimeMetric e scrollHitchTime aparecem zero vezes e HitchTimeRatio aparece quatro vezes, então um binário compilado contra o SDK beta que usava qualquer um desses nomes está referenciando um símbolo que a interface GA não exporta.4 Meu post sobre o MetricKit cobre a nova API desde o beta de junho.
Quais APIs estão descontinuadas no 27.0?
As notas listam 11 descontinuações. Uma descontinuação em uma nota de versão é uma frase; uma descontinuação no SDK é uma anotação de disponibilidade que o compilador lê, e as duas nem sempre dizem a mesma coisa. Conferi cada entrada contra os headers e as interfaces Swift dentro do SDK iPhoneOS 27.0 do Xcode 27:24
| Entrada da nota | O que o SDK diz |
|---|---|
“canOpenURL: is deprecated. Attempt to open the URL and handle any failure instead of validating it first.” (tente abrir a URL e trate qualquer falha em vez de validá-la antes) |
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)) em UIApplication.h; o post sobre canOpenURL traz o padrão de substituição |
“On Demand Resources and the NSBundleResourceRequest API are deprecated. Use Background Assets instead.” (use Background Assets no lugar) |
API_DEPRECATED("Use Background Assets instead.", ios(9.0, 27.0), watchos(2.0, 27.0), tvos(9.0, 27.0)) na classe, nos métodos de prioridade de preservação e nas constantes de notificação e prioridade; o post sobre ODR precifica a migração, e a resposta “What you get is a compiler warning” do FAQ dele agora carrega a ressalva sobre deployment target explicada na próxima seção |
“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.” (a propriedade está marcada erroneamente como não anulável, e uma nova propriedade anulável filename a substitui) |
originalFilename é API_DEPRECATED("Use filename instead", ios(9, 27), macos(10.15, 27), tvos(10, 27), visionos(1, 27)); filename é nullable e API_AVAILABLE(macos(27), ios(27), tvos(27), visionos(27)) |
As APIs originais do MetricKit, MXMetricManager, MXMetricManagerSubscriber, MXMetricPayload e MXDiagnosticPayload, “are no longer recommended for new adoption. Use MetricManager instead.” (não são mais recomendadas para novas adoções; use MetricManager) |
API_DEPRECATED("Use MetricManager instead.", ios(13.0, API_TO_BE_DEPRECATED), macos(12.0, API_TO_BE_DEPRECATED)) em MXMetricManager: uma descontinuação branda sem versão, então nenhum aviso hoje. A página de referência da Apple para a classe a lista como descontinuada no 27.0 em todas as plataformas, então a documentação e o header discordam; meu post sobre o MetricKit repetia a versão da página e agora carrega uma nota datada sobre a divergência6 |
ScrollHitchTimeMetric e scrollHitchTime(_:) “are no longer part of the new Swift MetricKit API” (não fazem mais parte da nova API Swift do MetricKit) |
Zero ocorrências de qualquer um dos nomes em MetricKit.swiftmodule; não é descontinuação, é remoção |
“The FileDocument protocol is deprecated. Use ReadableDocument for read-only documents or Document for documents that support reading and writing.” (use ReadableDocument para documentos somente leitura ou Document para documentos com leitura e escrita) |
FileDocument: deprecated: 100000.0, message: "Conform your type to Document instead."; ReferenceFileDocument: "Use Document protocol instead."; ambos brandos, e Document é @available(iOS 27.0, macOS 27.0, visionOS 27.0, *), então a substituição exige um mínimo de 27 |
“The calendar.deleteEvents schema has been renamed to calendar.deleteEvent.” (o schema foi renomeado) |
deleteEvents aparece zero vezes em AppIntents.swiftmodule; deleteEvent: some AppSchemaIntent está lá. Uma renomeação sem alias é erro de compilação para quem usa o nome antigo |
“__PKStrokeRenderState has been renamed to PKStrokeRenderStateReference, with PKStrokeRenderStateReference.init(…) replacing PKStrokeRenderState.asObjCRenderState().” (uma renomeação, com o inicializador da classe de referência substituindo o método antigo) |
PKStrokeRenderState.h declara @interface PKStrokeRenderState sob API_AVAILABLE(ios(27.0), macos(27.0), visionos(27.0)) com NS_SWIFT_NAME(PKStrokeRenderStateReference); a interface Swift não tem nenhum asObjCRenderState; a substituição que a Apple nomeia é o init(_ swiftValue: PKStroke.RenderState) da classe de referência, então PKStrokeRenderStateReference(state) é a nova forma de chamada e a antiga não compila |
| “Apps built with the latest SDK must adopt the scene-based life cycle or they fail to launch.” (adote o ciclo de vida por cenas, ou o app não abre) | Não é uma anotação; é uma falha na inicialização. Veja o post sobre a obrigatoriedade de cenas |
| “AirPort Utility will no longer be available for new downloads from the App Store.” (o AirPort Utility não estará mais disponível para novos downloads na App Store). Downloads repetidos ainda funcionam; “functionality is not guaranteed” (a funcionalidade não é garantida) no iOS 27 | Um app, não uma API |
| “Weather Highlights is currently only available in US English.” (o Weather Highlights está disponível por enquanto apenas em inglês dos EUA) | A Apple arquiva sob Deprecations; lê-se como uma nota de disponibilidade |
Uma descontinuação branda e uma renomeação ficam fora dos títulos de Deprecations. O estilo de campo de texto .roundedBorder carrega uma anotação deprecated: 100000.0 na interface do SwiftUI cuja mensagem, removidas as crases internas, diz “Use textFieldStyle(.bordered) with textInputBorderShape(.roundedRectangle)”; ela combina com a entrada de New Features que introduz TextInputBorderShape. A versão 100000.0 é a convenção da Apple para “descontinuado, mas ainda não”: com as configurações padrão o compilador fica em silêncio, e a mensagem só aparece na interface. A renomeação é mais dura. UINavigationItem.navigationBarMinimization “replaces UINavigationItem.barMinimizeBehavior and UINavigationItem.barMinimizationSafeAreaAdjustment,” (substitui essas duas propriedades), e o toolbarMinimizationBehavior do SwiftUI substitui toolbarMinimizeBehavior do mesmo jeito; nenhum dos três nomes antigos aparece nos headers do UIKit do SDK 27.0 nem nas interfaces Swift do UIKit e do SwiftUI, então o código que os usa deixa de compilar em vez de avisar, a mesma classe de caso do deleteEvents.24
As duras também são mais silenciosas do que parecem. O compilador compara a versão de descontinuação com o seu deployment target, não com o SDK, então ios(3.0, 27.0) produz aviso apenas em um target cujo iOS mínimo é 27.0. Compilei três vezes contra o SDK 27 um arquivo que chama canOpenURL, cria um NSBundleResourceRequest e lê originalFilename: com -target arm64-apple-ios17.0-simulator e com 26.0 ele compilou sem diagnósticos, e com 27.0 produziu três avisos, '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. e 'originalFilename' was deprecated in iOS 27: Use filename instead.4 Um app com um mínimo realista não vai ouvir sobre nenhum deles do compilador; com as configurações padrão do compilador, o grep da lista mais abaixo é o único aviso que você recebe.
Quais correções eu verifiquei?
Duas entradas do Foundation podem ser executadas em vez de lidas. As notas listam a primeira como corrigida: “+[NSURL URLWithString:] no longer double-encodes the % of valid percent-escape sequences when encoding other invalid characters.” (não codifica mais duas vezes o % de sequências de escape válidas ao codificar outros caracteres inválidos).2 O teste constrói NSURL(string:) a partir de três strings que contêm, cada uma, um escape válido e um caractere que o NSURL precisa escapar, e imprime absoluteString. Compilei duas vezes com o Xcode 27: uma para o Mac e outra para o simulador com iOS mínimo 26.0, e então rodei esse único binário de simulador, sem alterações, em um runtime do iOS 26.5 e no runtime do iOS 27.0:4
| Entrada | macOS 26.6.2 e o binário de simulador no iOS 26.5 (idênticos) | O mesmo binário de simulador no 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 |
A primeira coluna é o comportamento antigo: o NSURL escapa o espaço e também transforma em %25 o % de um escape que já era válido, então o caminho sai diferente daquele que o escape nomeava. A coluna do iOS 27.0 é a correção. Um único Mach-O, cujo LC_BUILD_VERSION diz minos 26.0 e sdk 27.0, produziu as duas colunas de simulador, então o sistema operacional em que o código roda decide o resultado, não o SDK contra o qual você compila nem o target para o qual você compila. Um app que você compila hoje mantém a codificação antiga no runtime do iOS 26.5 que testei, e a nota de versão não dá motivo para esperar um resultado diferente em qualquer outra versão 26.x.
As notas listam a segunda como nova, e não consegui reproduzi-la onde posso rodar código: “volumeAvailableCapacityKey is truncated to 3 significant decimal digits at the block count level (e.g., 123,456,789 blocks becomes 123,000,000 blocks).” (é truncada para três dígitos decimais significativos no nível da contagem de blocos).2 No simulador do iOS 27.0, URL.resourceValues(forKeys: [.volumeAvailableCapacityKey]) retornou 226.009.026.560 bytes, e statfs no mesmo caminho retornou f_bavail 55.177.985 com f_bsize 4.096, que multiplicados dão exatamente o mesmo valor; uma contagem de blocos com três dígitos significativos teria sido 55.100.000 blocos, ou 225.689.600.000 bytes.4 O Mac host reportou 55.177.998 blocos pelo mesmo código. Minha leitura é que o truncamento vive no kernel do dispositivo, e não no Foundation, e que o simulador, que pergunta ao kernel do Mac sobre o volume do Mac, não consegue mostrá-lo; não rodei o teste em um dispositivo, então trate a entrada como não testada, e não como falsa, e espere que o arredondamento apareça em relatórios de espaço livre do dispositivo que antes eram exatos.
O que há de novo que muda o código que você já tem?
O histórico limitado do HealthKit. A nota é uma linha, “Updated HealthKit permissions flow now lets users grant apps access to limited history or full history,” (o fluxo de permissões atualizado agora deixa o usuário conceder aos apps acesso ao histórico limitado ou completo), e a referência da API carrega as consequências.25 Depois da tela de tipos de dados, “a second screen prompts them to choose how much historical data to grant your app, either a recent limited window or their full history,” (uma segunda tela pede que escolham quanto histórico conceder ao seu app: uma janela recente limitada ou o histórico completo) e “Time-bound authorization applies only to sample types.” (a autorização limitada no tempo se aplica apenas a tipos de amostra).5 O novo earliestAuthorizedSampleDate(for:), disponível a partir do iOS 27.0 e do watchOS 27.0, retorna um dicionário de HKObjectType para a data legível mais antiga, e o limite não está onde você imaginaria: “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.” (o HealthKit avalia o limite contra a data final da amostra, então pode atender sua consulta com uma amostra que começa antes da data de autorização mais antiga, desde que termine depois dela).45 A regra de privacidade se mantém: “Your app can’t distinguish between denied and full access; limited authorization is the only state your app can identify, by design.” (seu app não consegue distinguir entre acesso negado e completo; a autorização limitada é o único estado que ele consegue identificar, por design).5 A orientação da Apple é tratar tudo antes da data retornada como desconhecido, e não como ausente, e limitar a data inicial de cada consulta por tipo. Qualquer tendência, linha de base ou sequência calculada a partir do HealthKit agora precisa estar correta em uma janela que o usuário escolheu. O post sobre o HealthKit cobre as adições de junho e não cobre a mudança no modelo de permissões.
Códigos de oferta do 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.” (as APIs de resgate de código de oferta agora retornam um VerificationResult com um objeto Transaction quando o resgate tem sucesso, ou um erro que descreve a causa quando falha).2 Na interface, presentOfferCodeRedeemSheet(in:) está descontinuado no 27.0 com “Use presentOfferCodeRedeemSheet(from:options:) instead.”, e a substituição é presentOfferCodeRedeemSheet(from viewController: UIViewController, options: Set<RedeemOption> = []) async throws -> VerificationResult<Transaction>, disponível a partir do iOS 27.0.4 O código que apresentava a folha e depois escutava Transaction.updates pelo resultado agora pode simplesmente dar await.
Core AI em segundo plano. “The system now restricts background access to the Neural Engine, similar to GPU usage restrictions,” (o sistema agora restringe o acesso em segundo plano ao Neural Engine, como já faz com a GPU) e “Neural Engine memory usage is now attributed to your app process instead of the system, and appears in the Allocations instrument.” (o uso de memória do Neural Engine agora é atribuído ao processo do seu app, e não ao sistema, e aparece no instrumento Allocations). O acesso em segundo plano “requires the new entitlement: “com.apple.developer.background-tasks.continued-processing.inference”.” (exige esse novo entitlement).2 Um app que rodava inferência em uma tarefa de segundo plano no 26 e nunca pediu nada encontra o Neural Engine fechado até ter o entitlement, e a memória do Neural Engine que ele usa agora aparece sob o próprio processo no Allocations.
Background Assets. “You can reduce your app’s storage usage with localized asset packs. The system delivers the appropriately localized asset packs based on the user’s preferred languages.” (você pode reduzir o uso de armazenamento do app com pacotes de assets localizados, que o sistema entrega conforme os idiomas preferidos do usuário).2 Para um app que está deixando o On Demand Resources, os pacotes localizados são o recurso que substitui as tags por idioma.
Alertas críticos. As notas listam o comportamento dos alertas críticos como corrigido: “Critical alerts are automatically turned on for any apps that request your permission to enable notifications.” (os alertas críticos são ativados automaticamente para qualquer app que peça permissão para ativar notificações).2 A entrada não diz mais nada, então reteste qualquer fluxo de notificações que parecia ter privilégio demais nos betas.
Menus, @State, TLS e o novo slice. Quatro entradas têm posts próprios. A barra de menus e os menus de contexto no iPadOS 27 e no macOS 27 “present a reduced set of menu item images,” (mostram um conjunto reduzido de imagens nos itens de menu), com preferredImageVisibility em UIMenuElement como substituição: veja imagens de menu. A reescrita da macro @State é uma entrada do SwiftUI nestas notas, e ela muda o que compila no Xcode 27: veja o post sobre o Xcode 27 para a reprodução e o post sobre a macro @State para a auditoria. A exigência mais rígida de TLS para tráfego de MDM, inscrição e atualização de software começa “in 27.0 operating systems” (nos sistemas operacionais 27.0): veja a auditoria de TLS. E o arm64e.x1 com CPA2 em “iPhone models with A20 Pro or later chips, Mac computers with M6 or later chips, and Apple Watch models with S11 or later chips” (iPhones com chip A20 Pro ou posterior, Macs com M6 ou posterior e Apple Watches com S11 ou posterior): veja arm64e.x1.2
Menores, mas que merecem um grep. O System ganha stat, lstat, fstat e fstatat em Swift com um tipo Stat e FilePath.stat(), e as notas listam como corrigido um conflito entre esses métodos e um stat() sem qualificação nas suas próprias extensions. NSTextTable “and its related objects and types are available to UIKit clients starting with OS 27 releases.” (e seus objetos e tipos relacionados estão disponíveis para clientes UIKit a partir das versões 27 dos sistemas). AsyncImage “now automatically caches downloaded images using HTTP caching protocols,” (agora armazena automaticamente em cache as imagens baixadas usando os protocolos de cache HTTP), com inicializadores URLRequest e View.asyncImageURLSession(_:) para direcionar. “When linked on iOS 27, tvOS 27, macCatalyst 27, or visionOS 27 SDKs,” (quando vinculado a esses SDKs) UIScene.extendStateRestoration e UIScene.completeStateRestoration estendem a restauração de estado para a transição de segundo plano para primeiro plano. E o SwiftData lista uma correção para “a deadlock for @Query when saving a ModelContext on a background actor while scheduling new async tasks for a ModelActor.” (um deadlock do @Query ao salvar um ModelContext em um actor de segundo plano enquanto agenda novas tarefas assíncronas para um ModelActor).2
Problemas conhecidos para planejar
- Entidades
photos.assetparam de compilar. “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.” (entidades existentes que adotavam esse schema podem parar de compilar nos SDKs 27 porque o schema ganhou propriedades novas nesta versão). Solução alternativa: “To continue conforming to the schema, adopt the additional properties and move the code behind an availability check.” (adote as propriedades adicionais e coloque o código atrás de uma verificação de disponibilidade).2 A macro não vai dizer quais propriedades: uma conformidade vazia a@AppEntity(schema: .photos.asset)compila limpa noswiftc, e a expansão dela só adiciona uma conformidade aAssistantSchemaEntityque carrega o nome do schema. A lista vem da etapa de metadados do App Intents do Xcode, oappintentsmetadataprocessor, que faz o build falhar com um erro por propriedade ausente. Rodado à mão sobre essa conformidade vazia contra o SDK 27.0, ele reporta 12, cada uma com um fix-it:hasSuggestedEdits: Bool,isFavorite: Bool,isHidden: Bool,creationDate: Date?,location: GeoToolbox.PlaceDescriptor?,assetType: <#PhotoAssetType#>?,filter: <#PhotoFilterEffectType#>?,exposure: Double?,saturation: Double?,warmth: Double?,aperture: Double?eisPortraitModeEnabled: Bool?; os dois placeholders<#…#>representam enums que você mesmo declara contra os schemas de enum.photos.assetTypee.photos.filterType, que a interface nomeiaPhotoAssetTypeePhotoFilterEffectType. Não consegui comparar essa lista com o SDK 26, porque o único Xcode neste Mac é o 27A266a.4 - Tokens do Now Playing vão para produção. “
RemoteMediaSessionandRemoteMediaSessionRepresentablealways provision Now Playing start and update push tokens for theproductionAPNs environment, even if theaps-environmentconfiguration is set todevelopment.” (sempre provisionam os tokens push de início e atualização do Now Playing para o ambienteproductiondo APNs, mesmo comaps-environmentconfigurado comodevelopment). Solução alternativa: “Use theproductionenvironment for testing and validation.” (use o ambienteproductionpara testes e validação).2 A classe está no novo frameworkNowPlaying, marcado como indisponível no macOS e no visionOS.4 SpotlightSearchToolestoura o modelo no dispositivo. Sem uma configuração, “the tool’s description and parameter schema alone exceed the on-device model’s context window before any prompt is added.” (a descrição da ferramenta e o schema de parâmetros, sozinhos, excedem a janela de contexto do modelo no dispositivo antes de qualquer prompt ser adicionado). Solução alternativa: um guia focado, “.focused(.communications),.focused(.calendar),.focused(.documents),.focused(.visualMedia), or.focused(.audio).”2 A API existe:SpotlightSearchTool.Guide.focused(_ domain: ContentDomain = .items)fica ao lado de.completee.dynamic(_:)na interface_CoreSpotlight_FoundationModels.4 Meu post sobre IA no dispositivo cobre a ferramenta; os passos de adoção de junho emparelhavam a configuração padrão com o modelo do sistema, e agora carregam uma correção datada.- Traces de desempenho pela Central de Controle. “Gathering
PowerProfilerandLookbacktraces through thePerformance TraceControl Center widget might fail to produce traces.” (coletar traces dePowerProfilereLookbackpelo widgetPerformance Traceda Central de Controle pode não produzir traces). A solução alternativa que a Apple oferece é “Gather traces on iOS 27.0 beta 1 or earlier,” (coletar traces no iOS 27.0 beta 1 ou anterior), o que não é uma solução que a maioria das equipes consegue aplicar em um dispositivo que já atualizou.2 - Testes do StoreKit. “Changing the storefront or locale using
SKTestSessiondoesn’t propagate throughStorefront.updates,” (mudar a loja ou a localidade comSKTestSessionnão se propaga porStorefront.updates) e “Failed purchases usingSKTestSessionmight display error dialogs even whendialogsDisabledis set to true.” (compras que falham comSKTestSessionpodem exibir diálogos de erro mesmo comdialogsDisableddefinido como true).2 - Atalhos e
UnionValue. Um parâmetro com “two number-related types (for example, both Int and Double)” (dois tipos numéricos, por exemplo Int e Double ao mesmo tempo) mostra a opção numérica duas vezes; a solução alternativa da Apple é declarar apenas um.2
O que eu faria nesta semana
- Faça um archive no Xcode 27 e passe a lista de vínculo com o 27 acima pelo app antes do TestFlight: chaves de tela de inicialização, ciclo de vida por cenas, qualquer
TabViewcuja seleção possa nomear uma aba oculta e qualquer sheet que herdava modificadores de controle.2 - Compile o código do MetricKit contra o SDK GA antes de publicar; um binário que ainda referencia
ScrollHitchTimeMetricou o tipo antigo deratioé um travamento na inicialização pela descrição da Apple, e a interface não exporta mais o nome.24 - Faça um grep por
canOpenURL,NSBundleResourceRequest,originalFilename,FileDocument,deleteEvents,asObjCRenderStateebarMinimizeBehavior; os três primeiros só avisam com deployment target 27.0,FileDocumenté brando e os três últimos não compilam, então o grep é o aviso.4 - Se você lê o HealthKit, chame
earliestAuthorizedSampleDate(for:)depois da autorização e limite a data inicial de cada consulta por tipo; depois decida o que uma sequência ou uma linha de base significa em uma janela que o usuário escolheu.5 - Registre o número do build nos relatórios de bug a partir de três lugares:
ProcessInfono dispositivo, oSystemVersion.plistdo SDK na máquina de build esimctl list runtimespara reproduções no simulador. Eles diferem, e uma correção que está no 24A437 pode não estar no 24A434.4 - Se você constrói URLs a partir de strings com
NSURL(string:), continue testando no iOS 26: o sistema operacional corrige a codificação dupla%25, não a sua recompilação, e um mesmo binário do Xcode 27 a produz no runtime 26.5 e não no 27.0.4
Perguntas frequentes
Quando o iOS 27.0 saiu, e qual é o build?
Na segunda-feira, 14 de setembro de 2026, como o build 24A437, o mesmo que a Apple publicou como release candidate na sexta-feira, 11 de setembro. O iPadOS 27.0 compartilha o número.1
Qual build do iOS 27.0 está no SDK do Xcode 27?
O SDK iPhoneOS 27.0 dentro do Xcode 27 (27A266a) reporta ProductBuildVersion 24A430, e o runtime do simulador do iOS 27.0 reporta 24A434. Nenhum dos dois é o build do dispositivo.4
O que está descontinuado no iOS 27?
As notas listam 11 entradas: canOpenURL:, On Demand Resources e NSBundleResourceRequest, PHAssetResource.originalFilename, as APIs originais do MetricKit, ScrollHitchTimeMetric, FileDocument, o schema calendar.deleteEvents, __PKStrokeRenderState, a obrigatoriedade do ciclo de vida por cenas do UIKit, o AirPort Utility e uma nota de idioma do Weather Highlights. Três carregam versões duras de descontinuação 27.0 no SDK e só avisam com deployment target 27.0, duas são brandas, duas são renomeações, uma é remoção e três não são mudanças de API.24
Meu app precisa ser recompilado para o iOS 27?
Não para continuar rodando, e as entradas se dividem em três grupos. Condicionadas ao SDK: as 12 categorias de vínculo com o 27 acima, que não mudam nada até você compilar com o SDK 27.0. No nível do sistema operacional, alcançando todo binário em um dispositivo com 27.0: a restrição do Neural Engine em segundo plano e seu entitlement, o fluxo de permissão de histórico limitado do HealthKit, a aplicação de TLS para tráfego de MDM e de atualização, a mudança de imagens de menu no iPadOS 27, a correção dos alertas críticos e a correção de codificação do NSURL. Binários de beta: código do MetricKit compilado contra um SDK beta, que a Apple manda recompilar com o SDK GA para evitar travamentos. O SDK mínimo da App Store da Apple são os SDKs 26 desde 28 de abril de 2026; a exigência do SDK 27 é um prazo posterior que estas notas não definem.23
Onde estão as notas de versão do iOS 27?
No site de documentação para desenvolvedores da Apple, sob iOS & iPadOS Release Notes, uma página para o 27.0, organizada por área com New Features, Resolved Issues, Known Issues e Deprecations sob cada uma. As contagens deste post vêm dessa página como obtida em 15 de setembro de 2026.2
A correção do NSURL está no SDK ou no sistema operacional?
No sistema operacional. Um único binário de simulador, compilado com o Xcode 27 contra o SDK 27.0 com iOS mínimo 26.0, codifica duas vezes em um runtime do iOS 26.5 e não codifica no runtime do iOS 27.0, e o build de Mac no macOS 26.6.2 também codifica duas vezes; nada mudou entre as duas execuções no simulador além do sistema operacional.4
Fontes
-
Apple, Releases, feed RSS obtido em 15 de setembro de 2026: “iOS 27.0 (24A437)”, “iPadOS 27.0 (24A437)”, “macOS 27.0 (26A428)”, “Xcode 27 (27A266a)”, “tvOS 27.0 (24J361)”, “visionOS 27.0 (24M362)” e “watchOS 27.0 (24R364)” datados de segunda-feira, 14 de setembro de 2026; “iOS 27.0 RC (24A437)” datado de sexta-feira, 11 de setembro de 2026; “iOS 27.0 beta (24A5355q)” datado de segunda-feira, 8 de junho de 2026. ↩↩↩↩↩
-
Apple, iOS & iPadOS 27 Release Notes, obtidas em 15 de setembro de 2026, após o lançamento GA. As contagens (93 áreas com título; 65 New Features, 197 Resolved Issues, 23 Known Issues, 11 Deprecations) são os itens de lista sob os títulos de cada área. Entradas citadas, por radar: parágrafo de Overview; UIKit, New Features (tela de inicialização 168247372, view controllers apresentados 170005251, barra de escopo 173860616, telas externas 177015874, restauração de estado 161843040, imagens de menu e
preferredImageVisibility170479084,navigationBarMinimization177953926), Resolved Issues (acessores da barra de status 162044221, redimensionamento 166422120, 178555304, 178558224, 178558897, 178559386, 178560235, 178561952, 178562971, 178573319), Deprecations (ciclo de vida por cenas 141837548,canOpenURL:179874781); SwiftUI, New Features (TabView164516837,Textselecionável 79770704,TextRendereremTextselecionável 158160386,.sceneAccessory175548901,AsyncImage78212597,@State105893279, imagens de menu 170480710,TextInputBorderShape173362083,toolbarMinimizationBehavior177954148), Resolved Issues (sheets e popovers 167448274,containerRelativeFrame165913417,scrollPositionapós toque na barra de status 111501113, FB12477370), New Features (LabeledContentemMenu175594929), Deprecations (FileDocument178776840); MetricKit, New Features (HitchTimeRatio180024784) e Deprecations (174892111, 180455992); Foundation, New Features (volumeAvailableCapacityKey75545872) e Resolved Issues (NSURL161588649, FB20439045); App Intents, Known Issues (photos.asset181800016, FB23652582) e 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) e 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, notas de versão do App Store Connect, obtidas em 15 de setembro de 2026. A entrada de 14 de setembro de 2026 está citada na íntegra na tabela; a entrada de 9 de setembro de 2026 registra os uploads com o SDK do RC. O mínimo dos SDKs 26 desde 28 de abril de 2026 vem da página Upcoming requirements da Apple. ↩↩↩↩
-
Reprodução do autor no Xcode 27.0 (27A266a) com
DEVELOPER_DIRapontando para ele, macOS 26.6.2 (25G83), 15 de setembro de 2026. Builds:iPhoneOS.sdk/System/Library/CoreServices/SystemVersion.plisttemProductBuildVersion24A430 eProductVersion27.0;xcrun simctl list runtimesimprime “iOS 27.0 (27.0 - 24A434)”. Headers e interfaces, todos sobiPhoneOS.sdk/System/Library/Frameworks:UIKit.framework/Headers/UIApplication.hlinha 98 (canOpenURL:);Foundation.framework/Headers/NSBundle.hlinhas 721 a 796 (NSBundleResourceRequest);Photos.framework/Headers/PHAssetResource.hlinhas 29 e 33;MetricKit.framework/Headers/MXMetricManager.hlinha 32;MetricKit.framework/Modules/MetricKit.swiftmodule/arm64e-apple-ios.swiftinterface, zero ocorrências deScrollHitchTimeMetricouscrollHitchTime, quatro deHitchTimeRatio;SwiftUI.framework/Modules/SwiftUI.swiftmodule/arm64e-apple-ios.swiftinterfacelinhas 23088 a 23093 (FileDocument), 9334 a 9338 (ReferenceFileDocument), 1728 a 1731 (Document), 9489 (mensagem de.roundedBorder), 13763 (toolbarMinimizationBehavior); zero ocorrências de identificador inteiro parabarMinimizeBehavior,barMinimizationSafeAreaAdjustmentoutoolbarMinimizeBehavioremUIKit.framework/Headers,UIKit.framework/ModuleseSwiftUI.framework/Modules(as únicas ocorrências parciais são o modificadortoolbarMinimizationSafeAreaAdjustmente seu tipoToolbarMinimizationSafeAreaAdjustment), enquantoUINavigationItem.hdeclaranavigationBarMinimization;AppIntents.framework/Modules/AppIntents.swiftmodule/arm64e-apple-ios.swiftinterface, zero ocorrências dedeleteEvents,deleteEvent: some AppIntents::AppSchemaIntentna linha 12608;PencilKit.framework/Headers/PKStrokeRenderState.hlinhas 15 a 17, ePencilKit.framework/Modules/PencilKit.swiftmodule/arm64e-apple-ios.swiftinterfacecom zero ocorrências deasObjC,convenience public init(_ swiftValue: PencilKit::PKStroke.PencilKit::RenderState)emPKStrokeRenderStateReferencena linha 46, e o inversopublic init(_ objcValue: PencilKit::PKStrokeRenderStateReference)dentro dePKStroke.RenderStatena linha 38;StoreKit.framework/Modules/StoreKit.swiftmodule/arm64e-apple-ios.swiftinterfacelinhas 311 a 322;HealthKit.framework/Modules/HealthKit.swiftmodule/arm64e-apple-ios.swiftinterfacelinhas 741 e 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.swiftinterfacelinhas 180 a 182 e 276 a 278;_CoreSpotlight_FoundationModels.framework/Modules/_CoreSpotlight_FoundationModels.swiftmodule/arm64e-apple-ios.swiftinterfacelinhas 64 a 78 e 100 a 129. Teste dephotos.asset: um arquivo Swift de 15 linhas que importa AppIntents e CoreLocation e declara@AppEntity(schema: .photos.asset) struct ProbeAssetcom umEntityQuery, umid, umadisplayRepresentatione nenhuma propriedade do schema;swiftc -c -target arm64-apple-ios27.0-simulatoro compilou com saída 0 e sem diagnósticos, e-Xfrontend -dump-macro-expansionsmostrou a macro adicionando, sob um atributo@available(iOS 27.0, macOS 27.0, tvOS 27.0, watchOS 27.0, visionOS 27.0, *),extension ProbeAsset: AssistantSchemaEntity { static let __appSchemaEntity = "photos.asset" }e uma extensionAppEntityvazia. Rodar de novo a própria linhaswift-frontenddo driver (capturada comswiftc -###) com-emit-const-values-pathe-const-gather-protocols-fileapontando para uma lista de 18 protocolos que escrevi (AppIntent,AppEntity,AppEnum,AssistantSchemaEntity,EntityQuerye os demais protocolos do App Intents) produziu um arquivo.swiftconstvalues, eappintentsmetadataprocessor --module-name ProbeMod --sdk-root <iPhoneSimulator27.0.sdk> --xcode-version 27A266a --platform-family iOS --deployment-target 27.0 --target-triple arm64-apple-ios27.0-simulatorsobre ele saiu com código 255, “At least one halting error was produced during export” e 12 linhas no formato “error: Missing required property ‘exposure’ from AppSchemaEntity ‘photos.asset’”, cada uma seguida de um fix-it como “var exposure: Double?” (os fix-its deassetTypeefiltercarregam os placeholders<#PhotoAssetType#>?e<#PhotoFilterEffectType#>?;AppIntents.framework/Modules/AppIntents.swiftmodule/arm64e-apple-ios.swiftinterfacedeclara esses nomes nas linhas 11695 e 11705 comoAppSchema.Enum("PhotoAssetType")sobassetTypeeAppSchema.Enum("PhotoFilterEffectType")sobfilterType); a invocação espelha a etapa de metadados do Xcode, mas não é byte a byte a do sistema de build, cuja lista de protocolos vem deSWIFT_EMIT_CONST_VALUE_PROTOCOLS. Teste de avisos de descontinuação: um arquivo Swift de 11 linhas que importa UIKit, Foundation e Photos, chamacanOpenURL(_:), constróiNSBundleResourceRequest(tags:)e lêPHAssetResource.originalFilename, compilado comswiftc -ccontra o SDK iPhoneSimulator 27.0 em-target arm64-apple-ios17.0-simulator,ios26.0eios27.0: zero diagnósticos em 17.0 e 26.0, três avisos[#DeprecatedDeclaration]em 27.0, citados no texto. Teste doNSURL: um arquivo Swift de 16 linhas que imprimeNSURL(string:)?.absoluteStringpara as três entradas da tabela, compilado comswiftc -Opara o host e, uma vez, comswiftc -O -target arm64-apple-ios26.0-simulatorcontra o SDK iPhoneSimulator 27.0 (otool -lsobre o resultado mostraLC_BUILD_VERSIONcomminos 26.0esdk 27.0); rodei esse único binário de simulador comxcrun simctl spawnem um simulador inicializado no runtime do iOS 26.5 (23F77) e depois em um simulador de iPhone 18 Pro inicializado no runtime do iOS 27.0 (24A434); as saídas do macOS e do iOS 26.5 foram idênticas, e todas as saídas são as da tabela. Teste de capacidade:URL(fileURLWithPath: NSHomeDirectory()).resourceValues(forKeys: [.volumeAvailableCapacityKey, .volumeTotalCapacityKey, .volumeAvailableCapacityForImportantUsageKey])maisstatfs; a execução no simulador imprimiuvolumeAvailableCapacity = 226009026560,f_bavail = 55177985,f_bsize = 4096; a execução no host imprimiuvolumeAvailableCapacity = 226009079808,f_bavail = 55177998. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Apple, documentação do HealthKit, earliestAuthorizedSampleDate(for:) e Authorizing access to health data, obtidas em 15 de setembro de 2026. A página do método lista disponibilidade em iOS 27.0, iPadOS 27.0, Mac Catalyst 27.0, macOS 27.0, visionOS 27.0 e watchOS 27.0 e é a fonte da frase sobre a data final e de “Your app can’t distinguish between denied and full access; limited authorization is the only state your app can identify, by design.”; o guia é a fonte de “people can choose to grant your app access to only a limited window of recent data rather than their full history,”, da frase sobre a segunda tela e de “Time-bound authorization applies only to sample types.” ↩↩↩↩↩
-
Apple, MXMetricManager, referência de classe do MetricKit, obtida em 15 de setembro de 2026 pelo JSON de documentação da Apple: a disponibilidade lista iOS 13.0, iPadOS 13.0, Mac Catalyst 13.1, macOS 12.0 e visionOS 1.0 com
deprecatedAt27.0 em cada uma, e o resumo de descontinuação diz “Use MetricManager instead.” ↩