← Todos los artículos

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 ejecutada en las tres poses de Device Hub aterriza en una pantalla de 466 por 678 puntos cerrada y en una de 951 por 669 abierta, regular en ambas clases de tamaño ahí, y no reporta ninguna región reservada en ninguna pose, con UIScreen.main respondiendo todavía por la pantalla exterior mientras la app está en la interior.12456 {.answer-block}

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
  • 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. Device Hub expone tres poses, Closed (cerrado), Book (libro) y Open (abierto), más Rotate Right (rotar a la derecha). En Closed, la sonda recibe la pantalla exterior: 466 por 678 puntos, ancho compacto, la disposición dividida apilada. En Open recibe la interior: 951 por 669 puntos con orientación nativa horizontal, regular en ambas clases de tamaño, márgenes de área segura de 34 a cada lado y la disposición dividida lado a lado; rotada, 669 de ancho por 951 de alto y sigue siendo regular en ambos ejes. Book le dio a la app la misma geometría que Open. En todas las poses reservedRegions no devolvió nada, ni siquiera incluyendo las regiones inactivas, toolbarVerticalEdge se mantuvo en nil, la barra de herramientas se dibujó horizontal y UIScreen.main.bounds siguió reportando 466 por 678 mientras la app estaba en la pantalla interior.6
  • 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

¿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

¿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 Instalé una sonda de SwiftUI de un solo archivo que lee la geometría, las clases de tamaño, el valor de entorno toolbarVerticalEdge y las regiones reservadas de ambos tipos con includeInactive, envuelve un ArrangementView en cada uno de los tres estilos y pone seis ítems en una barra de herramientas de navegación.6

La app de sondeo en la pantalla exterior del simulador de iPhone Duo: 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 en el borde derecho

La sonda en la pantalla exterior, pose Closed: 466 por 678 puntos, ancho compacto, la disposición dividida apilada, la barra de herramientas horizontal.

En Closed, la sonda reporta lo que reporta un iPhone compacto. UIScreen.main.bounds da 466 por 678 puntos a escala 3, las clases de tamaño son ancho compacto y alto regular, toolbarVerticalEdge es nil, el trait verticalBarEdge de UIKit se lee como valor crudo 0, y las dos consultas de regiones reservadas devuelven arreglos vacíos incluso incluyendo las inactivas, así que la pose cerrada no le expone a la app ni pliegue ni cámara. El GeometryReader dentro de la pila de navegación midió 386 por 510 puntos, con márgenes de área segura de 134 arriba y 34 abajo y ninguno a los lados; en mi lectura, los 80 puntos de ancho que se quedó el sistema son la franja de la derecha donde va el bloque de estado. La disposición dividida puso la vista primaria encima de la secundaria, que es el caso más alto que ancho que describe la guía de Apple, y la barra de herramientas se dibujó horizontal arriba: Share y el botón Done con la marca de verificación junto al botón de más opciones, con las cuatro acciones secundarias ausentes de la barra y, por su placement, dentro de su menú.67

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ó el resto de esta sección.6

Open mueve la app a la pantalla interior en su orientación nativa horizontal. La sonda reporta ancho regular y alto regular, el GeometryReader mide 803 por 515 puntos con márgenes de área segura de 134 arriba, 34 a cada lado y 20 abajo, y al ancho le faltan los mismos 80 puntos que en la pose cerrada, en mi lectura otra vez la franja, ahora a la derecha de una pantalla de 951 puntos de ancho y con el bloque de estado dentro. La disposición dividida pone las vistas primaria y secundaria lado a lado, el caso más ancho que alto de la guía de Apple, y la barra de herramientas se dibuja horizontal arriba a la derecha, de nuevo Share y Done junto al botón de más opciones, con las cuatro acciones secundarias ausentes de la barra.6

La app de sondeo en la pantalla interior del simulador de iPhone Duo en la pose Open, en horizontal: 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

Pose Open, pantalla interior, 2853 por 2007 píxeles: regular en ambas dimensiones, la disposición dividida lado a lado, la franja a la derecha.

Rotate Right pone la pantalla interior en vertical. La sonda mide entonces 669 por 703 puntos, regular en ambas dimensiones, con márgenes de 134 arriba y 34 abajo y ninguno a los lados; en mi lectura la franja de 80 puntos se movió al borde superior, donde el bloque de estado queda ahora dentro de una banda negra, y la disposición dividida se mantiene lado a lado aunque el contenedor sea ahora más alto que ancho.6

La app de sondeo en la pantalla interior del simulador de iPhone Duo rotada a vertical: tamaño 669 por 703 puntos, clases de tamaño regular y regular, la disposición dividida sigue lado a lado, y el reloj y el estado de Wi-Fi en una banda negra que cruza la parte superior

La pantalla interior rotada: 669 puntos de ancho, todavía regular en ambos ejes, la franja cruzando la parte de arriba.

Book, la pose parcialmente plegada, es donde la API de regiones reservadas debería ganarse el sueldo, y en esta beta no lo hizo con mi sonda. Sin ninguna app en primer plano, la pantalla interior mostró la pantalla de inicio después de pulsar Book; al relanzarla, la sonda reportó exactamente lo mismo que reportaba en Open, 803 por 515 puntos, regular en ambas dimensiones, y cero divisions y cero occlusions incluyendo las regiones inactivas, tanto en SwiftUI como en UIKit. La pose cerrada también reporta cero. No encontré ninguna pose en la que reservedRegions devolviera un pliegue o una cámara, así que un layout que se adapte al pliegue es algo que el simulador de esta beta no me dejó ver; la guía de Apple describe la división como activa “when iPhone Duo is partially open,” (cuando el iPhone Duo está parcialmente abierto), y si eso es una carencia de la beta o una carencia de mi sonda es una pregunta para la próxima beta.67

Otras dos cosas se mantuvieron en todas las poses. La barra de herramientas nunca se dibujó en vertical: toolbarVerticalEdge fue nil en SwiftUI y verticalBarEdge se leyó como valor crudo 0 en UIKit, cerrado, abierto y rotado, así que las barras verticales que describe la guía de Apple no aparecieron para la barra de herramientas de una pila de navegación en esta beta. Y UIScreen.main.bounds respondió 466 por 678 puntos, la pantalla exterior, mientras la app estaba 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. El compilador ya avisa 'main' was deprecated in iOS 26.0 cuando se compila la sonda, y este dispositivo es el motivo.67

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

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.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. Registra las regiones reservadas de cada pose durante el desarrollo: reservedRegions(kind:options:layoutDirectionBehavior:) con .includeInactive está documentado para devolver el pliegue y la cámara como valores ReservedRegion que pueden estar activos o inactivos; en esta beta ninguna pose devolvió nada, así que una línea de log en onChange(of: proxy.size) te avisa en el momento en que una pose empiece a reportarlas.67

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 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

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. 

  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. 

  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). 

  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. 

Artículos relacionados

arm64e.x1: el slice de aritmética de punteros verificada de Apple

Las notas del RC de iOS 27 suman arm64e.x1: aritmética de punteros verificada (CPA2) en A20 Pro, M6 y S11. Qué genera cl…

20 min de lectura

Notas de la versión de iOS 27.0: obsolescencias, rupturas y correcciones

iOS 27.0 (24A437) salió el 14 de septiembre. Las notas para desarrolladores: 11 obsolescencias, qué se activa al compila…

41 min de lectura

Diseñar para el iPhone Duo: qué se mueve, qué se divide y qué se queda

La guía de diseño de Apple para el iPhone Duo y tres Tech Talks, leídos como reglas: dos clases de tamaño en lugar de un…

24 min de lectura