Notas de la versión de iOS 27.0: obsolescencias, rupturas y correcciones
iOS 27.0 y iPadOS 27.0 salieron el lunes 14 de septiembre de 2026 como la build 24A437, la misma que Apple publicó como RC el 11 de septiembre, con el SDK dentro de Xcode 27 (27A266a) ese mismo día y con App Store Connect aceptando builds GA de 27.0 desde esa misma fecha.13 Ahora hay tres números de build que responden a “¿cuál iOS 27.0?”: el dispositivo ejecuta 24A437, el SDK de Xcode 27 se identifica como 24A430 y el runtime del simulador es 24A434.4 Las notas cubren 93 áreas con encabezado, con 65 funciones nuevas, 197 problemas resueltos, 23 problemas conocidos y 11 obsolescencias; lo que importa para el código existente es el conjunto que se activa en el momento en que compilas con el SDK 27.0, las obsolescencias confirmadas en los propios encabezados del SDK y una corrección de Foundation que un solo binario reproduce en un runtime de iOS 26.5 y en uno de iOS 27.0.24 {.answer-block}
TL;DR
- Builds. Dispositivo 24A437, SDK 24A430, runtime del simulador 24A434; la RC y la GA comparten la build del dispositivo, y el número del SDK no es el del dispositivo, algo que importa cuando un reporte de error pide uno.14
- Comportamiento al enlazar con 27. 12 categorías de cambios, 23 entradas en total, alteran lo que hace una app en el momento en que la compilas con el SDK 27.0: el requisito de pantalla de inicio, el mandato del ciclo de vida por escenas,
TabViewfallando con una selección oculta, la selección de texto del sistema enTextseleccionable, la herencia de traits en los view controllers presentados, la barra de ámbito en línea, las escenas de pantalla externa que ya no se ofrecen automáticamente, los modificadores de control que se restablecen dentro de sheets y popovers, el cálculo del área segura encontainerRelativeFrame, los accesores de la barra de estado, las reglas de redimensionamiento en iPad bajoUIRequiresFullScreeny dos cambios menores de SwiftUI en menús y en el desplazamiento al inicio.2 - Recompila o falla.
HitchTimeMetric.ratiode MetricKit ahora mide en una nueva unidadHitchTimeRatio, yScrollHitchTimeMetricdejó la API de Swift; Apple dice que recompiles con el SDK más reciente para evitar fallos al iniciar y un fallo por símbolo faltante, y la interfaz del SDK confirma que el tipo desapareció.24 - 11 obsolescencias, casi todas silenciosas.
canOpenURL:(ios(3.0, 27.0)en el encabezado), On Demand Resources (ios(9.0, 27.0)),PHAssetResource.originalFilename(ios(9, 27)), las API originales de MetricKit (marcadasAPI_TO_BE_DEPRECATED, así que es una obsolescencia blanda),ScrollHitchTimeMetric,FileDocument,calendar.deleteEventsrenombrado acalendar.deleteEvent, un renombrado en PencilKit, el mandato de escenas, AirPort Utility y una nota de idioma de Weather Highlights. Las tres duras solo advierten con un deployment target de 27.0; con 17.0 o 26.0 el mismo archivo compila limpio.24 - Dos cambios en Foundation, probados.
+[NSURL URLWithString:]ya no codifica dos veces un%20válido cuando escapa un espacio en otra parte de la cadena: un mismo binario de simulador produce%2520en un runtime de iOS 26.5 y%20en el runtime de iOS 27.0, y la build de Mac coincide con el lado antiguo, así que la corrección sigue al sistema operativo, no al SDK. El truncamiento devolumeAvailableCapacityKeya tres dígitos significativos no se ve en el simulador, que reporta exactamente 55.177.985 bloques.24
¿Qué build es cuál?
| Dónde | Build | Evidencia |
|---|---|---|
| Dispositivo, iOS 27.0 / iPadOS 27.0 | 24A437 | Feed de lanzamientos, lunes 14 de septiembre de 2026; “iOS 27.0 RC (24A437)” el viernes 11 de septiembre1 |
| SDK dentro de Xcode 27 (27A266a) | 24A430 | iPhoneOS.sdk/System/Library/CoreServices/SystemVersion.plist, ProductBuildVersion4 |
| Runtime del simulador de iOS 27.0 | 24A434 | xcrun simctl list runtimes imprime “iOS 27.0 (27.0 - 24A434)”4 |
| macOS 27.0 | 26A428 | Feed de lanzamientos, lunes 14 de septiembre1 |
| App Store Connect | SDK GA de 27.0 aceptados | “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.” (ya se pueden subir apps compiladas con Xcode 27 y los SDK de 27.0 a la App Store y a TestFlight). 14 de septiembre; subidas con el SDK de la RC aceptadas desde el 9 de septiembre3 |
Los tres números no son un error. El SDK es una instantánea de encabezados e interfaces, el runtime del simulador es un cryptex aparte que Apple entrega con Xcode, y la build del dispositivo es la que ejecuta la gente; una reproducción que diga “iOS 27.0” sin uno de estos datos omite el número que decide si una corrección aplicó.4
Las notas abren con dos oraciones de alcance, “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,” (el SDK permite desarrollar apps para iPhone y iPad con iOS y iPadOS 27 y viene incluido en Xcode 27, disponible en la Mac App Store), y luego recorren 93 áreas con encabezado. Contar los elementos de lista bajo cada encabezado da 65 funciones nuevas, 197 problemas resueltos, 23 problemas conocidos y 11 obsolescencias; Siri por sí sola suma 38 resueltos y ocho conocidos, SwiftUI 23 funciones nuevas y 13 resueltos, UIKit nueve nuevas y 13 resueltos.2 La publicación sobre Xcode 27 cubre el lado de la cadena de herramientas, y la que estás leyendo cubre el lado del sistema operativo y del SDK.
¿Qué cambia en el momento en que compilas con el SDK 27.0?
Apple condiciona los cambios de comportamiento al SDK contra el que se enlaza una app, así que estos no afectan en nada a la build que ya publicaste y todos se activan con el primer archive desde Xcode 27. Citando la nota de cada uno:2
- Pantalla de inicio. “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.” (las apps compiladas con el SDK 27.0 o posterior deben incluir una pantalla de inicio mediante una de esas cuatro claves enInfo.plist, o la App Store las rechaza). App Store Connect aceptó subidas a la App Store compiladas con los SDK de la RC de 27.0 desde el 9 de septiembre y con los SDK GA desde el 14 de septiembre; ninguna de las dos entradas dice cuándo empezaron los rechazos, así que lee ambas como fechas de subida y no como fecha de aplicación.3 Mi publicación sobre la pantalla de inicio audita un plist generado. - Ciclo de vida por escenas. Bajo las obsolescencias de UIKit: “Apps built with the latest SDK must adopt the scene-based life cycle or they fail to launch.” (las apps compiladas con el SDK más reciente deben adoptar el ciclo de vida basado en escenas o no arrancan). La publicación sobre el mandato de escenas tiene la migración.
- Selección de
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.” (unTabViewexige que su selección apunte a una pestaña visible y puede fallar si apunta a una oculta o no disponible). Una selección restaurada desdeUserDefaultsque nombra una pestaña que luego ocultaste es el patrón que hay que buscar. Textseleccionable. “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.” (una vistaTextcon.textSelection(.enabled)ahora admite selección interactiva con la interfaz de selección de texto del sistema). Apple añade que esas vistas “might include additional gestures for system text selection interactions” (pueden incluir gestos adicionales para la selección de texto del sistema) y remite los gestos personalizados a.highPriorityGesture(); la misma build también hace queTextRendererfuncione enTextseleccionable.- View controllers presentados. “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.” (un view controller presentado hereda su trait collection recorriendo la cadena de superviews a través de las vistas intermedias de la presentación, en lugar de saltar directamente al presentation controller). Las subclases personalizadas de
UIPresentationControllerque fijan traits son las que hay que volver a probar. - Barra de ámbito. “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.” (cuandoUISearchControllerusa la posición central de la barra de búsqueda, la barra de ámbito aparece en la misma fila que el campo de búsqueda y no en una fila aparte debajo). - Pantallas 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.” (el sistema ya no ofrece automáticamente las escenaswindowExternalDisplayNonInteractive; hay que registrar un accesorio de escena para mostrar contenido no interactivo en pantallas externas). SwiftUI recibe la misma puerta mediante.sceneAccessorycon unExternalNonInteractiveAccessory. - Sheets y popovers. Listado como corregido: “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.” (esos valores de entorno vuelven a sus valores predeterminados dentro de sheets y popovers). Si un sheet heredaba.controlSize(.large)de quien lo presenta, deja de hacerlo. containerRelativeFrame. También corregido para las builds con el SDK 27.0: el modificador “incorrectly accounts for safe-area insets on aScrollView’s non-scrollable axis, causing the calculated scrollable content size to be too small,” (contabilizaba mal los márgenes del área segura en el eje no desplazable de unScrollView, y el tamaño calculado del contenido desplazable quedaba demasiado pequeño), así que unScrollViewhorizontal concontainerRelativeFrame(.vertical)cambia de tamaño.- Accesores de la barra de estado. Corregido para las builds con el SDK 27.0: los accesores obsoletos de la barra de estado en
UIApplication, que la nota enumera comostatusBarFrame,statusBarOrientation,statusBarStyleeisStatusBarHidden, “might return NaN or null values” (pueden devolver NaN o valores nulos). - Redimensionamiento y orientación en iPad y en iPhone Mirroring. Nueve problemas resueltos de UIKit describen lo que una app “built with the iOS 27 SDK” (compilada con el SDK de iOS 27) debería ver ahora cuando su escena se conecta, o cuando el usuario redimensiona o rota su ventana: las apps con
UIRequiresFullScreenreciben “a discrete change to a newUIScreenwith an updated bounds” (un cambio discreto a un nuevoUIScreencon bounds actualizados) en lugar de actualizaciones continuas de tamaño, los bounds deUIScreen.main“should remain fixed once the screen connects” (deberían quedar fijos una vez que la pantalla se conecta), y “supported interface orientations should no longer be a condition for continuous resizability” (las orientaciones de interfaz admitidas ya no deberían ser una condición para el redimensionamiento continuo). - Menús y desplazamiento al inicio. Dos cambios menores de SwiftUI: “In apps built with the 27.0 SDKs, a
LabeledContentview used inside aMenumaps its value to the platform menu item’s subtitle,” (unLabeledContentdentro de unMenuconvierte su valor en el subtítulo del elemento de menú de la plataforma) y, listado como corregido, “In apps built with the 2027 SDKs, tapping the status bar to scroll aScrollViewto its top correctly updates a boundscrollPosition.” (tocar la barra de estado para desplazar unScrollViewal inicio actualiza correctamente unscrollPositionenlazado). Una etiqueta de menú que llevaba un valor por razones de diseño ahora gana un subtítulo, y un binding descrollPositionque quedaba desactualizado tras tocar la barra de estado ahora se actualiza.
Esas 12 categorías cubren las entradas que cambian el comportamiento existente. Las capacidades nuevas detrás de la misma condición de SDK, como el protocolo ReadableDocument, el protocolo Document construido sobre él y UIScene.extendStateRestoration, aparecen en las secciones posteriores; la categoría de pantallas externas empareja la eliminación de UIKit con su reemplazo en SwiftUI.
Dos entradas de MetricKit pertenecen aquí aunque tratan de recompilar y no de enlazar. “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.” (ambas propiedades usan ahora el nuevo tipo HitchTimeRatio, una subclase de Dimension que expresa el tiempo de tirones como milisegundos de tirón por segundo de duración medida; hay que recompilar con el SDK más reciente para adoptar el cambio de tipo y evitar fallos al iniciar). Y: “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(_:).” (el caso scrollHitchTime(_:) y el tipo ScrollHitchTimeMetric ya no forman parte de la nueva API Swift de MetricKit; hay que usar hitchTime(_:) y HitchTimeMetric, y recompilar para evitar un fallo por símbolo faltante).2 En la interfaz Swift de MetricKit del SDK de iOS 27, ScrollHitchTimeMetric y scrollHitchTime aparecen cero veces y HitchTimeRatio aparece cuatro veces, así que un binario compilado contra el SDK beta que usara cualquiera de esos nombres referencia un símbolo que la interfaz GA no exporta.4 Mi publicación sobre MetricKit cubre la nueva API desde la beta de junio.
¿Qué API quedan obsoletas en 27.0?
Las notas enumeran 11 obsolescencias. Una obsolescencia en una nota de versión es una oración; una obsolescencia en el SDK es una anotación de disponibilidad que el compilador lee, y las dos no siempre dicen lo mismo. Comprobé cada entrada contra los encabezados y las interfaces Swift dentro del SDK iPhoneOS 27.0 de Xcode 27:24
| Entrada de la nota | Lo que dice el SDK |
|---|---|
“canOpenURL: is deprecated. Attempt to open the URL and handle any failure instead of validating it first.” (intenta abrir la URL y maneja cualquier fallo en lugar de validarla primero) |
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)) en UIApplication.h; la publicación sobre canOpenURL tiene el patrón de reemplazo |
“On Demand Resources and the NSBundleResourceRequest API are deprecated. Use Background Assets instead.” (usa Background Assets en su lugar) |
API_DEPRECATED("Use Background Assets instead.", ios(9.0, 27.0), watchos(2.0, 27.0), tvos(9.0, 27.0)) en la clase, en sus métodos de prioridad de preservación y en sus constantes de notificación y prioridad; la publicación sobre ODR calcula el costo de la migración, y la respuesta “What you get is a compiler warning” de su FAQ ahora lleva la salvedad sobre el deployment target que explica la sección siguiente |
“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.” (la propiedad está mal marcada como no anulable, y una nueva propiedad anulable filename la reemplaza) |
originalFilename es API_DEPRECATED("Use filename instead", ios(9, 27), macos(10.15, 27), tvos(10, 27), visionos(1, 27)); filename es nullable y API_AVAILABLE(macos(27), ios(27), tvos(27), visionos(27)) |
Las API originales de MetricKit, MXMetricManager, MXMetricManagerSubscriber, MXMetricPayload y MXDiagnosticPayload, “are no longer recommended for new adoption. Use MetricManager instead.” (ya no se recomiendan para adopciones nuevas; usa MetricManager) |
API_DEPRECATED("Use MetricManager instead.", ios(13.0, API_TO_BE_DEPRECATED), macos(12.0, API_TO_BE_DEPRECATED)) en MXMetricManager: una obsolescencia blanda sin versión, así que hoy no hay advertencia. La página de referencia de Apple para la clase la lista como obsoleta en 27.0 en todas las plataformas, así que la documentación y el encabezado no coinciden; mi publicación sobre MetricKit repetía la versión de la página y ahora lleva una nota fechada sobre la discrepancia6 |
ScrollHitchTimeMetric y scrollHitchTime(_:) “are no longer part of the new Swift MetricKit API” (ya no forman parte de la nueva API Swift de MetricKit) |
Cero apariciones de cualquiera de los dos nombres en MetricKit.swiftmodule; no es obsolescencia, es eliminación |
“The FileDocument protocol is deprecated. Use ReadableDocument for read-only documents or Document for documents that support reading and writing.” (usa ReadableDocument para documentos de solo lectura o Document para los que admiten lectura y escritura) |
FileDocument: deprecated: 100000.0, message: "Conform your type to Document instead."; ReferenceFileDocument: "Use Document protocol instead."; ambas blandas, y Document es @available(iOS 27.0, macOS 27.0, visionOS 27.0, *), así que el reemplazo necesita un mínimo de 27 |
“The calendar.deleteEvents schema has been renamed to calendar.deleteEvent.” (el esquema fue renombrado) |
deleteEvents aparece cero veces en AppIntents.swiftmodule; deleteEvent: some AppSchemaIntent sí está. Un renombrado sin alias es un error de compilación para cualquiera que use el nombre antiguo |
“__PKStrokeRenderState has been renamed to PKStrokeRenderStateReference, with PKStrokeRenderStateReference.init(…) replacing PKStrokeRenderState.asObjCRenderState().” (un renombrado, con el inicializador de la clase de referencia reemplazando al método antiguo) |
PKStrokeRenderState.h declara @interface PKStrokeRenderState bajo API_AVAILABLE(ios(27.0), macos(27.0), visionos(27.0)) con NS_SWIFT_NAME(PKStrokeRenderStateReference); la interfaz Swift no tiene ningún asObjCRenderState; el reemplazo que Apple nombra es el init(_ swiftValue: PKStroke.RenderState) de la clase de referencia, así que PKStrokeRenderStateReference(state) es la nueva forma de llamada y la antigua no compila |
| “Apps built with the latest SDK must adopt the scene-based life cycle or they fail to launch.” (adopta el ciclo de vida por escenas o la app no arranca) | No es una anotación; es un fallo al iniciar. Consulta la publicación sobre el mandato de escenas |
| “AirPort Utility will no longer be available for new downloads from the App Store.” (AirPort Utility ya no estará disponible para descargas nuevas en la App Store). Las redescargas siguen funcionando; “functionality is not guaranteed” (la funcionalidad no está garantizada) en iOS 27 | Una app, no una API |
| “Weather Highlights is currently only available in US English.” (Weather Highlights solo está disponible por ahora en inglés de Estados Unidos) | Apple lo archiva bajo Deprecations; se lee como una nota de disponibilidad |
Una obsolescencia blanda y un renombrado quedan fuera de los encabezados de Deprecations. El estilo de campo de texto .roundedBorder lleva una anotación deprecated: 100000.0 en la interfaz de SwiftUI cuyo mensaje, quitando los acentos graves internos, dice “Use textFieldStyle(.bordered) with textInputBorderShape(.roundedRectangle)”; coincide con la entrada de New Features que introduce TextInputBorderShape. La versión 100000.0 es la convención de Apple para “obsoleto, pero todavía no”: con la configuración predeterminada el compilador guarda silencio y el mensaje solo aparece en la interfaz. El renombrado es más duro. UINavigationItem.navigationBarMinimization “replaces UINavigationItem.barMinimizeBehavior and UINavigationItem.barMinimizationSafeAreaAdjustment,” (reemplaza a esas dos propiedades) y toolbarMinimizationBehavior de SwiftUI reemplaza a toolbarMinimizeBehavior de la misma manera; ninguno de los tres nombres antiguos aparece en los encabezados de UIKit del SDK 27.0 ni en las interfaces Swift de UIKit y SwiftUI, así que el código que los usa no compila en lugar de advertir, la misma clase de caso que deleteEvents.24
Las duras también son más silenciosas de lo que parecen. El compilador compara la versión de obsolescencia con tu deployment target, no con el SDK, así que ios(3.0, 27.0) produce una advertencia solo en un target cuyo iOS mínimo sea 27.0. Compilé tres veces contra el SDK 27 un archivo que llama a canOpenURL, crea un NSBundleResourceRequest y lee originalFilename: con -target arm64-apple-ios17.0-simulator y con 26.0 compiló sin diagnósticos, y con 27.0 produjo tres advertencias, '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. y 'originalFilename' was deprecated in iOS 27: Use filename instead.4 Una app con un mínimo realista no se enterará de ninguna de estas por el compilador; con la configuración predeterminada del compilador, el grep de la lista de más abajo es el único aviso que recibes.
¿Qué correcciones verifiqué?
Dos entradas de Foundation se pueden ejecutar en lugar de leerse. Las notas listan la primera como corregida: “+[NSURL URLWithString:] no longer double-encodes the % of valid percent-escape sequences when encoding other invalid characters.” (ya no codifica dos veces el % de las secuencias de escape válidas al codificar otros caracteres inválidos).2 La prueba construye NSURL(string:) a partir de tres cadenas que contienen cada una un escape válido y un carácter que NSURL debe escapar, e imprime absoluteString. La compilé dos veces con Xcode 27: una para Mac y otra para el simulador con un iOS mínimo de 26.0, y luego ejecuté ese único binario de simulador, sin cambios, en un runtime de iOS 26.5 y en el runtime de iOS 27.0:4
| Entrada | macOS 26.6.2 y el binario de simulador en iOS 26.5 (idénticos) | El mismo binario de simulador en 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 |
La primera columna es el comportamiento antiguo: NSURL escapa el espacio y además convierte en %25 el % de un escape que ya era válido, así que la ruta resultante es distinta de la que nombraba el escape. La columna de iOS 27.0 es la corrección. Un único Mach-O, cuyo LC_BUILD_VERSION dice minos 26.0 y sdk 27.0, produjo ambas columnas de simulador, así que el sistema operativo en el que corre el código decide el resultado, no el SDK contra el que compilas ni el target para el que compilas. Una app que compiles hoy conserva la codificación antigua en el runtime de iOS 26.5 que probé, y la nota de versión no da motivos para esperar un resultado distinto en ninguna otra versión 26.x.
Las notas listan la segunda como nueva, y no pude reproducirla donde puedo ejecutar 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).” (se trunca a tres dígitos decimales significativos a nivel del conteo de bloques).2 En el simulador de iOS 27.0, URL.resourceValues(forKeys: [.volumeAvailableCapacityKey]) devolvió 226.009.026.560 bytes, y statfs sobre la misma ruta devolvió f_bavail 55.177.985 con f_bsize 4.096, que multiplicados dan exactamente la misma cifra; un conteo de bloques con tres dígitos significativos habría sido 55.100.000 bloques, o 225.689.600.000 bytes.4 El Mac anfitrión reportó 55.177.998 bloques con el mismo código. Mi lectura es que el truncamiento vive en el kernel del dispositivo y no en Foundation, y que el simulador, que le pregunta al kernel del Mac por el volumen del Mac, no puede mostrarlo; no he ejecutado la prueba en un dispositivo, así que trata la entrada como no probada y no como falsa, y espera que el redondeo aparezca en reportes de espacio libre del dispositivo que antes eran exactos.
¿Qué novedades cambian el código que ya tienes?
El historial limitado de HealthKit. La nota es una sola línea, “Updated HealthKit permissions flow now lets users grant apps access to limited history or full history,” (el flujo de permisos actualizado permite conceder a las apps acceso al historial limitado o completo) y la referencia de la API carga con las consecuencias.25 Después de la pantalla de tipos de datos, “a second screen prompts them to choose how much historical data to grant your app, either a recent limited window or their full history,” (una segunda pantalla pide elegir cuánto historial conceder a tu app: una ventana reciente limitada o el historial completo) y “Time-bound authorization applies only to sample types.” (la autorización acotada en el tiempo aplica solo a los tipos de muestra).5 El nuevo earliestAuthorizedSampleDate(for:), disponible desde iOS 27.0 y watchOS 27.0, devuelve un diccionario de HKObjectType a la fecha legible más antigua, y el límite no está donde supondrías: “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 evalúa el límite contra la fecha de fin de la muestra, así que puede responder a tu consulta con una muestra que empieza antes de la fecha autorizada más antigua siempre que termine después).45 La regla de privacidad se mantiene: “Your app can’t distinguish between denied and full access; limited authorization is the only state your app can identify, by design.” (tu app no puede distinguir entre acceso denegado y completo; la autorización limitada es el único estado que puede identificar, por diseño).5 La guía de Apple es tratar todo lo anterior a la fecha devuelta como desconocido y no como ausente, y acotar la fecha de inicio de cada consulta por tipo. Cualquier tendencia, línea base o racha calculada desde HealthKit ahora tiene que ser correcta en una ventana que el usuario eligió. La publicación sobre HealthKit cubre las adiciones de junio y no cubre el cambio del modelo de permisos.
Códigos de oferta de 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.” (las API de canje de códigos de oferta ahora devuelven un VerificationResult con una Transaction si el canje tiene éxito, o un error que describe la causa si falla).2 En la interfaz, presentOfferCodeRedeemSheet(in:) queda obsoleto en 27.0 con “Use presentOfferCodeRedeemSheet(from:options:) instead.”, y el reemplazo es presentOfferCodeRedeemSheet(from viewController: UIViewController, options: Set<RedeemOption> = []) async throws -> VerificationResult<Transaction>, disponible desde iOS 27.0.4 El código que presentaba la hoja y luego escuchaba Transaction.updates para obtener el resultado ahora puede hacerle await.
Core AI en segundo plano. “The system now restricts background access to the Neural Engine, similar to GPU usage restrictions,” (el sistema ahora restringe el acceso en segundo plano al Neural Engine, como ya hace con la GPU) y “Neural Engine memory usage is now attributed to your app process instead of the system, and appears in the Allocations instrument.” (el uso de memoria del Neural Engine ahora se atribuye al proceso de tu app y no al sistema, y aparece en el instrumento Allocations). El acceso en segundo plano “requires the new entitlement: “com.apple.developer.background-tasks.continued-processing.inference”.” (requiere ese nuevo entitlement).2 Una app que ejecutaba inferencia desde una tarea en segundo plano en 26 y nunca pidió nada encuentra el Neural Engine cerrado hasta que tenga el entitlement, y la memoria del Neural Engine que usa ahora aparece bajo su propio proceso en 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.” (puedes reducir el almacenamiento de tu app con paquetes de recursos localizados, que el sistema entrega según los idiomas preferidos del usuario).2 Para una app que abandona On Demand Resources, los paquetes localizados son la función que reemplaza a las etiquetas por idioma.
Alertas críticas. Las notas listan el comportamiento de las alertas críticas como corregido: “Critical alerts are automatically turned on for any apps that request your permission to enable notifications.” (las alertas críticas se activan automáticamente para cualquier app que pida permiso para habilitar notificaciones).2 La entrada no dice nada más, así que vuelve a probar cualquier flujo de notificaciones que pareciera tener privilegios de más en las betas.
Menús, @State, TLS y el nuevo slice. Cuatro entradas tienen sus propias publicaciones. La barra de menús y los menús contextuales en iPadOS 27 y macOS 27 “present a reduced set of menu item images,” (muestran un conjunto reducido de imágenes en los elementos de menú) con preferredImageVisibility en UIMenuElement como anulación: consulta imágenes de menú. La reescritura de la macro @State es una entrada de SwiftUI en estas notas, y cambia lo que compila bajo Xcode 27: consulta la publicación sobre Xcode 27 para la reproducción y la publicación sobre la macro @State para la auditoría. El requisito TLS más estricto para el tráfico de MDM, inscripción y actualizaciones de software empieza “in 27.0 operating systems” (en los sistemas operativos 27.0): consulta la auditoría de TLS. Y arm64e.x1 con CPA2 en “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 con chip A20 Pro o posterior, Mac con M6 o posterior y Apple Watch con S11 o posterior): consulta arm64e.x1.2
Menores, pero merecen un grep. System gana stat, lstat, fstat y fstatat en Swift con un tipo Stat y FilePath.stat(), y las notas listan como corregido un conflicto entre esos métodos y un stat() sin calificar en tus propias extensiones. NSTextTable “and its related objects and types are available to UIKit clients starting with OS 27 releases.” (y sus objetos y tipos relacionados están disponibles para los clientes de UIKit a partir de las versiones 27 del sistema). AsyncImage “now automatically caches downloaded images using HTTP caching protocols,” (ahora guarda automáticamente en caché las imágenes descargadas con los protocolos de caché HTTP) con inicializadores URLRequest y View.asyncImageURLSession(_:) para dirigirlo. “When linked on iOS 27, tvOS 27, macCatalyst 27, or visionOS 27 SDKs,” (al enlazar con esos SDK) UIScene.extendStateRestoration y UIScene.completeStateRestoration extienden la restauración de estado a la transición de segundo plano a primer plano. Y SwiftData lista una corrección para “a deadlock for @Query when saving a ModelContext on a background actor while scheduling new async tasks for a ModelActor.” (un interbloqueo de @Query al guardar un ModelContext en un actor en segundo plano mientras se programan nuevas tareas asíncronas para un ModelActor).2
Problemas conocidos que conviene planificar
- Las entidades
photos.assetdejan 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.” (las entidades existentes que adoptaban ese esquema pueden dejar de compilar con los SDK 27 porque el esquema ganó propiedades nuevas en esta versión). Solución alternativa: “To continue conforming to the schema, adopt the additional properties and move the code behind an availability check.” (adopta las propiedades adicionales y pon el código detrás de una comprobación de disponibilidad).2 La macro no te dirá cuáles propiedades: una conformidad vacía a@AppEntity(schema: .photos.asset)compila limpia bajoswiftc, y su expansión solo añade una conformidad aAssistantSchemaEntityque lleva el nombre del esquema. La lista sale del paso de metadatos de App Intents de Xcode,appintentsmetadataprocessor, que hace fallar la build con un error por cada propiedad faltante. Ejecutado a mano sobre esa conformidad vacía contra el SDK 27.0, reporta 12, cada una con su 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?; los dos marcadores<#…#>representan enums que declaras tú mismo contra los esquemas de enum.photos.assetTypey.photos.filterType, que la interfaz nombraPhotoAssetTypeyPhotoFilterEffectType. No pude comparar esa lista con el SDK 26, porque el único Xcode en este Mac es 27A266a.4 - Los tokens de Now Playing van a producción. “
RemoteMediaSessionandRemoteMediaSessionRepresentablealways provision Now Playing start and update push tokens for theproductionAPNs environment, even if theaps-environmentconfiguration is set todevelopment.” (siempre aprovisionan los tokens push de inicio y actualización de Now Playing para el entornoproductionde APNs, aunqueaps-environmentesté configurado comodevelopment). Solución alternativa: “Use theproductionenvironment for testing and validation.” (usa el entornoproductionpara pruebas y validación).2 La clase está en el nuevo frameworkNowPlaying, marcado como no disponible en macOS y visionOS.4 SpotlightSearchTooldesborda el modelo en el dispositivo. Sin una configuración, “the tool’s description and parameter schema alone exceed the on-device model’s context window before any prompt is added.” (la descripción de la herramienta y el esquema de parámetros por sí solos superan la ventana de contexto del modelo en el dispositivo antes de añadir cualquier prompt). Solución alternativa: una guía enfocada, “.focused(.communications),.focused(.calendar),.focused(.documents),.focused(.visualMedia), or.focused(.audio).”2 La API existe:SpotlightSearchTool.Guide.focused(_ domain: ContentDomain = .items)está junto a.completey.dynamic(_:)en la interfaz_CoreSpotlight_FoundationModels.4 Mi publicación sobre IA en el dispositivo cubre la herramienta; sus pasos de adopción de junio emparejaban la configuración predeterminada con el modelo del sistema, y ahora llevan una corrección fechada.- Trazas de rendimiento desde el Centro de control. “Gathering
PowerProfilerandLookbacktraces through thePerformance TraceControl Center widget might fail to produce traces.” (recopilar trazas dePowerProfileryLookbackmediante el widgetPerformance Tracedel Centro de control puede no producir trazas). La solución alternativa que ofrece Apple es “Gather traces on iOS 27.0 beta 1 or earlier,” (recopilar las trazas en iOS 27.0 beta 1 o anterior), que no es una solución que la mayoría de los equipos pueda aplicar en un dispositivo que ya se actualizó.2 - Pruebas de StoreKit. “Changing the storefront or locale using
SKTestSessiondoesn’t propagate throughStorefront.updates,” (cambiar la tienda o la configuración regional conSKTestSessionno se propaga a través deStorefront.updates) y “Failed purchases usingSKTestSessionmight display error dialogs even whendialogsDisabledis set to true.” (las compras fallidas conSKTestSessionpueden mostrar diálogos de error aunquedialogsDisabledesté en true).2 - Atajos y
UnionValue. Un parámetro con “two number-related types (for example, both Int and Double)” (dos tipos numéricos, por ejemplo Int y Double a la vez) muestra la opción numérica dos veces; la solución alternativa de Apple es declarar solo uno.2
Qué haría yo esta semana
- Haz un archive desde Xcode 27 y pasa la lista de enlazado con 27 de arriba por la app antes de TestFlight: claves de pantalla de inicio, ciclo de vida por escenas, cualquier
TabViewcuya selección pueda nombrar una pestaña oculta y cualquier sheet que heredara modificadores de control.2 - Compila el código de MetricKit contra el SDK GA antes de publicar; un binario que todavía referencia
ScrollHitchTimeMetrico el tipo antiguo deratioes un fallo al iniciar según la descripción de Apple, y la interfaz ya no exporta el nombre.24 - Busca con grep
canOpenURL,NSBundleResourceRequest,originalFilename,FileDocument,deleteEvents,asObjCRenderStateybarMinimizeBehavior; los tres primeros solo advierten con un deployment target de 27.0,FileDocumentes blando y los tres últimos no compilan, así que el grep es el aviso.4 - Si lees HealthKit, llama a
earliestAuthorizedSampleDate(for:)después de la autorización y acota la fecha de inicio de cada consulta por tipo; luego decide qué significa una racha o una línea base en una ventana que eligió el usuario.5 - Registra el número de build en los reportes de error desde tres lugares:
ProcessInfoen el dispositivo, elSystemVersion.plistdel SDK en la máquina de compilación ysimctl list runtimespara las reproducciones en simulador. Difieren, y una corrección que está en 24A437 puede no estar en 24A434.4 - Si construyes URL a partir de cadenas con
NSURL(string:), sigue probando en iOS 26: el sistema operativo corrige la doble codificación%25, no tu recompilación, y un mismo binario de Xcode 27 la produce en el runtime 26.5 y no en 27.0.4
Preguntas frecuentes
¿Cuándo salió iOS 27.0 y qué build es?
El lunes 14 de septiembre de 2026, como la build 24A437, la misma que Apple publicó como release candidate el viernes 11 de septiembre. iPadOS 27.0 comparte el número.1
¿Qué build de iOS 27.0 hay en el SDK de Xcode 27?
El SDK iPhoneOS 27.0 dentro de Xcode 27 (27A266a) reporta ProductBuildVersion 24A430, y el runtime del simulador de iOS 27.0 reporta 24A434. Ninguno de los dos es la build del dispositivo.4
¿Qué queda obsoleto en iOS 27?
Las notas enumeran 11 entradas: canOpenURL:, On Demand Resources y NSBundleResourceRequest, PHAssetResource.originalFilename, las API originales de MetricKit, ScrollHitchTimeMetric, FileDocument, el esquema calendar.deleteEvents, __PKStrokeRenderState, el mandato del ciclo de vida por escenas de UIKit, AirPort Utility y una nota de idioma de Weather Highlights. Tres llevan versiones de obsolescencia duras 27.0 en el SDK y solo advierten con un deployment target de 27.0, dos son blandas, dos son renombrados, una es una eliminación y tres no son cambios de API.24
¿Necesito recompilar mi app para iOS 27?
No para que siga funcionando, y las entradas se dividen en tres grupos. Condicionadas por el SDK: las 12 categorías de enlazado con 27 de arriba, que no cambian nada hasta que compilas con el SDK 27.0. A nivel de sistema operativo, y por tanto para todo binario en un dispositivo con 27.0: la restricción del Neural Engine en segundo plano y su entitlement, el flujo de permisos de historial limitado de HealthKit, la aplicación de TLS para el tráfico de MDM y de actualizaciones, el cambio de imágenes de menú en iPadOS 27, la corrección de alertas críticas y la corrección de codificación de NSURL. Binarios de beta: el código de MetricKit compilado contra un SDK beta, que Apple pide recompilar con el SDK GA para evitar fallos. El SDK mínimo de la App Store de Apple son los SDK 26 desde el 28 de abril de 2026; el requisito del SDK 27 es una fecha límite posterior que estas notas no fijan.23
¿Dónde están las notas de la versión de iOS 27?
En el sitio de documentación para desarrolladores de Apple, bajo iOS & iPadOS Release Notes, una página para 27.0, organizada por área con New Features, Resolved Issues, Known Issues y Deprecations bajo cada una. Los conteos de esta publicación provienen de esa página tal como la obtuve el 15 de septiembre de 2026.2
¿La corrección de NSURL está en el SDK o en el sistema operativo?
En el sistema operativo. Un único binario de simulador, compilado con Xcode 27 contra el SDK 27.0 con un iOS mínimo de 26.0, codifica dos veces en un runtime de iOS 26.5 y no lo hace en el runtime de iOS 27.0, y la build de Mac en macOS 26.6.2 también codifica dos veces; nada cambió entre las dos ejecuciones en simulador salvo el sistema operativo.4
Fuentes
-
Apple, Releases, feed RSS obtenido el 15 de septiembre 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)” y “watchOS 27.0 (24R364)” con fecha del lunes 14 de septiembre de 2026; “iOS 27.0 RC (24A437)” con fecha del viernes 11 de septiembre de 2026; “iOS 27.0 beta (24A5355q)” con fecha del lunes 8 de junio de 2026. ↩↩↩↩↩
-
Apple, iOS & iPadOS 27 Release Notes, obtenidas el 15 de septiembre de 2026 tras el lanzamiento GA. Los conteos (93 áreas con encabezado; 65 New Features, 197 Resolved Issues, 23 Known Issues, 11 Deprecations) son los elementos de lista bajo los encabezados de cada área. Entradas citadas, por radar: párrafo de Overview; UIKit, New Features (pantalla de inicio 168247372, view controllers presentados 170005251, barra de ámbito 173860616, pantallas externas 177015874, restauración de estado 161843040, imágenes de menú y
preferredImageVisibility170479084,navigationBarMinimization177953926), Resolved Issues (accesores de la barra de estado 162044221, redimensionamiento 166422120, 178555304, 178558224, 178558897, 178559386, 178560235, 178561952, 178562971, 178573319), Deprecations (ciclo de vida por escenas 141837548,canOpenURL:179874781); SwiftUI, New Features (TabView164516837,Textseleccionable 79770704,TextRendererenTextseleccionable 158160386,.sceneAccessory175548901,AsyncImage78212597,@State105893279, imágenes de menú 170480710,TextInputBorderShape173362083,toolbarMinimizationBehavior177954148), Resolved Issues (sheets y popovers 167448274,containerRelativeFrame165913417,scrollPositiontras tocar la barra de estado 111501113, FB12477370), New Features (LabeledContentenMenu175594929), Deprecations (FileDocument178776840); MetricKit, New Features (HitchTimeRatio180024784) y Deprecations (174892111, 180455992); Foundation, New Features (volumeAvailableCapacityKey75545872) y Resolved Issues (NSURL161588649, FB20439045); App Intents, Known Issues (photos.asset181800016, FB23652582) y 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) y 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 la versión de App Store Connect, obtenidas el 15 de septiembre de 2026. La entrada del 14 de septiembre de 2026 se cita completa en la tabla; la entrada del 9 de septiembre de 2026 registra las subidas con el SDK de la RC. El mínimo de los SDK 26 desde el 28 de abril de 2026 proviene de la página Upcoming requirements de Apple. ↩↩↩↩
-
Reproducción del autor en Xcode 27.0 (27A266a) con
DEVELOPER_DIRapuntando a él, macOS 26.6.2 (25G83), 15 de septiembre de 2026. Builds:iPhoneOS.sdk/System/Library/CoreServices/SystemVersion.plisttieneProductBuildVersion24A430 yProductVersion27.0;xcrun simctl list runtimesimprime “iOS 27.0 (27.0 - 24A434)”. Encabezados e interfaces, todos bajoiPhoneOS.sdk/System/Library/Frameworks:UIKit.framework/Headers/UIApplication.hlínea 98 (canOpenURL:);Foundation.framework/Headers/NSBundle.hlíneas 721 a 796 (NSBundleResourceRequest);Photos.framework/Headers/PHAssetResource.hlíneas 29 y 33;MetricKit.framework/Headers/MXMetricManager.hlínea 32;MetricKit.framework/Modules/MetricKit.swiftmodule/arm64e-apple-ios.swiftinterface, cero coincidencias paraScrollHitchTimeMetricoscrollHitchTime, cuatro paraHitchTimeRatio;SwiftUI.framework/Modules/SwiftUI.swiftmodule/arm64e-apple-ios.swiftinterfacelíneas 23088 a 23093 (FileDocument), 9334 a 9338 (ReferenceFileDocument), 1728 a 1731 (Document), 9489 (mensaje de.roundedBorder), 13763 (toolbarMinimizationBehavior); cero coincidencias de identificador completo parabarMinimizeBehavior,barMinimizationSafeAreaAdjustmentotoolbarMinimizeBehaviorenUIKit.framework/Headers,UIKit.framework/ModulesySwiftUI.framework/Modules(las únicas coincidencias parciales son el modificadortoolbarMinimizationSafeAreaAdjustmenty su tipoToolbarMinimizationSafeAreaAdjustment), mientras queUINavigationItem.hdeclaranavigationBarMinimization;AppIntents.framework/Modules/AppIntents.swiftmodule/arm64e-apple-ios.swiftinterface, cero coincidencias paradeleteEvents,deleteEvent: some AppIntents::AppSchemaIntenten la línea 12608;PencilKit.framework/Headers/PKStrokeRenderState.hlíneas 15 a 17, yPencilKit.framework/Modules/PencilKit.swiftmodule/arm64e-apple-ios.swiftinterfacecon cero coincidencias paraasObjC,convenience public init(_ swiftValue: PencilKit::PKStroke.PencilKit::RenderState)enPKStrokeRenderStateReferenceen la línea 46, y el inversopublic init(_ objcValue: PencilKit::PKStrokeRenderStateReference)dentro dePKStroke.RenderStateen la línea 38;StoreKit.framework/Modules/StoreKit.swiftmodule/arm64e-apple-ios.swiftinterfacelíneas 311 a 322;HealthKit.framework/Modules/HealthKit.swiftmodule/arm64e-apple-ios.swiftinterfacelíneas 741 y 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.swiftinterfacelíneas 180 a 182 y 276 a 278;_CoreSpotlight_FoundationModels.framework/Modules/_CoreSpotlight_FoundationModels.swiftmodule/arm64e-apple-ios.swiftinterfacelíneas 64 a 78 y 100 a 129. Prueba dephotos.asset: un archivo Swift de 15 líneas que importa AppIntents y CoreLocation y declara@AppEntity(schema: .photos.asset) struct ProbeAssetcon unEntityQuery, unid, unadisplayRepresentationy ninguna propiedad del esquema;swiftc -c -target arm64-apple-ios27.0-simulatorlo compiló con salida 0 y sin diagnósticos, y-Xfrontend -dump-macro-expansionsmostró que la macro añade, bajo un 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" }y una extensiónAppEntityvacía. Volver a ejecutar la propia líneaswift-frontenddel driver (capturada conswiftc -###) con-emit-const-values-pathy-const-gather-protocols-fileapuntando a una lista de 18 protocolos que escribí (AppIntent,AppEntity,AppEnum,AssistantSchemaEntity,EntityQueryy los demás protocolos de App Intents) produjo un archivo.swiftconstvalues, yappintentsmetadataprocessor --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 él terminó con código 255, “At least one halting error was produced during export” y 12 líneas de la forma “error: Missing required property ‘exposure’ from AppSchemaEntity ‘photos.asset’”, cada una seguida de un fix-it como “var exposure: Double?” (los fix-it deassetTypeyfilterllevan los marcadores<#PhotoAssetType#>?y<#PhotoFilterEffectType#>?;AppIntents.framework/Modules/AppIntents.swiftmodule/arm64e-apple-ios.swiftinterfacedeclara esos nombres en las líneas 11695 y 11705 comoAppSchema.Enum("PhotoAssetType")bajoassetTypeyAppSchema.Enum("PhotoFilterEffectType")bajofilterType); la invocación refleja el paso de metadatos de Xcode pero no es byte por byte la del sistema de compilación, cuya lista de protocolos viene deSWIFT_EMIT_CONST_VALUE_PROTOCOLS. Prueba de advertencias de obsolescencia: un archivo Swift de 11 líneas que importa UIKit, Foundation y Photos, llama acanOpenURL(_:), construyeNSBundleResourceRequest(tags:)y leePHAssetResource.originalFilename, compilado conswiftc -ccontra el SDK iPhoneSimulator 27.0 con-target arm64-apple-ios17.0-simulator,ios26.0eios27.0: cero diagnósticos en 17.0 y 26.0, tres advertencias[#DeprecatedDeclaration]en 27.0, citadas en el texto. Prueba deNSURL: un archivo Swift de 16 líneas que imprimeNSURL(string:)?.absoluteStringpara las tres entradas de la tabla, compilado conswiftc -Opara el anfitrión y, una vez, conswiftc -O -target arm64-apple-ios26.0-simulatorcontra el SDK iPhoneSimulator 27.0 (otool -lsobre el resultado muestraLC_BUILD_VERSIONconminos 26.0ysdk 27.0); ejecuté ese único binario de simulador conxcrun simctl spawnen un simulador arrancado con el runtime de iOS 26.5 (23F77) y luego en un simulador de iPhone 18 Pro arrancado con el runtime de iOS 27.0 (24A434); las salidas de macOS y de iOS 26.5 fueron idénticas, y todas las salidas son las de la tabla. Prueba de capacidad:URL(fileURLWithPath: NSHomeDirectory()).resourceValues(forKeys: [.volumeAvailableCapacityKey, .volumeTotalCapacityKey, .volumeAvailableCapacityForImportantUsageKey])másstatfs; la ejecución en simulador imprimióvolumeAvailableCapacity = 226009026560,f_bavail = 55177985,f_bsize = 4096; la ejecución en el anfitrión imprimióvolumeAvailableCapacity = 226009079808,f_bavail = 55177998. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Apple, documentación de HealthKit, earliestAuthorizedSampleDate(for:) y Authorizing access to health data, obtenidas el 15 de septiembre de 2026. La página del método lista disponibilidad en iOS 27.0, iPadOS 27.0, Mac Catalyst 27.0, macOS 27.0, visionOS 27.0 y watchOS 27.0 y es la fuente de la oración sobre la fecha de fin y de “Your app can’t distinguish between denied and full access; limited authorization is the only state your app can identify, by design.”; la guía es la fuente de “people can choose to grant your app access to only a limited window of recent data rather than their full history,” de la oración sobre la segunda pantalla y de “Time-bound authorization applies only to sample types.” ↩↩↩↩↩
-
Apple, MXMetricManager, referencia de clase de MetricKit, obtenida el 15 de septiembre de 2026 mediante el JSON de documentación de Apple: la disponibilidad lista iOS 13.0, iPadOS 13.0, Mac Catalyst 13.1, macOS 12.0 y visionOS 1.0 con
deprecatedAt27.0 en cada una, y el resumen de obsolescencia dice “Use MetricManager instead.” ↩