Xcode 27.1 beta: tu app en el simulador del iPhone Duo

Xcode 27.1 beta (27A9269) salió el viernes 18 de septiembre de 2026 con el primer SDK de iOS 27.1 y un tipo de dispositivo iPhone Duo para el simulador, cuatro días después de Xcode 27.0. El SDK trae todas las API de iPhone Duo que nombra la guía de preparación de Apple, el perfil del tipo de dispositivo define las dos pantallas en 1398 por 2034 y 2007 por 2853 píxeles a 3x, es decir 466 por 678 y 669 por 951 puntos, y el runtime del simulador es una descarga aparte que Xcode busca cuando hace falta. Las propias notas de Apple listan tres cosas que el simulador todavía no puede hacer, y una app de sondeo enlazada con el SDK 27.1 y ejecutada en las tres poses de Device Hub llena una pantalla de 466 por 678 puntos cerrada, con sus barras a lo largo del borde final, y una de 951 por 669 abierta, regular en ambas clases de tamaño ahí, con el pliegue reportado como una división y la cámara y la columna de estado como oclusiones, y con UIScreen.main respondiendo todavía por la pantalla exterior mientras la app está en la interior. (Corregido el 2 de octubre: hasta entonces este párrafo decía que la sonda no veía ninguna región reservada; esa sonda se había enlazado como app de iOS 27.0.)1245613

TL;DR

  • Fechas y builds. El feed de lanzamientos de Apple fecha Xcode 27.1 beta (27A9269) el viernes 18 de septiembre. xcodebuild -version imprime Xcode 27.1 y Build version 27A9269; los SDK de iPhoneOS y de iPhoneSimulator se identifican ambos como iOS 27.1 build 24A94403; el compilador de Swift reporta la misma cadena de versión swiftlang-6.4.0.34.1 que Xcode 27.0, y el enlazador el mismo ld-27037.1. El xip pesa 2.027.292.809 bytes y la app expandida ocupa 3,6 GiB, y se instala junto a Xcode 27.0 sin reemplazarlo.14 (11 de octubre: Xcode 27.1 RC (27A9275) llegó después, el 5 de octubre, y App Store Connect acepta sus builds para el App Store además de TestFlight.14) (15 de octubre: Xcode 27.1 salió como versión final, build 27A9275, la build de la RC, y la entrada de App Store Connect del día acepta sus builds para la tienda con ese nombre.15)
  • Las API del Duo ya están en el SDK. Los diez nombres que mi revisión del 17 de septiembre no encontró en el SDK 27.0 están todos en el SDK 27.1, entre ellos ArrangementView y reservedRegions(kind:options:layoutDirectionBehavior:) en SwiftUICore, toolbarVerticalBehavior(_:) en SwiftUI, y UIArrangementViewController, preferredVerticalBarBehavior y verticalBarEdge en UIKit. SwiftUI los marca con @available(anyAppleOS 27.1, *); los headers de UIKit marcan el controlador de disposición y los métodos de regiones reservadas con API_AVAILABLE(ios(27.1), tvos(27.1), visionos(27.1)), dos plataformas más de las que listan las páginas de documentación.4
  • El perfil del simulador deja por escrito los tamaños de pantalla. El tipo de dispositivo iPhone Duo (iPhone19,4, clase de producto V68, número de modelo A3447) define dos pantallas integradas: primary a 1398 por 2034 píxeles, escala 3, y primary-1 a 2007 por 2853 píxeles, escala 3, con una orientación nativa de 270. Divididas entre tres dan 466 por 678 y 669 por 951 puntos, y la cifra interior es la que mi post sobre el Duo para desarrolladores infirió el 10 de septiembre a partir del tamaño de captura de App Store Connect. El perfil exige runtime 27.1 o posterior.5
  • Qué hace el simulador con una app real (corregido el 2 de octubre). Device Hub expone tres poses, Closed (cerrado), Book (libro) y Open (abierto), más Rotate Right (rotar a la derecha). Una sonda enlazada con el SDK 27.1 recibe toda la pantalla exterior cuando está cerrada, 466 por 678 puntos, ancho compacto, con su barra de herramientas y su barra de pestañas en el borde final, toolbarVerticalEdge en trailing y dos regiones de oclusión activas, la cámara y la columna de estado. Abierta, recibe toda la pantalla interior, 951 por 669 puntos con orientación nativa horizontal, regular en ambas clases de tamaño, otra vez con barras verticales y con una división inactiva de 40 puntos de ancho por el medio que pasa a activa en la pose Book; girada, 669 por 951 con barras horizontales. UIScreen.main.bounds sigue reportando 466 por 678 mientras la app está en la pantalla interior. Hasta el 2 de octubre esta viñeta daba los tamaños de pantalla, 466 por 678 y 951 por 669, con márgenes de área segura de 34 a cada lado en Open, una barra de herramientas horizontal y ninguna región reservada en ninguna pose; el cuerpo daba el área que midió la sonda, 80 puntos más angosta que la pantalla (386 puntos cerrada, 803 dentro de márgenes de 34 puntos abierta). Todo eso salió de una sonda que por error se había enlazado como app de iOS 27.0: es lo que recibe el SDK 27.0, y la actualización de abajo trae las dos builds.61213
  • Lo que la beta todavía no puede hacer. Las notas de Apple: “Initial Simulator launch can take several minutes.” (187708500), “StandBy is unavailable in the iPhone Duo Simulator runtime.” (187708663) y “Running and debugging most app extensions is unavailable in the iPhone Duo Simulator runtime.” (187708767), es decir que el primer arranque del simulador puede tardar varios minutos y que ni StandBy ni la mayoría de las extensiones de app están disponibles en ese runtime. Súmale dos Known Issues de Mac Catalyst para quien además publique su app en la Mac, y una cosa que Apple no lista: la descarga del runtime falló en mi primer intento con Download failed. y funcionó al reintentar.23

Actualización del 2 de octubre: la sonda de septiembre se había enlazado como app de iOS 27.0

Los resultados del simulador que este post publicó del 21 de septiembre al 2 de octubre se midieron bien y se describieron mal. Son lo que hace el simulador del iPhone Duo con una app compilada contra el SDK de iOS 27.0. Yo los presenté como lo que hace con una app compilada contra 27.1.

Qué salió mal. La sonda era un solo archivo de Swift, compilado llamando directamente a swiftc -sdk <iPhoneSimulator27.1.sdk>. Esa bandera llega al compilador. No llega al paso de enlace, donde el driver recurrió al SDK de macOS de ese mismo Xcode y registró en el binario la versión de ese SDK: LC_BUILD_VERSION decía sdk 27.0. Es a partir de ese número que iOS decide qué comportamientos recibe una app. Ejecutado otra vez el 2 de octubre, el mismo comando imprime la causa como advertencia, “using sysroot for ‘macOS 27.0’ but targeting ‘arm64-apple-ios27.1.0-simulator’” (toma como sysroot el SDK de macOS 27.0 aunque el destino es el simulador de iOS 27.1); si la imprimió en septiembre, no la leí como la causa de nada.13

Cómo salió a la luz. El 2 de octubre ejecuté una app real, compilada por Xcode 27.1 beta con el mismo SDK, en el mismo simulador. Su barra de herramientas y su barra de pestañas quedaban a lo largo del costado de la pantalla exterior, donde las de la sonda habían quedado tendidas arriba. otool -l sobre los dos binarios mostró sdk 27.1 en la app y sdk 27.0 en una sonda recompilada como en septiembre. Recompilada con SDKROOT definido, la sonda dice sdk 27.1 y se comporta como la app. Y una versión simple de la sonda, compilada por el propio Xcode 27.0 contra el SDK real de iOS 27.0, recibe las mismas ventanas que recibió la que salió mal sellada, así que los números de septiembre son un retrato fiel de una build de 27.0.13

La nueva ejecución. El mismo código fuente, enlazado de las dos maneras, en cada pose, con el mismo Xcode 27.1 beta (27A9269) y el mismo runtime (24A94401):13

Pose Enlazada como SDK 27.0 Enlazada como SDK 27.1
Cerrado ventana de 386 por 678 puntos junto a una franja negra; barras horizontales; toolbarVerticalEdge nil; ninguna región ventana de 466 por 678, toda la pantalla; barra de herramientas y barra de pestañas verticales en el borde final; toolbarVerticalEdge trailing; dos oclusiones activas
Cerrado, girado ventana de 678 por 386; barras horizontales; ninguna región ventana de 678 por 466; compacta en ambas clases de tamaño; barras verticales; dos oclusiones activas, la cámara y la columna de estado
Abierto ventana de 871 por 669; barras horizontales; ninguna región ventana de 951 por 669; barras verticales; una división inactiva, una oclusión inactiva y una activa
Abierto, girado ventana de 669 por 871; barras horizontales; ninguna región ventana de 669 por 951; barras horizontales; toolbarVerticalEdge nil; las mismas tres regiones, giradas
Book como Abierto como Abierto, con la división activa
Book, girado como Abierto, girado como Abierto, girado, con la división activa

Qué se retira. Tres afirmaciones, cada una cierta para la build de 27.0 y falsa para una build con el sello 27.1: que la barra de herramientas nunca se dibujó en vertical; que reservedRegions no devolvió nada en ninguna pose; y que el simulador le dio a la app solo la pantalla junto a la franja de estado. Una cuarta se equivocaba en el motivo: escribí que, girada, la disposición dividida “stays side by side even though the container is now taller than it is wide” (se mantiene lado a lado aunque el contenedor sea ahora más alto que ancho). La vista de disposición de la sonda era ella misma más ancha que alta dentro de esa pantalla, y se divide según su propia forma; una disposición que llena la pantalla girada se apila, tal como dice la guía de Apple. Una quinta: el TL;DR daba los tamaños de pantalla, 466 por 678 y 951 por 669, donde el cuerpo daba el área que midió la sonda, 80 puntos más angosta (386 puntos cerrada, 803 dentro de márgenes de 34 puntos abierta); la build de 27.0 nunca tuvo la pantalla completa.713

Qué se mantiene. Todo lo que está fuera de la sección del simulador: las fechas y las builds, la tabla de símbolos del SDK, el perfil del dispositivo con sus tamaños en píxeles y en puntos, la descarga del runtime y los Known Issues de Apple. Dentro de ella: los tamaños de pantalla, las clases de tamaño, las poses que ofrece Device Hub, el crash de screenConfig y la trampa de UIScreen.main, que la nueva ejecución reprodujo con el sello 27.1. La nota del 24 de septiembre que esta actualización reemplaza suponía que los ceros venían de leer las regiones demasiado pronto, y prometía repetir la prueba en varios ángulos de bisagra. La suposición era errónea: la build de 27.0 no devuelve ninguna por mucho que pregunte. La observación que la nota citaba de Molzahn se sostiene: la sonda bien enlazada no leyó ninguna región en sus primeras seis a nueve evaluaciones y las leyó todas a partir de ahí. Las ejecuciones en distintos ángulos de bisagra no se hicieron.1213

Si armaste tu propia sonda a partir de este post, revísala: otool -l <app>/<binary> | grep -A4 LC_BUILD_VERSION. Un proyecto compilado por Xcode queda sellado correctamente. Un archivo compilado a mano necesita SDKROOT exportado al SDK del simulador antes de que corra swiftc. El ejemplo práctico que destapó esto trae la comparación de las tres versiones, también con un sello de iOS 26.

Actualización del 26 de octubre: el teléfono salió con 27.1, y los números del SDK final

El iPhone Duo llegó a las tiendas el viernes 23 de octubre con iOS 27.1, según la sala de prensa de Apple y su página de versiones de seguridad, que lista “iOS 27.1” solo para “iPhone Duo” y sin entradas CVE publicadas; ningún ítem de iOS 27.1 llegó nunca al feed de lanzamientos, no apareció ninguna página de notas de versión de 27.1, y el índice lista 27 y 27.2. En esta Mac, con Xcode 27.1 (27A9275), la versión final desde el 15 de octubre, los SDK de iPhoneOS y de iPhoneSimulator se identifican como iOS 27.1 build 24A94232, un número más bajo que el 24A94403 de la beta registrado más arriba, y el runtime del simulador de iOS 27.1 es 24A94425, que xcrun simctl list runtimes -j lista con un solo tipo de dispositivo compatible, iPhone Duo; simctl create de un iPhone 16 Pro contra él falla con “Incompatible device” (dispositivo incompatible). iOS 27.2 salió hoy, 26 de octubre (24B119, con una segunda build de iOS 27.2, 24B91020, en el mismo minuto), y las notas de Xcode 27.2 RC (27B48, 19 de octubre) traen cuatro entradas del iPhone Duo: “Fixed: In the iPhone Duo simulator, an app using CameraCaptureAccessory can use both displays at the same time without an active camera capture session.” (corregido: en el simulador del iPhone Duo, una app que usa CameraCaptureAccessory puede usar ambas pantallas a la vez sin una sesión de captura de cámara activa) (190155353); “When switching between the inner and outer display of the iPhone Duo simulator, modifier keys such as Shift and Command might stop working.” (al cambiar entre la pantalla interior y la exterior del simulador del iPhone Duo, las teclas modificadoras como Shift y Command podrían dejar de funcionar) (189465196), con la solución provisional “Click with the mouse on the currently visible screen.” (haz clic con el mouse en la pantalla visible en ese momento); y dos Known Issues heredados de las betas, ahora ambos bajo Device Hub: las capturas de pantalla “black for up to a few minutes after booting the device” (en negro hasta unos minutos después de arrancar el dispositivo) (187146039) y las herramientas de accesibilidad que “cannot convey screen content on an iPhone Duo within Device Hub” (no pueden transmitir el contenido de la pantalla de un iPhone Duo dentro de Device Hub) (187148389). La entrada de Mac Catalyst sobre las “APIs specific to iOS 27.1” (API específicas de iOS 27.1) no cambia. Una entrada de UIKit de las notas de iOS 27.2 nombra 27.1, los márgenes de diseño predeterminados de UIView en cero; una sonda compilada desde un mismo archivo fuente y ejecutada en el runtime 27.1 en un simulador del iPhone Duo reporta 8 puntos cuando su LC_BUILD_VERSION lleva el sello sdk 27.0 (la trampa de la compilación a mano sobre la que advierte la actualización del 2 de octubre, más arriba) y cero cuando lleva el sello sdk 27.1, así que el cambio depende del SDK con el que se enlaza el binario además del sistema operativo; la publicación sobre las notas de versión de iOS 27.2 tiene la tabla.16

¿Qué trae la beta?

El feed de lanzamientos de Apple lista “Xcode 27.1 beta (27A9269)” el viernes 18 de septiembre a las 10:00 a. m. PT y un “TestFlight Update” esa misma tarde; las notas de la versión de App Store Connect de ese día dicen “You can now submit apps built with Xcode 27.1 beta using the SDK for iOS 27.1 beta or iPadOS 27.1 beta for internal and external testing.” (ya puedes subir apps compiladas con Xcode 27.1 beta usando el SDK de iOS 27.1 beta o de iPadOS 27.1 beta para pruebas internas y externas).1 El Overview de las notas de la versión nombra la línea de SDK: “Xcode 27.1 beta includes Swift 6.4 and SDKs for iOS 27.1, iPadOS 27, tvOS 27, watchOS 27, macOS 27, and visionOS 27. Xcode 27.1 beta supports on-device debugging in iOS 17 and later, tvOS 17 and later, watchOS 10 and later, and visionOS. Xcode 27.1 beta requires a Mac running macOS Tahoe 26.6 or later.”2 Conviene leer esa lista tal como está escrita: iOS es la única plataforma en 27.1, el propio SDKSettings.plist del SDK reporta la versión 27.1, y App Store Connect llama al mismo SDK “iPadOS 27.1 beta”, un detalle que ya arrastra el post sobre Xcode 27.

La descarga es más chica de lo que sugiere el número de versión. El xip pesa 2.027.292.809 bytes, viene firmado por Apple con su certificado de Software Update y se expande a una app de 3,6 GiB, el mismo tamaño que Xcode 27.0; un xip --expand a una carpeta, un cambio de nombre a /Applications/Xcode-27.1-beta.app y DEVELOPER_DIR apuntando ahí son toda la instalación para trabajar desde la línea de comandos. La primera llamada a xcodebuild bajo la beta se tomó después unos dos minutos para instalar por su cuenta los paquetes CoreTypes.pkg y XcodeSystemResources.pkg que vienen dentro, el paso que xcodebuild -runFirstLaunch hace de forma explícita, y el segundo de esos paquetes es el que deja instalado el tipo de dispositivo iPhone Duo.4 Lo que la app no contiene es un runtime de simulador. La beta encuentra los runtimes de iOS que ya están en esta Mac, 27.0 entre ellos, y ninguno para 27.1; xcodebuild -downloadPlatform iOS bajo la beta nombra la pieza faltante como “iOS 27.1 Simulator (24A94401)” y la descarga como imagen de disco cryptex a través del servicio de mobile assets de Apple, mientras que las imágenes de disco de la propia página de descargas para desarrolladores no pasan del iOS 18.2 Simulator Runtime.34 El primer intento terminó en DVTDownloadable: Download Failed con Error Domain=DVTDownloadableErrorDomain Code=41 "Download failed."; el segundo, con -buildVersion 24A94401, reportó el runtime en 7,85 GB, terminó, y simctl list runtimes listó entonces “iOS 27.1 (27.1 - 24A94401)”. Reserva el disco de antemano: el runtime pesa cuatro veces lo que la descarga de Xcode.3

La pantalla exterior del simulador de iPhone Duo en el primer arranque, con iOS 27.1 beta: una pantalla de inicio oscura con un icono de Configuración arriba a la izquierda, el reloj y el estado de Wi-Fi apilados en vertical sobre el borde derecho, un icono del Dock a la derecha y un botón de Búsqueda abajo a la derecha

La pantalla exterior del simulador de iPhone Duo en el primer arranque, 1398 por 2034 píxeles: el bloque de estado corre por el borde derecho, el lado donde las Human Interface Guidelines de Apple ponen la Dynamic Island y la barra de estado en el iPhone Duo.10

¿Cómo consigues el simulador del iPhone Duo?

Son tres pasos, y ninguno es un botón de descarga en una página web. Apple distribuye el simulador solo dentro de Xcode, y solo dentro de la beta 27.1: las notas de la beta 27.2 traen un recuadro que dice “Download Xcode 27.1 beta to get the iOS SDK and simulator support for iPhone Duo.” (descarga Xcode 27.1 beta para obtener el SDK de iOS y el soporte del simulador para el iPhone Duo).8 (11 de octubre: Xcode 27.1 RC (27A9275) salió el 5 de octubre, y sus notas listan los mismos problemas conocidos del iPhone Duo Simulator, así que la beta ya no es el único Xcode 27.1 cuyas notas cubren el simulador del Duo; no he instalado la RC.14) (15 de octubre: Xcode 27.1 salió como versión final, build 27A9275, la build de la RC, con los mismos dos problemas conocidos del simulador del Duo en sus notas; no lo he instalado.15)

  1. Xcode 27.1 beta (27A9269), desde las descargas para desarrolladores, con fecha del viernes 18 de septiembre en el feed Releases de Apple. Expande el xip, mueve la app a un nombre con versión como /Applications/Xcode-27.1-beta.app junto a Xcode 27.0 y apunta DEVELOPER_DIR hacia ella para el trabajo en la línea de comandos; la beta requiere macOS Tahoe 26.6 o posterior.12
  2. El runtime de iOS 27.1, que el xip no incluye. Ejecuta xcodebuild -downloadPlatform iOS con DEVELOPER_DIR apuntando a la beta; así descargas el runtime 27.1 que hace arrancable el tipo de dispositivo iPhone Duo, y las notas de Apple advierten que, además de la descarga, el primer arranque del Simulator “can take several minutes” (puede tardar varios minutos). Mi primer intento falló y el reintento funcionó, así que reintenta antes de diagnosticar.23
  3. Device Hub, donde viven el dispositivo y sus poses. Agrega o selecciona el dispositivo iPhone Duo, arráncalo y usa los botones de pose, Closed, Book y Open, más Rotate Right; simctl no tiene comando de poses. Los tamaños y las capturas por pose que siguen salen de ese camino.6

Apple no ofrece una versión para navegador. Una página que aparece al buscar “iPhone Duo simulator online” no ejecuta el runtime de iOS 27.1 de Apple, así que, dibuje lo que dibuje, no es la fuente de las clases de tamaño, las regiones reservadas ni el comportamiento de la pantalla exterior que se midieron aquí; para revisar un diseño sin el runtime, el canvas de Previews de Xcode ganó en esta beta un grupo Display para la pantalla alternativa.2

¿El SDK 27.1 trae las API del Duo?

El 17 de septiembre busqué en el SDK de iOS 27.0 los nombres que aparecen en la guía “Preparing your app for iPhone Duo” de Apple y no encontré ninguno de los diez que son específicos del dispositivo. La misma búsqueda contra el SDK 27.1, hecha igual, una búsqueda de texto plano en las interfaces de módulo y en los headers, los encuentra todos. Las filas son las subcadenas buscadas: siete de ellas cubren nueve de los diez nombres, porque los dos métodos reservedRegions comparten fila y los dos miembros axisBehavior también, y las otras tres son los tipos que hay detrás de los nombres: ReservedRegion, ToolbarVerticalBehavior para toolbarVerticalBehavior(_:) y UIVerticalBarBehavior para preferredVerticalBarBehavior:4

Subcadena buscada Interfaz de SwiftUICore Interfaz de SwiftUI Interfaz de UIKit Headers de UIKit
ArrangementView 45 0 19 4 archivos
UIArrangementViewController 0 0 19 4 archivos
ReservedRegion 16 0 15 3 archivos
reservedRegions 2 0 5 1 archivo
ToolbarVerticalBehavior 0 5 0 0
UIVerticalBarBehavior 0 0 0 1 archivo
verticalBarEdge 0 0 0 1 archivo
toolbarVerticalEdge 1 0 0 0
axisBehavior 0 2 0 1 archivo
preferredVerticalBarBehavior 0 0 0 1 archivo

Dos detalles de esa tabla importan a la hora de escribir el código. Los tipos de SwiftUI viven en SwiftUICore, el módulo que import SwiftUI reexporta, así que un import normal los encuentra; y los atributos de disponibilidad no coinciden con la documentación en cuanto a plataformas. La interfaz de SwiftUICore declara ArrangementView, y la de SwiftUI declara toolbarVerticalBehavior(_:), ambas bajo @available(anyAppleOS 27.1, *), que es la abreviatura de Apple para todas las plataformas en esa versión, mientras que UIArrangementViewController.h y los métodos reservedRegionsOfKind: de UIView.h llevan API_AVAILABLE(ios(27.1), tvos(27.1), visionos(27.1)) junto con API_UNAVAILABLE(watchos); en UIVerticalBarEdge.h, el enum y el trait verticalBarEdge llevan ese mismo par, mientras que los casos Leading y Trailing llevan API_AVAILABLE(ios(27.1)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos, tvos). Las páginas de documentación de Apple para los cinco listan solo iOS 27.1 y iPadOS 27.1, marcadas como beta.47 Escribe contra iOS y deja que el compilador te cuente del resto.

Los tres nombres que usa la guía y que ya estaban en el SDK 27.0 siguen igual: presentationPlacement(_:) continúa bajo @available(anyAppleOS 27.0, *), backgroundExtensionEffect() sigue ahí desde iOS 26, y de los dos casos de ToolbarItemPlacement que nombra la guía, topBarPinnedTrailing está bajo @available(iOS 27.0, visionOS 27.0, *) y cancellationAction no lleva disponibilidad propia más allá de la del tipo.4

¿Qué dice el perfil del simulador sobre las dos pantallas?

El tipo de dispositivo que Apple instala con la beta, iPhone Duo.simdevicetype, es un bundle común y corriente dentro de /Library/Developer/CoreSimulator/Profiles/DeviceTypes, y sus dos property lists responden preguntas que la ficha técnica había dejado abiertas.5

profile.plist da la identidad: identificador de modelo iPhone19,4, clase de producto V68, un alias com.apple.CoreSimulator.SimDeviceType.V68, minRuntimeVersion 27.1 y una regla para crear el dispositivo por defecto en los runtimes de 27.1 en adelante. capabilities.plist da el hardware: número de modelo A3447, HomeButtonType 2, DeviceSupportsDynamicIsland true, DeviceSupportsEnhancedMultitasking false, IsLargeFormatPhone true, un CompatibleDeviceFallback de iPhone18,3, un radio de esquina de dispositivo de 59 y un array displays con dos entradas integradas y tres virtuales.5

Pantalla en el perfil Píxeles Escala Puntos Orientación nativa Radios de esquina Espacio de color
primary (“LCD”, pantalla 1) 1398 por 2034 3 466 por 678 0 8, 59, 8, 59 P3
primary-1 (“LCD-1”, pantalla 3) 2007 por 2853 3 669 por 951 270 55 en las cuatro sRGB

La primera fila es la pantalla exterior y coincide píxel por píxel con la ficha técnica de Apple. La segunda es la interior, y su recuento de píxeles es el tamaño de captura de App Store Connect, 2007 por 2853, y no los 1878 por 2670 del panel: el simulador renderiza la pantalla interior a 669 por 951 puntos a 3x, que es la aritmética que hizo mi post sobre el Duo para desarrolladores el 10 de septiembre y que ahí etiqueté como una inferencia. Ahora el propio perfil de Apple trae el número. La orientación nativa de 270 grados dice que la pantalla interior es horizontal por naturaleza, 951 puntos de ancho por 669 de alto con el teléfono abierto, lo que coincide con las dimensiones que Apple da para el dispositivo abierto. Los dos números restantes son valores del simulador y no del hardware: las dos pantallas figuran a 460 píxeles por pulgada y 60 Hz, cuando la ficha técnica le da 430 ppi al panel interior, así que conviene tomar hdpi como un marcador de posición.5

El perfil también trae las formas. Cada pantalla referencia una máscara de framebuffer, un PDF del área visible. La máscara de la pantalla exterior tiene esquinas asimétricas, los valores 8 del perfil en un borde largo y 59 en el otro, en mi lectura el radio chico queda del lado que se encuentra con la bisagra central que describe la guía de diseño de Apple; la máscara de la pantalla interior es un rectángulo redondeado liso, con el valor de esquina 55 del perfil y sin recorte para la cámara frontal, así que la oclusión de la cámara viene de la API de regiones reservadas en tiempo de ejecución y no de la forma del framebuffer.510

¿Qué muestra el simulador?

El dispositivo arranca cerrado. En el primer arranque la pantalla exterior muestra la pantalla de inicio y el framebuffer de la interior está encendido pero en negro, y simctl io enumerate lista las dos pantallas integradas con los nombres del perfil, primary a 1398 por 2034 y primary-1 a 2007 por 2853, junto a las virtuales de siempre.6 Las poses viven en Device Hub. Con el dispositivo Duo seleccionado, su ventana expone Rotate Right, Closed, Book y Open como botones que la API de accesibilidad puede pulsar, que es como se manejó todo lo de esta sección; simctl no tiene comando de poses.6

La sonda es una app de SwiftUI de un solo archivo: una vista de pestañas que contiene una pila de navegación con cinco elementos en la barra de herramientas, una lectura de la geometría, las clases de tamaño, el valor de entorno toolbarVerticalEdge, la bisagra y las regiones reservadas de ambos tipos con includeInactive, y un ArrangementView con el estilo dividido. Lee las regiones en cada evaluación de su body y se reevalúa una vez por segundo. Los números de abajo son de la nueva ejecución del 2 de octubre, enlazada con el SDK 27.1; las ejecuciones de septiembre, enlazadas como 27.0 por error, vienen después bajo su propio encabezado.13

Enlazada con el SDK 27.1

Cerrado. La app recibe toda la pantalla exterior: su ventana mide 466 por 678 puntos, ancho compacto y alto regular. La barra de herramientas y la barra de pestañas se ubican en el borde final, bajo el reloj, toolbarVerticalEdge dice trailing y el trait verticalBarEdge de UIKit da el valor crudo 2. El contenido dentro de la pila de navegación mide 382 por 562 puntos, con márgenes de área segura de 82 arriba, 34 abajo y 84 en el lado final, que es la franja. Se reportan dos regiones de oclusión, ambas activas: una de 37 puntos por lado donde está la cámara exterior y otra de 84 por 170 que cubre la cámara y la columna de estado por encima de las barras. En esta pantalla no se reporta ninguna división. Puesta de costado mide 678 por 466, compacta en ambas clases de tamaño, con las barras todavía en el borde final.13

La sonda en la pantalla exterior del simulador de iPhone Duo, enlazada con el SDK 27.1: tamaño de contenido 382 por 562 puntos, clases de tamaño compacta y regular, toolbarVerticalEdge trailing, bisagra cerrada, dos oclusiones activas, una disposición dividida apilada y, sobre el borde derecho, una columna con el reloj y el estado de Wi-Fi, cuatro botones de la barra de herramientas y tres botones de pestaña

Cerrado, SDK 27.1: toda la pantalla de 466 por 678 puntos, con las barras a lo largo del borde final.

Abierto. La app pasa a la pantalla interior en su orientación nativa horizontal: una ventana de 951 por 669 puntos, regular en ambas clases de tamaño, con las barras todavía verticales en el borde final. El contenido mide 867 por 553 con los mismos tres márgenes. Vuelven tres regiones. Una división de 40 puntos de ancho recorre toda la altura por el medio de la pantalla, de x 455 a 495, con márgenes de 20 puntos a cada lado, y está inactiva: el teléfono está plano. Una oclusión inactiva de 58 por 37 marca la cámara interior, que según las directrices de Apple “stays hidden until the camera is active.” (permanece oculta hasta que la cámara está activa).10 Una oclusión activa de 84 por 120 cubre la columna de estado. La disposición dividida pone sus dos paneles lado a lado y reparte el ancho a partes iguales.13

La sonda en la pantalla interior en la pose Open, enlazada con el SDK 27.1: tamaño de contenido 867 por 553 puntos, clases de tamaño regular y regular, toolbarVerticalEdge trailing, bisagra totalmente abierta a 180 grados, una división inactiva de cuarenta puntos de ancho en x 455, una oclusión inactiva y una activa, una disposición dividida lado a lado y las barras en una columna sobre el borde derecho

Abierto, SDK 27.1: 951 por 669 puntos, con el pliegue reportado como una división inactiva por el medio.

Book. La pose Book de Device Hub reporta la bisagra parcialmente abierta a 127 grados. La ventana no cambia de tamaño. Lo que cambia es la división: el mismo marco, ahora activa. La disposición dividida responde llevando su divisor al pliegue y dejando vacía la banda de 40 puntos, de modo que el panel primario termina en x 455 y el secundario empieza en 495. Una hoja presentada en esta pose se desplaza del centro hacia la mitad inicial.13

La sonda en la pantalla interior en la pose Book, enlazada con el SDK 27.1: bisagra parcialmente abierta a 127 grados, una división activa y los dos paneles de la disposición dividida separados por una banda vacía en el medio de la pantalla

Book, SDK 27.1: la división está activa y la disposición dividida deja vacío el pliegue.

Girado. Rotate Right con el teléfono abierto da una ventana de 669 por 951 puntos, todavía regular en ambas clases de tamaño, y las barras vuelven a ser horizontales: toolbarVerticalEdge es nil, la barra de herramientas queda arriba junto al reloj y la barra de pestañas flota abajo. Eso coincide con la guía de diseño de Apple, que mantiene “standard horizontal bars” (las barras horizontales estándar) en la pantalla interior en vertical.10 Las mismas tres regiones se reportan en el espacio de coordenadas girado: la división es ahora una banda horizontal de 40 puntos de alto que cruza el medio, inactiva en plano y activa en Book. La vista de disposición de la sonda, que dentro de esa pantalla es más ancha que alta, se mantiene lado a lado.13

La sonda en la pantalla interior girada a vertical, enlazada con el SDK 27.1: tamaño de contenido 669 por 734 puntos, clases de tamaño regular y regular, toolbarVerticalEdge nil, una barra de herramientas horizontal arriba junto al reloj, una barra de pestañas flotante abajo, una división inactiva y dos oclusiones

Abierto y girado, SDK 27.1: barras horizontales, y el pliegue convertido en una banda horizontal.

Dos cosas se mantienen en todas las poses. Las regiones llegan tarde: en cada arranque, las primeras seis a nueve evaluaciones del body de la sonda no leyeron ninguna y todas las posteriores las leyeron todas, así que una vista que pregunta una sola vez, en su primera pasada de layout, recibe una respuesta vacía. El fixture DuoProbe de Sven-Eric Molzahn documentó exactamente eso el 20 de septiembre (“reservedRegions is empty on the first geometry evaluation and populated on a later one”, es decir, reservedRegions está vacío en la primera evaluación de geometría y se llena en una posterior) junto con la banda de 40 puntos, y la guía del simulador de SwiftLee del 22 de septiembre agrega que “Holding Option ⌥ reveals a slider that you can use to control the hinge angle of the device with precision” (al mantener pulsada Option ⌥ aparece un control deslizante con el que puedes controlar con precisión el ángulo de la bisagra del dispositivo), algo que no he usado.12 Y UIScreen.main.bounds responde 466 por 678 puntos, la pantalla exterior, mientras la app está en la interior, que es justo la trampa contra la que advierte la guía de Apple cuando dice que hay que hacer los cálculos de layout “based on your scene or containing view’s bounds rather than screen dimensions” (a partir de los bounds de tu escena o de la vista contenedora, no de las dimensiones de la pantalla): la pantalla principal no es la pantalla en la que estás. La pantalla propia de la escena de la ventana sí reporta la pantalla en la que está de verdad la app.713

Hay un camino a las otras poses que no funciona. simctl io screenConfig puede apagar una pantalla, y apagar la exterior dejando encendida la interior no abrió el teléfono; tumbó el system shell del simulador, simctl launch falló después con “The system shell probably crashed,” (probablemente se cayó el system shell) y hubo que reiniciar. Las poses viven en la ventana de Device Hub.6

Enlazada con el SDK 27.0

Estos son los números que llevó esta sección hasta el 2 de octubre, medidos el 19 y el 20 de septiembre con una sonda que tenía una pila de navegación y ninguna vista de pestañas, y medidos de nuevo el 2 de octubre con la actual. Describen lo que recibe en este simulador una app compilada con Xcode 27.0.613

Cerrado, la ventana mide 386 puntos de ancho en una pantalla de 466: el sistema se queda la franja de 80 puntos, dibuja ahí el reloj y el estado sobre negro, y la barra de herramientas de la app queda tendida arriba. Abierto, la ventana mide 871 por 669, faltan los mismos 80 puntos a la derecha y los márgenes de área segura son de 34 a cada lado. Abierto y girado, los 80 puntos se descuentan arriba. En todas las poses las clases de tamaño coinciden con las de la build de 27.1, toolbarVerticalEdge es nil, verticalBarEdge da el valor crudo 0 y las dos consultas de regiones reservadas devuelven arreglos vacíos, incluso incluyendo las regiones inactivas y por mucho que la sonda siga preguntando; Book no se distingue de Abierto.

La sonda de septiembre en la pantalla exterior del simulador de iPhone Duo, enlazada como SDK 27.0: una barra de herramientas arriba a la derecha con un icono de compartir, unos puntos suspensivos de más opciones y una marca de verificación, los valores tamaño 386 por 510 puntos, clases de tamaño compacta y regular, toolbarVerticalEdge nil, divisions 0 y occlusions 0, una disposición dividida con la vista primaria encima de la secundaria, y el reloj y el estado de Wi-Fi apilados sobre una franja negra en el borde derecho

Cerrado, enlazada como 27.0: la app se detiene en la franja y su barra de herramientas sigue horizontal.

La sonda de septiembre en la pantalla interior en la pose Open, enlazada como SDK 27.0: tamaño 803 por 515 puntos, clases de tamaño regular y regular, toolbarVerticalEdge nil, divisions 0 y occlusions 0, una disposición dividida con la vista primaria y la secundaria lado a lado, la barra de herramientas arriba a la derecha, y el reloj y el estado de Wi-Fi en una franja negra sobre el borde derecho

Abierto, enlazada como 27.0: regular en ambas dimensiones, con la franja reservada por el sistema.

La sonda de septiembre en la pantalla interior girada a vertical, enlazada como SDK 27.0: tamaño 669 por 703 puntos, clases de tamaño regular y regular, la disposición dividida lado a lado, y el reloj y el estado de Wi-Fi en una banda negra que cruza la parte superior

Girado, enlazada como 27.0: la banda de arriba es del sistema.

Lo que la beta todavía no puede hacer

Apple lista tres límites bajo Simulator, Known Issues (problemas conocidos), en las notas de la propia beta: “Initial Simulator launch can take several minutes.” (187708500), “StandBy is unavailable in the iPhone Duo Simulator runtime.” (187708663) y “Running and debugging most app extensions is unavailable in the iPhone Duo Simulator runtime.” (187708767).2 El de StandBy importa para quien tenga widgets o Live Activities pensados para ese modo: el anuncio de Apple dice que el teléfono “enters StandBy on either the outer or inner display” (entra en StandBy en la pantalla exterior o en la interior) y lo llama un “hub for widgets” (un centro de widgets), el post sobre el Duo para desarrolladores cubre qué aparece ahí, y hasta que una beta posterior levante el límite, StandBy en este dispositivo es algo que hay que comprobar en hardware (15 de octubre: las notas de la versión final lo siguen listando15).11

Otros dos están bajo Mac Catalyst, Known Issues, y muerden a cualquier app que adopte estas API y además compile para la Mac: “Projects that use APIs specific to iOS 27.1 show compile errors when building for Mac Catalyst (“undeclared identifier”, “not found”, “has no member”, “cannot find”, etc). (185924957)” (los proyectos que usan API específicas de iOS 27.1 muestran errores de compilación al compilar para Mac Catalyst), con el workaround de Apple de #if !targetEnvironment(macCatalyst) en Swift o #if !TARGET_OS_MACCATALYST en Objective-C, y “Projects that target iOS 27.1 show no Mac Catalyst run destination available. (187046347)” (los proyectos que apuntan a iOS 27.1 no muestran ningún destino de ejecución de Mac Catalyst), con “Add a Mac Catalyst 27.0 minimum deployment in target settings.” como solución.2 Las notas de la beta de Xcode 27.2 agregan un tercero desde el otro lado: “macOS, watchOS, tvOS, and visionOS SDKs in Xcode 27.2 incorrectly report 27.1 as a valid deployment target,” y “Mac Catalyst builds with a 27.1 or 27.2 deployment target may be unable to use newly introduced API.” (187160501), es decir que esos SDK reportan mal 27.1 como deployment target válido y que las compilaciones de Mac Catalyst con deployment target 27.1 o 27.2 pueden quedarse sin poder usar la API recién introducida.8

Lo que yo haría esta semana

  1. Instala la beta al lado de Xcode 27.0 y no encima: expande el xip, renombra la app y apunta DEVELOPER_DIR ahí para las compilaciones desde la línea de comandos; nada en las notas de la beta toca el toolchain de 27.0, y el compilador y el enlazador llevan cadenas de versión idénticas.4
  2. Arranca la descarga del runtime antes de necesitarla, con xcodebuild -downloadPlatform iOS bajo la beta, y reintenta si falla; el runtime es lo que hace arrancable el tipo de dispositivo iPhone Duo, y Apple avisa que encima el primer arranque tarda minutos.23
  3. Compila una vez contra el SDK 27.1 con tu target de Mac Catalyst incluido, y lee los dos diagnósticos que nombra Apple antes de decidir si cercar la API nueva con #if !targetEnvironment(macCatalyst) o subir el mínimo de Catalyst a 27.0.2
  4. Usa los números del perfil como los tamaños contra los que previsualizar y probar: 466 por 678 puntos cerrado, 669 por 951 abierto, con la pantalla interior horizontal por naturaleza. La nota de Previews de la beta agrega un grupo Display al selector de overrides del canvas “for previewing content on a device’s alternative display.” (182598534), es decir para previsualizar contenido en la pantalla alternativa de un dispositivo.25
  5. Lee las regiones reservadas en un lugar donde se vuelvan a leer: en el body de la vista a través del geometry proxy, o en cada cambio de geometría, nunca una sola vez en el primer layout. reservedRegions(kind:options:layoutDirectionBehavior:) con .includeInactive no devolvió nada en las primeras seis a nueve evaluaciones de la sonda y, en cada una de las posteriores, devolvió todas las regiones que tiene la pantalla (cerrada, la cámara y la columna de estado; abierta, el pliegue, la cámara interior y la columna de estado), así que un valor guardado en caché desde la primera pasada es un arreglo vacío durante toda la vida de la vista. Y antes de fiarte de nada de esto, confirma que la build lleva el sello del SDK 27.1: otool -l <app>/<binary> | grep -A4 LC_BUILD_VERSION.713

Preguntas frecuentes

¿El simulador de iPhone Duo viene en Xcode 27.1 beta?

Sí. La beta instala un tipo de dispositivo iPhone Duo, com.apple.CoreSimulator.SimDeviceType.iPhone-Duo, cuyo perfil exige un runtime de iOS 27.1 que Xcode descarga aparte con xcodebuild -downloadPlatform iOS. Las notas de Apple advierten que el primer arranque “can take several minutes” (puede tardar varios minutos) y que ni StandBy ni la mayoría de las extensiones de app están disponibles en ese runtime.235

¿Cómo consigo el simulador del iPhone Duo?

Instala Xcode 27.1 beta, descarga el runtime de iOS 27.1 con xcodebuild -downloadPlatform iOS bajo la beta y elige el dispositivo iPhone Duo en Device Hub, donde las poses son botones. La beta 27.2 no lo incluye; las notas de la 27.2 de Apple remiten a la beta 27.1 para “the iOS SDK and simulator support for iPhone Duo.” (el SDK de iOS y el soporte del simulador para el iPhone Duo).238 (11 de octubre: Xcode 27.1 RC (27A9275) salió el 5 de octubre, y sus notas listan los mismos problemas conocidos del iPhone Duo Simulator, así que la beta ya no es el único Xcode 27.1 cuyas notas cubren el simulador del Duo; no he instalado la RC.14) (15 de octubre: Xcode 27.1 salió como versión final, build 27A9275, la build de la RC, con los mismos dos problemas conocidos del simulador del Duo en sus notas; no lo he instalado.15)

¿Hay un simulador del iPhone Duo en línea?

No de Apple. El simulador venía solo dentro de Xcode 27.1 beta antes de la RC y corre sobre el runtime de iOS 27.1 de Apple; una página de navegador con ese nombre está dibujando otra cosa. Para una revisión rápida del diseño, el canvas de Previews de la beta ofrece un grupo Display para la pantalla alternativa.2 (11 de octubre: Xcode 27.1 RC (27A9275) salió el 5 de octubre, y sus notas listan los mismos problemas conocidos del iPhone Duo Simulator, así que la beta ya no es el único Xcode 27.1 cuyas notas cubren el simulador del Duo; no he instalado la RC.14) (15 de octubre: Xcode 27.1 salió como versión final, build 27A9275, la build de la RC, con los mismos dos problemas conocidos del simulador del Duo en sus notas; no lo he instalado.15)

¿Cómo instalo Xcode 27.1 beta junto a Xcode 27?

Expande el xip con xip --expand, mueve la app resultante a un nombre con versión como /Applications/Xcode-27.1-beta.app, y apunta DEVELOPER_DIR a su carpeta Contents/Developer para xcodebuild, xcrun y swiftc. La beta exige macOS Tahoe 26.6 o posterior, el mismo piso que Xcode 27.0.24

¿De qué tamaño es la pantalla interior del iPhone Duo en puntos?

669 por 951 puntos, según el perfil de dispositivo del simulador, que define la pantalla interior como 2007 por 2853 píxeles a escala 3 con orientación nativa horizontal; la exterior son 466 por 678 puntos a partir de 1398 por 2034 píxeles a escala 3.5

¿Xcode 27.1 beta cambia el SDK de iOS 27.0 o el toolchain de Xcode 27?

No. El compilador de Swift y el enlazador reportan las mismas cadenas de versión que Xcode 27.0, y las notas de la versión de la beta tienen tres secciones, Mac Catalyst, Previews y Simulator, y ninguna toca el toolchain. El SDK de iOS 27.1 es un agregado, identificado como build 24A94403 tanto en el SDK de dispositivo como en el de simulador.24

¿Cuándo sale el iPhone Duo, y con qué?

El 23 de octubre, con iOS 27.1, según el post de noticias de Apple del 16 de septiembre: “When iPhone Duo becomes available on October 23, it will run iOS 27.1.” (cuando el iPhone Duo esté disponible el 23 de octubre, correrá iOS 27.1).9 (26 de octubre: así fue, e iOS 27.1 no salió en ningún otro dispositivo; la página de seguridad de Apple lo lista solo para el iPhone Duo, y el runtime del simulador de 27.1 en esta Mac acepta únicamente el tipo de dispositivo iPhone Duo.16)

Relacionado en este sitio: el post sobre el Duo para desarrolladores trae los números de la ficha técnica y la lista de API que este post contrasta con el SDK; el post sobre el diseño para el iPhone Duo lee la guía de diseño de Apple; la lista de verificación del iPhone redimensionable es el trabajo de maquetación al que alimentan los números del perfil; el hub de Xcode 27 lleva las secciones fechadas de cada beta; el post sobre los fallos de compilación de Xcode 27 cubre la cadena de herramientas que esta beta deja intacta; y la entrada sobre las notas de versión de iOS 27 sigue las compilaciones 27.x.

Fuentes


  1. Apple, Releases, feed RSS consultado el 19 de septiembre de 2026: “Xcode 27.1 beta (27A9269)” con fecha Fri, 18 Sep 2026 10:00:00 PDT y “TestFlight Update” con fecha Fri, 18 Sep 2026 14:00:00 PDT. Apple, App Store Connect release notes, 18 de septiembre de 2026, actualización de TestFlight, citada íntegra. ↩↩↩↩

  2. Apple, Xcode 27.1 Beta Release Notes, obtenidas a través del endpoint JSON de la documentación el 19 de septiembre de 2026: Overview, citado; Mac Catalyst, Known Issues 185924957 y 187046347 con sus workarounds, citados; Previews, New Features 182598534, citado; Simulator, Known Issues 187708500, 187708663 y 187708767, citados. Las notas no contienen ninguna otra sección. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  3. Descarga del runtime hecha por el autor en macOS 26.6.2 (25G83), el 19 de septiembre de 2026, con DEVELOPER_DIR apuntando a Xcode 27.1 beta: xcodebuild -downloadPlatform iOS imprimió “iOS is already downloaded.” para el runtime 27.0 ya instalado y luego “Downloading iOS 27.1 Simulator (24A94401) (arm64)”, seguido de DVTDownloadable: Download Failed. Downloadable: DVTDownloadable(identifier: 0a4e7582-0061-5907-bea9-fe234c1f9392, version: 27.1.0.1, category: simulator, contentType: cryptexDiskImage, downloadMethod: mobileAsset, platform: com.apple.platform.iphoneos) y Error Domain=DVTDownloadableErrorDomain Code=41 "Download failed."; el reintento, xcodebuild -downloadPlatform iOS -buildVersion 24A94401, imprimió “Downloading iOS 27.1 Simulator (24A94401) (arm64): 0.0% (66 kB of 7.85 GB)” y terminó, tras lo cual xcrun simctl list runtimes listó “iOS 27.1 (27.1 - 24A94401) - com.apple.CoreSimulator.SimRuntime.iOS-27-1”. La página de descargas para desarrolladores de Apple, buscando “Simulator Runtime” con la sesión iniciada ese mismo día, lista imágenes de disco no más nuevas que el iOS 18.2 Simulator Runtime. ↩↩↩↩↩↩↩

  4. Inspección del autor de /Applications/Xcode-27.1-beta.app, 19 de septiembre de 2026: xcodebuild -version imprime Xcode 27.1 y Build version 27A9269; xcrun --sdk iphoneos --show-sdk-version y xcrun --sdk iphonesimulator --show-sdk-version imprimen ambos 27.1; SystemVersion.plist en los dos SDK lleva ProductBuildVersion 24A94403 y ProductVersion 27.1; xcrun swift --version imprime Apple Swift version 6.4 (swiftlang-6.4.0.34.1 clang-2100.3.34.1) y xcrun ld -v imprime ld-27037.1, las mismas cadenas de versión que imprime Xcode 27.0 (27A266a) en esta misma Mac. Xcode_27.1_beta.xip pesa 2.027.292.809 bytes; pkgutil --check-signature reporta “signed Apple Software” con una cadena de certificados de Software Update; du -sk sobre la app expandida reporta 3.813.336 KB, frente a 3.804.188 KB de Xcode 27.0 (27A266a) expandido en /Applications/Xcode-27.app. Los conteos de nombres son grep -c de la subcadena en SwiftUICore.swiftmodule/arm64e-apple-ios.swiftinterface, SwiftUI.swiftmodule/arm64e-apple-ios.swiftinterface y UIKit.swiftmodule/arm64e-apple-ios.swiftinterface dentro del SDK de iPhoneOS, y conteos de archivos con grep -rl sobre UIKit.framework/Headers; atributos de disponibilidad leídos de esos archivos: @available(anyAppleOS 27.1, *) encima de public struct ArrangementView< en la interfaz de SwiftUICore y encima de la extension SwiftUICore.View que declara func toolbarVerticalBehavior en la interfaz de SwiftUI, API_AVAILABLE(ios(27.1), tvos(27.1), visionos(27.1)) seguido de API_UNAVAILABLE(watchos) en UIArrangementViewController.h, en las dos declaraciones de reservedRegionsOfKind: de UIView.h, y en el enum UIVerticalBarEdge y el trait verticalBarEdge, más API_AVAILABLE(ios(27.1)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos, tvos) en sus casos UIVerticalBarEdgeLeading y UIVerticalBarEdgeTrailing; @available(anyAppleOS 27.0, *) encima de func presentationPlacement; @available(iOS 27.0, visionOS 27.0, *) encima de public static let topBarPinnedTrailing y ningún atributo encima de public static let cancellationAction. Primer arranque: el primer xcodebuild -version bajo el DEVELOPER_DIR de la beta pasó de un timeout de dos minutos, y /var/log/install.log registra a xcodebuild encolando una instalación de PackageKit a las 16:01:54 del 19 de septiembre que extrajo CoreTypes.pkg y XcodeSystemResources.pkg de Xcode-27.1-beta.app/Contents/Resources/Packages y terminó a las 16:03:04; xcodebuild -checkFirstLaunchStatus devolvió 0 después. ↩↩↩↩↩↩↩↩↩↩↩

  5. /Library/Developer/CoreSimulator/Profiles/DeviceTypes/iPhone Duo.simdevicetype, instalado por Xcode 27.1 beta y leído con plutil -convert xml1 el 19 de septiembre de 2026. profile.plist: modelIdentifier iPhone19,4, productClass V68, aliases com.apple.CoreSimulator.SimDeviceType.V68, minRuntimeVersion 27.1, createByDefaultForRuntimeVersions versionMin 27.1. capabilities.plist: ModelNumber A3447, ThinningProductType iPhone19,4, CompatibleDeviceFallback iPhone18,3, DeviceCornerRadius 59, HomeButtonType 2, DeviceSupportsDynamicIsland true, DeviceSupportsEnhancedMultitasking false, IsLargeFormatPhone true; ScreenDimensionsCapability main-screen-width 1398, main-screen-height 2034, main-screen-pitch 460, main-screen-scale 3; displays: primary (displayName LCD, screenID 1, width 1398, height 2034, scale 3, hdpi y vdpi 460, refreshRate 60, nativeOrientation 0, cornerRadiusUL 8, UR 59, LL 8, LR 59, colorspace P3) y primary-1 (displayName LCD-1, screenID 3, width 2007, height 2853, scale 3, hdpi y vdpi 460, refreshRate 60, nativeOrientation 270, los cuatro radios de esquina 55, colorspace sRGB), más external-0 (TVOut), wireless0 (carPlay) y resizable (scene). Los dos PDF de framebufferMaskIdentifier se renderizaron con qlmanage y se inspeccionaron; las cifras de la ficha técnica de Apple para los paneles están en el post sobre el Duo para desarrolladores. xcrun simctl list devicetypes bajo la beta lista “iPhone Duo (com.apple.CoreSimulator.SimDeviceType.iPhone-Duo)”. ↩↩↩↩↩↩↩↩↩

  6. Ejecuciones del autor en macOS 26.6.2 (25G83), 19 y 20 de septiembre de 2026. Dispositivo: simctl create "Duo-27.1" com.apple.CoreSimulator.SimDeviceType.iPhone-Duo com.apple.CoreSimulator.SimRuntime.iOS-27-1, arrancado con simctl boot y simctl bootstatus -b (cosa de un minuto en esta Mac); simctl io <udid> enumerate lista dos puertos com.apple.framebuffer.display de clase de pantalla 0 a 1398 por 2034 y 2007 por 2853 y, bajo Connected Screens, “LCD-1” con nombre de dispositivo primary-1, screen ID 3, tamaño en píxeles {2007, 2853}. Sonda: DuoProbe, una app de SwiftUI de un solo archivo compilada con xcrun swiftc -sdk <iPhoneSimulator.sdk> -target arm64-apple-ios27.1-simulator -parse-as-library bajo Xcode 27.1 beta, instalada con simctl install, lanzada con simctl launch --console-pty, capturas con simctl io <udid> screenshot --mask=alpha --display=primary y --display=primary-1. Líneas de consola de la pose cerrada: DUOPROBE screen=(466.0, 678.0) scale=3.0 idiom=0 model=iPhone name=Duo-27.1; DUOPROBE size=386x510 h=compact v=regular verticalEdge=nil safe=EdgeInsets(top: 134.0, leading: 0.0, bottom: 34.0, trailing: 0.0); DUOPROBE uikit bounds=(354.0, 44.0) divisions=0 occlusions=0 verticalBarEdge=UIVerticalBarEdge(rawValue: 0); ninguna línea division[ ni occlusion[. La captura con --display=primary-1 sale negra. Encendido de pantallas: simctl io <udid> screenConfig --display=primary power off imprimió “Screen 1 power state set to off”; el siguiente simctl launch falló con FBSOpenApplicationServiceErrorDomain código 5, “The system shell probably crashed.”; simctl shutdown y boot recuperaron el dispositivo. Las corridas de poses del 20 de septiembre fueron dos series, ambas pulsando Rotate Right, Closed, Book y Open a través de la API de accesibilidad con la acción AXPress sobre los botones que Device Hub expone para el dispositivo seleccionado, y ambas manejadas por la herramienta de línea de comandos simctl de la beta 27.2, el DEVELOPER_DIR que fijan esos scripts, contra el runtime, el tipo de dispositivo y el Device Hub de la beta 27.1. En la primera serie la sonda de la pose anterior seguía corriendo cuando se pulsaba el siguiente botón, y después se terminaba y se relanzaba, con la consola capturada durante doce segundos y capturas de las dos pantallas; de ahí vienen las lecturas rotadas de abajo y las líneas de transición. En la segunda serie la sonda se terminaba después de cada captura, así que no había ninguna app en primer plano cuando se pulsaba el siguiente botón; de ahí vienen las capturas previas al relanzamiento. Open: DUOPROBE size=803x515 h=regular v=regular verticalEdge=nil safe=EdgeInsets(top: 134.0, leading: 34.0, bottom: 20.0, trailing: 34.0), DUOPROBE uikit bounds=(771.0, 44.0) divisions=0 occlusions=0 verticalBarEdge=UIVerticalBarEdge(rawValue: 0) y DUOPROBE screen=(466.0, 678.0); la captura con --display=primary-1 muestra la sonda y la de --display=primary sale negra. Book: las mismas tres líneas tras el relanzamiento; la captura de la pantalla interior tomada después de pulsar y antes del relanzamiento, sin ninguna app corriendo, muestra la pantalla de inicio. Closed: las líneas de la pose cerrada de arriba. Tras Rotate Right, Open: DUOPROBE size=669x703 h=regular v=regular verticalEdge=nil safe=EdgeInsets(top: 134.0, leading: 0.0, bottom: 34.0, trailing: 0.0) y uikit bounds=(637.0, 44.0), con la captura de la pantalla interior en vertical. Ninguna corrida imprimió una línea division[ ni occlusion[. Un estado cerrado y rotado apareció solo como líneas de transición mientras cambiaba una pose, DUOPROBE size=610x232 h=compact v=compact ... screen=(678.0, 466.0), y no se cuenta arriba. Esta build salió sellada con sdk 27.0; consulta la actualización del 2 de octubre y la nota 13. ↩↩↩↩↩↩↩

  7. Apple, JSON de documentación obtenido el 19 de septiembre de 2026 para ArrangementView, UIArrangementViewController, reservedRegions(kind:options:layoutDirectionBehavior:), reservedRegions(kind:options:) y toolbarVerticalBehavior(_:): la disponibilidad por plataforma de cada página dice iOS 27.1 y iPadOS 27.1, marcadas como beta. Apple, Preparing your app for iPhone Duo, obtenida el mismo día, para los nombres que usa la guía. ↩↩↩↩

  8. Apple, Xcode 27.2 Beta Release Notes, obtenidas el 19 de septiembre de 2026, SDK, Known Issues, 187160501, citado; obtenidas de nuevo el 26 de septiembre de 2026 por el recuadro de Overview, “Download Xcode 27.1 beta to get the iOS SDK and simulator support for iPhone Duo.”, citado. ↩↩↩

  9. Apple, “Get ready with the latest beta releases”, noticias, 16 de septiembre de 2026, “Note about iOS 27.1 and iPhone Duo”, citada. ↩

  10. Apple, Designing for iPhone Duo, Human Interface Guidelines, obtenidas a través del endpoint JSON de la documentación el 20 de septiembre de 2026: “Controls on the side include both system and app elements: the Dynamic Island, the status bar, the toolbar (including navigation buttons), and the tab bar.” (los controles del lateral incluyen elementos del sistema y de la app: la Dynamic Island, la barra de estado, la barra de herramientas con los botones de navegación y la barra de pestañas) y “A hinge in the center lets people open and close the device” (una bisagra en el centro permite abrir y cerrar el dispositivo); obtenidas de nuevo el 2 de octubre de 2026, Vertical controls: “The exception is the inner display in portrait, which has enough vertical space to keep standard horizontal bars.” (la excepción es la pantalla interior en vertical, que tiene espacio vertical suficiente para mantener las barras horizontales estándar); Anatomy: “The inner camera is behind the display and stays hidden until the camera is active.” (la cámara interior está detrás de la pantalla y permanece oculta hasta que la cámara está activa). ↩↩↩↩

  11. Apple Newsroom, Apple unveils iPhone Duo, 9 de septiembre de 2026, consultada el 20 de septiembre de 2026: “Set iPhone Duo down and it enters StandBy on either the outer or inner display” y “hub for widgets”, citadas del párrafo sobre StandBy. ↩

  12. Sven-Eric Molzahn, iphone-duo-probe, README de GitHub consultado el 24 de septiembre de 2026 (último commit del 20 de septiembre de 2026): “Two caveats before reaching for it: reservedRegions is empty on the first geometry evaluation and populated on a later one” y “Half-folded, inner display, content 867 × 575, hinge band at x 455.5…495.5”, citados. Antoine van der Lee, iPhone Duo Simulator: Testing and optimizing your SwiftUI app, SwiftLee, 22 de septiembre de 2026, citada. ↩↩↩

  13. Nueva ejecución del autor el 2 de octubre de 2026: macOS 27.0 (26A428), Xcode 27.1 beta (27A9269), el runtime de iOS 27.1 (24A94401) y el mismo simulador Duo-27.1. Sonda: DuoProbe2, un solo archivo de Swift, un TabView cuya primera pestaña contiene un NavigationStack con cinco elementos en la barra de herramientas, las lecturas descritas en el texto y una vista de UIKit que registra su ventana, la pantalla de la escena de su ventana, UIScreen.main y el trait verticalBarEdge. Compilada dos veces a partir de ese archivo contra el SDK del simulador 27.1, indicándole al enlazador qué versión de SDK registrar (-Xlinker -platform_version -Xlinker ios-simulator -Xlinker 27.1 -Xlinker 27.0 y ... 27.1); otool -l imprimió sdk 27.0 y sdk 27.1. Una tercera build hecha como en septiembre, swiftc -sdk <iPhoneSimulator27.1.sdk> sin SDKROOT definido, imprimió clang: warning: using sysroot for 'macOS 27.0' but targeting 'arm64-apple-ios27.1.0-simulator' y salió sellada con sdk 27.0; con SDKROOT exportado al SDK del simulador, el mismo comando sella sdk 27.1. La app real que dejó ver la diferencia es Kiradex (941 Apps), compilada por Xcode 27.1 beta: minos 27.0, sdk 27.1. Líneas de consola, sello 27.1, cerrado: size=382x562 ... h=compact v=regular verticalEdge=trailing safe=EdgeInsets(top: 82.0, leading: 0.0, bottom: 34.0, trailing: 84.0) divisions=0 occlusions=2, occlusion[0] active=true frame=(399,-52 37x37), occlusion[1] active=true frame=(382,-82 84x170), window=(466.0, 678.0), verticalBarEdge=2; cerrado y girado: size=594x350 ... h=compact v=compact verticalEdge=trailing, window=(678.0, 466.0); abierto: size=867x553 ... h=regular v=regular verticalEdge=trailing ... divisions=1 occlusions=2, division[0] active=false frame=(455,-82 40x669) margins=EdgeInsets(top: 0.0, leading: 20.0, bottom: 0.0, trailing: 20.0), occlusion[0] active=false frame=(677,-61 58x37), occlusion[1] active=true frame=(867,-82 84x120), window=(951.0, 669.0), hinge=fullyOpen 180 deg; Book: lo mismo con division[0] active=true y hinge=partiallyOpen 127 deg, y mainScreen=(466.0, 678.0) junto a sceneScreen=(951.0, 669.0); abierto y girado: size=669x734 ... verticalEdge=nil safe=EdgeInsets(top: 134.0, leading: 0.0, bottom: 83.0, trailing: 0.0) divisions=1 occlusions=2, division[0] active=false frame=(0,321 669x40), occlusion[0] active=false frame=(611,543 37x58), occlusion[1] active=true frame=(535,-134 134x82), window=(669.0, 951.0), mainScreen=(466.0, 678.0), verticalBarEdge=0; Book y girado: lo mismo con division[0] active=true. Los marcos están en las coordenadas de la vista de lectura, cuyo origen queda 82 o 134 puntos por debajo del borde superior de la ventana. Sello 27.0: window=(386.0, 678.0) cerrado, (871.0, 669.0) abierto y en Book, (669.0, 871.0) abierto y girado, (678.0, 386.0) cerrado y girado, con verticalEdge=nil, verticalBarEdge=0 y divisions=0 occlusions=0 en todas las líneas. PlainProbe, con la misma vista de pestañas, la misma pila de navegación y la misma barra de herramientas pero sin nada del SDK 27.1, compilada por Xcode 27.0 (27A266a) contra su propio SDK de iOS 27.0 (otool: minos 27.0, sdk 27.0): window=(386.0, 678.0) cerrado y (871.0, 669.0) abierto. En cada arranque con el sello 27.1, las primeras seis a nueve evaluaciones registraron divisions=0 occlusions=0 antes de que aparecieran las regiones, tres de ellas antes de que la vista tuviera tamaño. La oclusión de la cámara se comparó con el PNG del marco “Outer Closed Portrait” de Apple, cuyo recorte de cámara va de 400,3 a 436,3 puntos en horizontal y de 29,7 a 65,7 en vertical a 3x; la oclusión va de 399 a 436 y de 30 a 67 en puntos de ventana, con una diferencia de 1,3 puntos como máximo en cada borde. Las posiciones de los paneles se midieron en las capturas: el primario de x 8 a 433,7 y el secundario de 433,7 a 859 en plano; el primario hasta 455,7, una banda vacía hasta 495,7 y el secundario hasta 859 en Book. La hoja de la sonda midió 653x501 centrada con el teléfono abierto y 459x501 pegada al borde inicial en Book. Con una opción de arranque que hace que la vista de disposición de la sonda llene el área de contenido, la pantalla girada mostró el panel primario encima del secundario, y .split.axes(.horizontal) mostró solo el panel primario. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  14. Apple, Releases, feed RSS consultado el 11 de octubre de 2026: “Xcode 27.1 RC (27A9275)” con fecha Mon, 05 Oct 2026 10:00:00 PDT. Apple, App Store Connect release notes, consultadas el 11 de octubre de 2026, entrada con fecha del 5 de octubre de 2026: “You can now upload apps built with Xcode 27.1 RC using the SDK for iOS 27.1, 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.” Apple, Xcode 27.1 RC Release Notes, obtenidas el 11 de octubre de 2026, Simulator, Known Issues: “StandBy is unavailable in the iPhone Duo Simulator runtime. (187708663)” y “Running and debugging most app extensions is unavailable in the iPhone Duo Simulator runtime. (187708767)”, como en las notas de la beta. ↩↩↩↩

  15. Apple, Releases, feed RSS consultado el 15 de octubre de 2026 a las 17:16 hora del Pacífico (00:16 UTC, 16 de octubre): “Xcode 27.1 (27A9275)” con fecha Thu, 15 Oct 2026 13:00:00 PDT, el mismo número de build que el ítem de la RC del 5 de octubre de la consulta del 11 de octubre, que el feed ya no incluye. Apple, Xcode 27.1 Release Notes, obtenidas a través del endpoint JSON de la documentación el 15 de octubre de 2026 a las 17:21 hora del Pacífico, con el título cambiado desde “Xcode 27.1 RC Release Notes”; Overview: “Xcode 27.1 includes Swift 6.4 and SDKs for iOS 27.1, iPadOS 27, tvOS 27, watchOS 27, macOS 27, and visionOS 27.”; los dos Known Issues del iPhone Duo Simulator, 187708663 y 187708767, sin cambios. Apple, App Store Connect release notes, consultadas el 15 de octubre de 2026 a las 17:20 hora del Pacífico, entrada con fecha del 15 de octubre de 2026, “App Store Connect updates”: “You can now upload apps built with Xcode 27.1 using the SDK for iOS 27.1, 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.” y “Submit your iPhone Duo optimized apps and games in App Store Connect today. Starting April 2027, any apps or games submitted will need to include screenshots for iPhone Duo.” El feed de noticias para desarrolladores de Apple, consultado en la misma hora, no tiene ningún ítem sobre esta versión. ↩↩↩↩↩

  16. Apple Newsroom, “iPhone Duo arrives at Apple Store locations worldwide”, 23 de octubre de 2026, consultado el 26 de octubre: “On Friday, October 23, the highly anticipated iPhone Duo made its debut at Apple Store locations worldwide.” Apple Support, “Apple security releases”, consultado el 26 de octubre de 2026: la fila “iOS 27.1,” “This update has no published CVE entries.,” “iPhone Duo,” “23 Oct 2026,” sin enlace. Apple, Releases, feed RSS consultado el 26 de octubre de 2026 a las 16:12 hora del Pacífico: “iOS 27.2 (24B91020)” e “iOS 27.2 (24B119)” con fecha Mon, 26 Oct 2026 10:00:00 PDT; “Xcode 27.2 RC (27B48)” con fecha Mon, 19 Oct 2026, el ítem de Xcode más reciente; ningún título de ítem nombra una versión de iOS 27.1. El índice iOS & iPadOS Release Notes, consultado el 26 de octubre, lista solo “iOS & iPadOS 27 Release Notes” e “iOS & iPadOS 27.2 Release Notes”; el endpoint JSON de la página de 27.1 devolvió 404. Apple, Xcode 27.2 RC Release Notes, consultadas el 26 de octubre de 2026 (Last-Modified Mon, 19 Oct 2026 04:56:10 GMT): Device Hub, Known Issues (187146039, 187148389, 189465196 con solución provisional); Mac Catalyst, Known Issues (185924957); Simulator, Resolved Issues (190155353); citadas. Apple, iOS & iPadOS 27.2 Release Notes, consultadas el 26 de octubre de 2026: UIKit, New Features (186294594). Mac del autor, 26 de octubre de 2026, macOS 27.0 (26A428), Xcode 27.1 (27A9275) en /Applications/Xcode.app: iPhoneOS.sdk/System/Library/CoreServices/SystemVersion.plist y el plist del SDK de iPhoneSimulator indican ambos ProductVersion 27.1 y ProductBuildVersion 24A94232; xcrun simctl list runtimes imprime “iOS 27.1 (27.1 - 24A94425)” y -j lista una sola entrada en supportedDeviceTypes, “iPhone Duo”; xcrun simctl create de com.apple.CoreSimulator.SimDeviceType.iPhone-16-Pro en com.apple.CoreSimulator.SimRuntime.iOS-27-1 falló con “Incompatible device” (SimError 403); la sonda de los márgenes y sus resultados están en la nota 4 de la publicación sobre las notas de versión de iOS 27.2. ↩↩

Artículos relacionados

Prepara tu app para el iPhone Duo: un ejemplo práctico

Cómo preparar y enviar una app para el iPhone Duo: el sello del SDK que activa el diseño, una app real en cada pose, cap…

84 min de lectura

Notas de iOS 27.2: lo que salió y adónde fue 27.1

iOS 27.2 (24B119) salió el 26 de octubre: 2 funciones nuevas, 5 correcciones, 7 problemas conocidos, 162 CVE y un iOS 27…

43 min de lectura

Estructuras en pixel art: casas, salones e interiores en el iPhone

Cómo construyen casas, interiores y plantas Pokémon, los RPG de SNES y Stardew, medido en el código, y cómo el pueblo de…

93 min de lectura