Xcode 27.1 beta: seu app no simulador do iPhone Duo
O Xcode 27.1 beta (27A9269) saiu na sexta-feira, 18 de setembro de 2026, com o primeiro SDK do iOS 27.1 e um tipo de dispositivo iPhone Duo para o simulador, quatro dias depois do Xcode 27.0. O SDK traz todas as APIs de iPhone Duo que o guia de preparação da Apple cita, o perfil do tipo de dispositivo define as duas telas em 1398 por 2034 e 2007 por 2853 pixels em 3x, ou seja 466 por 678 e 669 por 951 pontos, e o runtime do simulador é um download à parte que o Xcode busca sob demanda. As próprias notas da Apple listam três coisas que o simulador ainda não faz, e um app de sondagem linkado com o SDK 27.1 e rodado nas três poses do Device Hub preenche uma tela de 466 por 678 pontos fechado, com as barras descendo pela borda final, e uma de 951 por 669 aberto, regular nas duas classes de tamanho ali, com a dobra informada como uma divisão e a câmera e a coluna de status como oclusões, e com UIScreen.main ainda respondendo pela tela externa enquanto o app está na interna. (Corrigido em 2 de outubro: até então este parágrafo dizia que a sonda não via nenhuma região reservada; aquela sonda tinha sido linkada como um app de iOS 27.0.)1245613
TL;DR
- Datas e builds. O feed de lançamentos da Apple data o Xcode 27.1 beta (27A9269) na sexta-feira, 18 de setembro.
xcodebuild -versionimprimeXcode 27.1eBuild version 27A9269; os SDKs de iPhoneOS e de iPhoneSimulator se identificam os dois como iOS 27.1 build 24A94403; o compilador Swift reporta a mesma string de versãoswiftlang-6.4.0.34.1que o Xcode 27.0, e o linker o mesmold-27037.1. O xip tem 2.027.292.809 bytes e o app expandido ocupa 3,6 GiB, e ele se instala ao lado do Xcode 27.0 sem substituí-lo.14 (11 de outubro: o Xcode 27.1 RC (27A9275) veio em seguida, em 5 de outubro, e o App Store Connect aceita os builds dele para a App Store, além do TestFlight.14) (15 de outubro: o Xcode 27.1 saiu como versão final, build 27A9275, o build do RC, e a entrada do App Store Connect do dia aceita os builds dele para a loja com esse nome.15) - As APIs do Duo já estão no SDK. Os dez nomes que a minha checagem de 17 de setembro não achou no SDK 27.0 estão todos no SDK 27.1, entre eles
ArrangementViewereservedRegions(kind:options:layoutDirectionBehavior:)no SwiftUICore,toolbarVerticalBehavior(_:)no SwiftUI, eUIArrangementViewController,preferredVerticalBarBehavioreverticalBarEdgeno UIKit. O SwiftUI marca todos com@available(anyAppleOS 27.1, *); os headers do UIKit marcam o controlador de arranjo e os métodos de regiões reservadas comAPI_AVAILABLE(ios(27.1), tvos(27.1), visionos(27.1)), duas plataformas a mais do que as páginas de documentação listam.4 - O perfil do simulador põe os tamanhos de tela no papel. O tipo de dispositivo iPhone Duo (
iPhone19,4, classe de produtoV68, número de modelo A3447) define duas telas integradas:primarya 1398 por 2034 pixels, escala 3, eprimary-1a 2007 por 2853 pixels, escala 3, com orientação nativa de 270. Divididas por três, dão 466 por 678 e 669 por 951 pontos, e a cifra da tela interna é justamente o número que o meu post sobre o Duo para desenvolvedores inferiu em 10 de setembro a partir do tamanho de captura do App Store Connect. O perfil exige runtime 27.1 ou posterior.5 - O que o simulador faz com um app de verdade (corrigido em 2 de outubro). O Device Hub expõe três poses, Closed (fechado), Book (livro) e Open (aberto), além de Rotate Right (girar à direita). Uma sonda linkada com o SDK 27.1 recebe a tela externa inteira quando fechado, 466 por 678 pontos, largura compacta, com a barra de ferramentas e a barra de abas de pé na borda final,
toolbarVerticalEdgelendo trailing e duas regiões de oclusão ativas, a câmera e a coluna de status. Aberto, recebe a tela interna inteira, 951 por 669 pontos com orientação nativa em paisagem, regular nas duas classes de tamanho, de novo com barras verticais, e uma divisão inativa de 40 pontos de largura descendo pelo meio, que fica ativa na pose Book; girado, 669 por 951 com barras horizontais.UIScreen.main.boundscontinua reportando 466 por 678 enquanto o app está na tela interna. Até 2 de outubro este item dava os tamanhos de tela, 466 por 678 e 951 por 669, com insets de área segura de 34 de cada lado com o aparelho aberto, uma barra de ferramentas horizontal e nenhuma região reservada em pose alguma; o corpo do post dava a área que a sonda mediu, 80 pontos mais estreita que a tela (386 pontos fechado, 803 dentro de insets de 34 pontos aberto). Tudo isso veio de uma sonda que, por engano, tinha sido linkada como um app de iOS 27.0: é o que o SDK 27.0 recebe, e a atualização abaixo traz os dois builds.61213 - O que o beta ainda não consegue fazer. As notas da Apple: “Initial Simulator launch can take several minutes.” (187708500), “StandBy is unavailable in the iPhone Duo Simulator runtime.” (187708663) e “Running and debugging most app extensions is unavailable in the iPhone Duo Simulator runtime.” (187708767), ou seja, a primeira inicialização do simulador pode levar vários minutos e nem o StandBy nem a maioria das extensões de app estão disponíveis nesse runtime. Some a isso dois Known Issues de Mac Catalyst para quem também publica o app no Mac, e uma coisa que a Apple não lista: o download do runtime falhou na minha primeira tentativa com
Download failed.e funcionou na repetição.23
Atualização de 2 de outubro: a sonda de setembro tinha sido linkada como um app de iOS 27.0
Os resultados de simulador que este post trouxe de 21 de setembro a 2 de outubro foram medidos corretamente e descritos de forma errada. Eles mostram o que o simulador do iPhone Duo faz com um app compilado contra o SDK do iOS 27.0. Eu os apresentei como o que ele faz com um app compilado contra o 27.1.
O que deu errado. A sonda era um único arquivo Swift, compilado chamando swiftc -sdk <iPhoneSimulator27.1.sdk> diretamente. Essa flag chega ao compilador. Ela não chega à etapa de link, onde o driver recorreu ao SDK do macOS dentro do mesmo Xcode e gravou no binário a versão desse SDK: LC_BUILD_VERSION dizia sdk 27.0. É a partir desse número que o iOS decide quais comportamentos um app recebe. Rodado de novo em 2 de outubro, o mesmo comando imprime a causa como um aviso, “using sysroot for ‘macOS 27.0’ but targeting ‘arm64-apple-ios27.1.0-simulator’” (usando como sysroot o SDK do macOS 27.0, embora o destino seja o simulador do iOS 27.1); se ele imprimiu isso em setembro, eu não li como a causa de nada.13
Como isso apareceu. Em 2 de outubro rodei um app de verdade, compilado pelo Xcode 27.1 beta com o mesmo SDK, no mesmo simulador. A barra de ferramentas e a barra de abas dele ficavam de pé ao longo da lateral da tela externa, onde as da sonda tinham ficado deitadas no topo. otool -l nos dois binários mostrou sdk 27.1 no app e sdk 27.0 numa sonda recompilada do jeito de setembro. Recompilada com SDKROOT definido, a sonda mostra sdk 27.1 e se comporta como o app. E uma versão simples da sonda, compilada pelo próprio Xcode 27.0 contra o SDK real do iOS 27.0, recebe as mesmas janelas que a sonda com o carimbo errado recebeu, então os números de setembro são um retrato justo de um build 27.0.13
A nova rodada. O mesmo código-fonte, linkado dos dois jeitos, em cada pose, no mesmo Xcode 27.1 beta (27A9269) e no mesmo runtime (24A94401):13
| Pose | Linkado como SDK 27.0 | Linkado como SDK 27.1 |
|---|---|---|
| Fechado | janela de 386 por 678 pontos ao lado de um trilho preto; barras horizontais; toolbarVerticalEdge nil; nenhuma região |
janela de 466 por 678, a tela inteira; barra de ferramentas e barra de abas verticais na borda final; toolbarVerticalEdge trailing; duas oclusões ativas |
| Fechado, girado | janela de 678 por 386; barras horizontais; nenhuma região | janela de 678 por 466; compacta nas duas classes de tamanho; barras verticais; duas oclusões ativas, a câmera e a coluna de status |
| Aberto | janela de 871 por 669; barras horizontais; nenhuma região | janela de 951 por 669; barras verticais; uma divisão inativa, uma oclusão inativa e uma ativa |
| Aberto, girado | janela de 669 por 871; barras horizontais; nenhuma região | janela de 669 por 951; barras horizontais; toolbarVerticalEdge nil; as mesmas três regiões, giradas |
| Book | como Aberto | como Aberto, com a divisão ativa |
| Book, girado | como Aberto, girado | como Aberto, girado, com a divisão ativa |
O que fica retirado. Três afirmações, cada uma verdadeira para o build 27.0 e falsa para um build com o carimbo 27.1: que a barra de ferramentas nunca desenhou na vertical; que reservedRegions não devolveu nada em pose alguma; e que o simulador deu ao app só a tela ao lado do trilho de status. Uma quarta errou o motivo: escrevi que, girado, o arranjo dividido “stays side by side even though the container is now taller than it is wide” (continua lado a lado mesmo com o contêiner agora mais alto do que largo). A view de arranjo da sonda era ela mesma mais larga do que alta dentro daquela tela, e ela se divide pela própria forma; um arranjo que preenche a tela girada se empilha, como o guia da Apple diz que vai acontecer. Uma quinta: o TL;DR dava os tamanhos de tela, 466 por 678 e 951 por 669, onde o corpo do post dava a área que a sonda mediu, 80 pontos mais estreita (386 pontos fechado, 803 dentro de insets de 34 pontos aberto); o build 27.0 nunca teve a tela inteira.713
O que se mantém. Tudo fora da seção do simulador: as datas e os builds, a tabela de símbolos do SDK, o perfil do dispositivo com seus tamanhos em pixels e em pontos, o download do runtime, os Known Issues da Apple. Dentro dela: os tamanhos de tela, as classes de tamanho, as poses que o Device Hub oferece, o crash do screenConfig e a armadilha do UIScreen.main, que a nova rodada reproduziu com o carimbo 27.1. A nota de 24 de setembro que esta atualização substitui supunha que os zeros vinham de ler as regiões cedo demais, e prometia uma nova rodada em vários ângulos de dobradiça. A suposição estava errada: o build 27.0 não devolve nenhuma, não importa por quanto tempo pergunte. A observação de Molzahn que a nota citava se mantém: a sonda linkada corretamente não leu nenhuma região nas primeiras seis a nove avaliações e leu todas depois disso. As rodadas em ângulos de dobradiça não foram feitas.1213
Se você montou uma sonda própria a partir deste post, confira: otool -l <app>/<binary> | grep -A4 LC_BUILD_VERSION. Um projeto compilado pelo Xcode sai carimbado corretamente. Um arquivo compilado à mão precisa de SDKROOT exportado para o SDK do simulador antes de o swiftc rodar. O exemplo prático que revelou isso traz a comparação entre as três versões, incluindo um carimbo de iOS 26.
Atualização de 26 de outubro: o celular saiu com o 27.1, e os números do SDK final
O iPhone Duo chegou às lojas na sexta-feira, 23 de outubro, com o iOS 27.1, segundo a newsroom da Apple e a página de atualizações de segurança dela, que lista “iOS 27.1” só para o “iPhone Duo”, sem entradas CVE publicadas; nenhum item do iOS 27.1 chegou ao feed de lançamentos, nenhuma página de notas de versão do 27.1 apareceu, e o índice lista o 27 e o 27.2. Neste Mac, com o Xcode 27.1 (27A9275), a versão final desde 15 de outubro, os SDKs de iPhoneOS e de iPhoneSimulator se identificam como iOS 27.1 build 24A94232, um número menor que o 24A94403 do beta registrado acima, e o runtime do simulador do iOS 27.1 é o 24A94425, que xcrun simctl list runtimes -j lista com um único tipo de dispositivo suportado, o iPhone Duo; um simctl create de um iPhone 16 Pro com esse runtime falha com “Incompatible device.” O iOS 27.2 saiu hoje, 26 de outubro (24B119, com um segundo build do iOS 27.2, 24B91020, no mesmo minuto), e as notas do Xcode 27.2 RC (27B48, 19 de outubro) trazem quatro entradas do 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.” (corrigido: no simulador do iPhone Duo, um app que usa CameraCaptureAccessory pode usar as duas telas ao mesmo tempo sem uma sessão de captura de câmera ativa) (190155353); “When switching between the inner and outer display of the iPhone Duo simulator, modifier keys such as Shift and Command might stop working.” (ao alternar entre a tela interna e a externa do simulador do iPhone Duo, teclas modificadoras como Shift e Command podem parar de funcionar) (189465196), com o contorno “Click with the mouse on the currently visible screen.” (clique com o mouse na tela visível no momento); e dois Known Issues herdados dos betas, agora os dois sob Device Hub, capturas de tela “black for up to a few minutes after booting the device” (pretas por até alguns minutos depois de iniciar o dispositivo) (187146039) e ferramentas de acessibilidade que “cannot convey screen content on an iPhone Duo within Device Hub” (não conseguem transmitir o conteúdo da tela de um iPhone Duo dentro do Device Hub) (187148389). A entrada de Mac Catalyst sobre “APIs specific to iOS 27.1” (APIs específicas do iOS 27.1) não mudou. Uma entrada de UIKit nas notas do iOS 27.2 cita o 27.1, margens de layout padrão zero para UIView; uma sonda compilada a partir de um único código-fonte e rodada no runtime 27.1 num simulador do iPhone Duo informa 8 pontos quando o LC_BUILD_VERSION dela está carimbado sdk 27.0 (a armadilha da compilação à mão sobre a qual a atualização de 2 de outubro, acima, avisa) e zero quando está carimbado sdk 27.1, então a mudança depende do SDK com que o binário é linkado, além do sistema; o post sobre as notas de versão do iOS 27.2 traz a tabela.16
O que vem no beta?
O feed de lançamentos da Apple lista “Xcode 27.1 beta (27A9269)” na sexta-feira, 18 de setembro, às 10:00 PT, e um “TestFlight Update” na mesma tarde; as notas de versão do App Store Connect daquele dia dizem “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.” (você já pode enviar apps compilados com o Xcode 27.1 beta usando o SDK do iOS 27.1 beta ou do iPadOS 27.1 beta para testes internos e externos).1 O Overview das notas de versão nomeia a linha 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 Vale ler essa lista como ela está escrita: o iOS é a única plataforma em 27.1, o próprio SDKSettings.plist do SDK reporta a versão 27.1, e o App Store Connect chama o mesmo SDK de “iPadOS 27.1 beta”, um detalhe que o post sobre o Xcode 27 já carrega.
O download é menor do que o número de versão sugere. O xip tem 2.027.292.809 bytes, é assinado pela Apple com o certificado de Software Update e expande para um app de 3,6 GiB, o mesmo tamanho do Xcode 27.0; um xip --expand numa pasta, um rename para /Applications/Xcode-27.1-beta.app e o DEVELOPER_DIR apontando para lá são toda a instalação para trabalhar na linha de comando. A primeira chamada de xcodebuild sob o beta levou depois uns dois minutos instalando por conta própria os pacotes CoreTypes.pkg e XcodeSystemResources.pkg que vêm embutidos, o passo que xcodebuild -runFirstLaunch faz de forma explícita, e o segundo desses pacotes é o que deixa o tipo de dispositivo iPhone Duo no lugar.4 O que o app não contém é um runtime de simulador. O beta encontra os runtimes de iOS que já estão neste Mac, o 27.0 entre eles, e nenhum para o 27.1; xcodebuild -downloadPlatform iOS sob o beta nomeia a peça que falta como “iOS 27.1 Simulator (24A94401)” e a busca como imagem de disco cryptex pelo serviço de mobile assets da Apple, enquanto as imagens de disco da própria página de downloads para desenvolvedores param no iOS 18.2 Simulator Runtime.34 A primeira tentativa terminou em DVTDownloadable: Download Failed com Error Domain=DVTDownloadableErrorDomain Code=41 "Download failed."; a segunda, com -buildVersion 24A94401, reportou o runtime em 7,85 GB, concluiu, e o simctl list runtimes então listou “iOS 27.1 (27.1 - 24A94401)”. Reserve o disco antes: o runtime é quatro vezes o tamanho do download do Xcode.3

A tela externa do simulador de iPhone Duo na primeira inicialização, 1398 por 2034 pixels: o bloco de status desce pela borda direita, o lado onde as Human Interface Guidelines da Apple colocam a Dynamic Island e a barra de status no iPhone Duo.10
Como você consegue o simulador do iPhone Duo?
São três passos, e nenhum deles é um botão de download numa página web. A Apple distribui o simulador só dentro do Xcode, e só dentro do beta 27.1: as notas do beta 27.2 trazem um aviso que diz “Download Xcode 27.1 beta to get the iOS SDK and simulator support for iPhone Duo.” (baixe o Xcode 27.1 beta para obter o SDK do iOS e o suporte de simulador para o iPhone Duo).8 (11 de outubro: o Xcode 27.1 RC (27A9275) saiu em 5 de outubro, e as notas dele listam os mesmos problemas conhecidos do iPhone Duo Simulator, então o beta não é mais o único Xcode 27.1 cujas notas cobrem o simulador do Duo; eu não instalei o RC.14) (15 de outubro: o Xcode 27.1 saiu como versão final, build 27A9275, o build do RC, com os mesmos dois problemas conhecidos do simulador do Duo nas notas; eu não o instalei.15)
- Xcode 27.1 beta (27A9269), nos downloads para desenvolvedores, com data de sexta-feira, 18 de setembro, no feed Releases da Apple. Expanda o xip, mova o app para um nome com versão, como
/Applications/Xcode-27.1-beta.app, ao lado do Xcode 27.0 e aponteDEVELOPER_DIRpara ele no trabalho de linha de comando; o beta exige macOS Tahoe 26.6 ou posterior.12 - O runtime do iOS 27.1, que o xip não contém. Rode
xcodebuild -downloadPlatform iOScomDEVELOPER_DIRapontando para o beta; ele busca o runtime 27.1 que torna inicializável o tipo de dispositivoiPhone Duo, e as notas da Apple avisam que, além do download, a primeira inicialização do Simulator “can take several minutes” (pode levar vários minutos). Minha primeira tentativa falhou e a nova tentativa funcionou, então tente de novo antes de diagnosticar.23 - Device Hub, onde ficam o dispositivo e suas poses. Adicione ou selecione o dispositivo iPhone Duo, inicialize-o e use os botões de pose, Closed, Book e Open, além de Rotate Right; o
simctlnão tem comando de pose. Os tamanhos e as capturas por pose mais abaixo vêm desse caminho.6
A Apple não tem versão para navegador. Uma página encontrada com “iPhone Duo simulator online” não está rodando o runtime do iOS 27.1 da Apple, então, seja o que for que ela desenhe, não é a fonte das classes de tamanho, das regiões reservadas nem do comportamento da tela externa medidos aqui; para checar um layout sem o runtime, o canvas de Previews do Xcode ganhou neste beta um grupo Display para a tela alternativa.2
O SDK 27.1 tem as APIs do Duo?
Em 17 de setembro eu procurei no SDK do iOS 27.0 os nomes que aparecem no guia “Preparing your app for iPhone Duo” da Apple e não achei nenhum dos dez que são específicos do dispositivo. A mesma busca contra o SDK 27.1, feita do mesmo jeito, uma busca de texto puro nas interfaces de módulo e nos headers, acha todos. As linhas são as substrings buscadas: sete delas cobrem nove dos dez nomes, porque os dois métodos reservedRegions dividem uma linha e os dois membros axisBehavior também, e as outras três são os tipos por trás dos nomes: ReservedRegion, ToolbarVerticalBehavior para toolbarVerticalBehavior(_:) e UIVerticalBarBehavior para preferredVerticalBarBehavior:4
| Substring buscada | Interface do SwiftUICore | Interface do SwiftUI | Interface do UIKit | Headers do UIKit |
|---|---|---|---|---|
ArrangementView |
45 | 0 | 19 | 4 arquivos |
UIArrangementViewController |
0 | 0 | 19 | 4 arquivos |
ReservedRegion |
16 | 0 | 15 | 3 arquivos |
reservedRegions |
2 | 0 | 5 | 1 arquivo |
ToolbarVerticalBehavior |
0 | 5 | 0 | 0 |
UIVerticalBarBehavior |
0 | 0 | 0 | 1 arquivo |
verticalBarEdge |
0 | 0 | 0 | 1 arquivo |
toolbarVerticalEdge |
1 | 0 | 0 | 0 |
axisBehavior |
0 | 2 | 0 | 1 arquivo |
preferredVerticalBarBehavior |
0 | 0 | 0 | 1 arquivo |
Dois detalhes dessa tabela importam na hora de escrever o código. Os tipos do SwiftUI moram no SwiftUICore, o módulo que o import SwiftUI reexporta, então um import comum já acha todos; e os atributos de disponibilidade discordam da documentação quanto às plataformas. A interface do SwiftUICore declara ArrangementView, e a do SwiftUI declara toolbarVerticalBehavior(_:), as duas sob @available(anyAppleOS 27.1, *), que é a abreviação da Apple para todas as plataformas naquela versão, enquanto UIArrangementViewController.h e os métodos reservedRegionsOfKind: de UIView.h carregam API_AVAILABLE(ios(27.1), tvos(27.1), visionos(27.1)) junto de API_UNAVAILABLE(watchos); em UIVerticalBarEdge.h, o enum e o trait verticalBarEdge carregam esse mesmo par, enquanto os casos Leading e Trailing carregam API_AVAILABLE(ios(27.1)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos, tvos). As páginas de documentação da Apple para os cinco listam só iOS 27.1 e iPadOS 27.1, marcadas como beta.47 Escreva contra o iOS e deixe o compilador te contar o resto.
Os três nomes que o guia usa e que já estavam no SDK 27.0 continuam iguais: presentationPlacement(_:) segue sob @available(anyAppleOS 27.0, *), backgroundExtensionEffect() continua ali desde o iOS 26, e dos dois casos de ToolbarItemPlacement que o guia cita, topBarPinnedTrailing fica sob @available(iOS 27.0, visionOS 27.0, *) e cancellationAction não carrega disponibilidade própria além da do tipo.4
O que o perfil do simulador diz sobre as duas telas?
O tipo de dispositivo que a Apple instala com o beta, iPhone Duo.simdevicetype, é um bundle comum dentro de /Library/Developer/CoreSimulator/Profiles/DeviceTypes, e suas duas property lists respondem perguntas que a ficha técnica tinha deixado em aberto.5
O profile.plist dá a identidade: identificador de modelo iPhone19,4, classe de produto V68, um alias com.apple.CoreSimulator.SimDeviceType.V68, minRuntimeVersion 27.1 e uma regra para criar o dispositivo por padrão nos runtimes de 27.1 em diante. O capabilities.plist dá o hardware: número de modelo A3447, HomeButtonType 2, DeviceSupportsDynamicIsland true, DeviceSupportsEnhancedMultitasking false, IsLargeFormatPhone true, um CompatibleDeviceFallback de iPhone18,3, um raio de canto de dispositivo de 59 e um array displays com duas entradas integradas e três virtuais.5
| Tela no perfil | Pixels | Escala | Pontos | Orientação nativa | Raios de canto | Espaço de cor |
|---|---|---|---|---|---|---|
primary (“LCD”, tela 1) |
1398 por 2034 | 3 | 466 por 678 | 0 | 8, 59, 8, 59 | P3 |
primary-1 (“LCD-1”, tela 3) |
2007 por 2853 | 3 | 669 por 951 | 270 | 55 nos quatro | sRGB |
A primeira linha é a tela externa e bate pixel a pixel com a ficha técnica da Apple. A segunda é a tela interna, e a contagem de pixels dela é o tamanho de captura do App Store Connect, 2007 por 2853, e não os 1878 por 2670 do painel: o simulador renderiza a tela interna a 669 por 951 pontos em 3x, que é a aritmética que o meu post sobre o Duo para desenvolvedores fez em 10 de setembro e rotulou ali como uma inferência. Agora o próprio perfil da Apple carrega o número. A orientação nativa de 270 graus diz que a tela interna é nativa em paisagem, 951 pontos de largura por 669 de altura com o telefone aberto, o que bate com as dimensões que a Apple dá para o aparelho aberto. Os dois números restantes são valores do simulador, e não do hardware: as duas telas aparecem a 460 pixels por polegada e 60 Hz, sendo que a ficha técnica dá 430 ppi ao painel interno, então vale tratar hdpi como um marcador de lugar.5
O perfil também traz as formas. Cada tela referencia uma máscara de framebuffer, um PDF da área visível. A máscara da tela externa tem cantos assimétricos, os valores 8 do perfil numa borda longa e 59 na outra, na minha leitura o raio pequeno fica do lado que encontra a dobradiça central descrita no guia de design da Apple; a máscara da tela interna é um retângulo arredondado liso, com o valor de canto 55 do perfil e sem recorte para a câmera frontal, então a oclusão da câmera vem da API de regiões reservadas em tempo de execução, e não da forma do framebuffer.510
O que o simulador mostra?
O dispositivo inicia fechado. Na primeira inicialização a tela externa mostra a Tela de Início e o framebuffer da interna está ligado, mas preto, e o simctl io enumerate lista as duas telas integradas pelos nomes do perfil, primary a 1398 por 2034 e primary-1 a 2007 por 2853, ao lado das virtuais de sempre.6 O Device Hub é onde as poses moram. Com o dispositivo Duo selecionado, a janela dele expõe Rotate Right, Closed, Book e Open como botões que a API de acessibilidade consegue pressionar, que foi como tudo nesta seção foi conduzido; o simctl não tem comando de pose.6
A sonda é um app SwiftUI de arquivo único: uma view de abas com uma pilha de navegação com cinco itens de barra de ferramentas, uma leitura da geometria, das classes de tamanho, do valor de ambiente toolbarVerticalEdge, da dobradiça e das regiões reservadas dos dois tipos com includeInactive, e um ArrangementView no estilo dividido. Ela lê as regiões a cada avaliação do seu body e se reavalia uma vez por segundo. Os números abaixo são da nova rodada de 2 de outubro, linkada com o SDK 27.1; as rodadas de setembro, linkadas como 27.0 por engano, vêm depois, sob um título próprio.13
Linkado com o SDK 27.1
Fechado. O app recebe a tela externa inteira: a janela dele tem 466 por 678 pontos, largura compacta e altura regular. A barra de ferramentas e a barra de abas ficam de pé na borda final, sob o relógio, toolbarVerticalEdge lê trailing e o trait verticalBarEdge do UIKit lê valor bruto 2. O conteúdo dentro da pilha de navegação mede 382 por 562 pontos, com insets de área segura de 82 no topo, 34 embaixo e 84 no lado final, que é o trilho. Duas regiões de oclusão são informadas, as duas ativas: uma de 37 pontos de lado onde fica a câmera externa, e uma de 84 por 170 cobrindo a câmera e a coluna de status acima das barras. Nenhuma divisão é informada nesta tela. Deitada de lado, ela tem 678 por 466, compacta nas duas classes de tamanho, com as barras ainda na borda final.13

Fechado, SDK 27.1: a tela inteira de 466 por 678 pontos, com as barras descendo pela borda final.
Aberto. O app passa para a tela interna na orientação nativa em paisagem: uma janela de 951 por 669 pontos, regular nas duas classes de tamanho, com as barras ainda verticais na borda final. O conteúdo mede 867 por 553 com os mesmos três insets. Três regiões voltam. Uma divisão de 40 pontos de largura atravessa toda a altura no meio da tela, de x 455 a 495, com margens de 20 pontos de cada lado, e está inativa: o celular está plano. Uma oclusão inativa de 58 por 37 marca a câmera interna, que segundo as diretrizes da Apple “stays hidden until the camera is active.” (fica oculta até a câmera ser ativada).10 Uma oclusão ativa de 84 por 120 cobre a coluna de status. O arranjo dividido põe os dois painéis lado a lado e divide a largura igualmente.13

Aberto, SDK 27.1: 951 por 669 pontos, com a dobra informada como uma divisão inativa no meio.
Book. A pose Book do Device Hub informa a dobradiça como parcialmente aberta a 127 graus. A janela não muda de tamanho. O que muda é a divisão: o mesmo frame, agora ativa. O arranjo dividido responde levando o divisor para a dobra e deixando vazia a faixa de 40 pontos, de modo que o painel primário termina em x 455 e o secundário começa em 495. Uma sheet apresentada nesta pose sai do centro e vai para a metade inicial.13

Book, SDK 27.1: a divisão está ativa e o arranjo dividido deixa a dobra vazia.
Girado. Rotate Right com o celular aberto dá uma janela de 669 por 951 pontos, ainda regular nas duas classes de tamanho, e as barras voltam para a horizontal: toolbarVerticalEdge é nil, a barra de ferramentas fica no topo ao lado do relógio e a barra de abas flutua embaixo. Isso bate com as diretrizes de design da Apple, que mantêm “standard horizontal bars” (as barras horizontais padrão) na tela interna em retrato.10 As mesmas três regiões são informadas no espaço de coordenadas girado: a divisão agora é uma faixa horizontal de 40 pontos de altura atravessando o meio, inativa com o celular plano e ativa em Book. A view de arranjo da sonda, que dentro dessa tela é mais larga do que alta, continua lado a lado.13

Aberto e girado, SDK 27.1: barras horizontais, e a dobra agora como uma faixa horizontal.
Duas coisas valem para todas as poses. As regiões chegam atrasadas: em cada inicialização, as primeiras seis a nove avaliações do body da sonda não leram nenhuma, e todas as seguintes leram todas, então uma view que pergunta uma única vez, na primeira passada de layout, recebe uma resposta vazia. O fixture DuoProbe de Sven-Eric Molzahn documentou exatamente isso em 20 de setembro (“reservedRegions is empty on the first geometry evaluation and populated on a later one”, ou seja, reservedRegions fica vazio na primeira avaliação de geometria e preenchido numa posterior) junto com a faixa de 40 pontos, e o guia do simulador do SwiftLee de 22 de setembro acrescenta que “Holding Option ⌥ reveals a slider that you can use to control the hinge angle of the device with precision” (segurar a tecla Option ⌥ revela um controle deslizante que você pode usar para controlar com precisão o ângulo da dobradiça do aparelho), algo que eu não usei.12 E UIScreen.main.bounds responde 466 por 678 pontos, a tela externa, enquanto o app está na interna, que é exatamente a armadilha contra a qual o guia da Apple alerta ao dizer para fazer os cálculos de layout “based on your scene or containing view’s bounds rather than screen dimensions” (com base nos bounds da sua cena ou da visualização que contém, e não nas dimensões da tela): a tela principal não é a tela em que você está. A própria tela da cena da janela informa a tela em que o app realmente está.713
Um caminho para as outras poses não funciona. O simctl io screenConfig consegue desligar uma tela, e desligar a externa mantendo a interna ligada não abriu o telefone; derrubou o system shell do simulador, o simctl launch falhou em seguida com “The system shell probably crashed,” (o system shell provavelmente travou) e foi preciso reiniciar. As poses moram na janela do Device Hub.6
Linkado com o SDK 27.0
Estes são os números que esta seção trouxe até 2 de outubro, medidos em 19 e 20 de setembro com uma sonda que tinha uma pilha de navegação e nenhuma view de abas, e medidos de novo em 2 de outubro com a sonda atual. Eles descrevem o que um app compilado com o Xcode 27.0 recebe neste simulador.613
Fechado, a janela tem 386 pontos de largura numa tela de 466: o sistema fica com o trilho de 80 pontos, desenha ali o relógio e o status sobre preto, e a barra de ferramentas do app fica deitada no topo. Aberto, a janela tem 871 por 669, faltam os mesmos 80 pontos à direita e os insets de área segura são de 34 de cada lado. Aberto e girado, os 80 pontos saem do topo. Em todas as poses as classes de tamanho batem com as do build 27.1, toolbarVerticalEdge é nil, verticalBarEdge lê valor bruto 0 e as duas consultas de regiões reservadas devolvem arrays vazios, mesmo incluindo as regiões inativas e não importa por quanto tempo a sonda continue perguntando; Book não se distingue de Open.

Fechado, linkado como 27.0: o app para no trilho e a barra de ferramentas continua horizontal.

Aberto, linkado como 27.0: regular nas duas dimensões, com o trilho retido pelo sistema.

Girado, linkado como 27.0: a tarja no topo é do sistema.
O que o beta ainda não consegue fazer
A Apple lista três limites em Simulator, Known Issues (problemas conhecidos), nas notas do próprio beta: “Initial Simulator launch can take several minutes.” (187708500), “StandBy is unavailable in the iPhone Duo Simulator runtime.” (187708663) e “Running and debugging most app extensions is unavailable in the iPhone Duo Simulator runtime.” (187708767).2 O do StandBy pesa para quem tem widgets ou Live Activities pensados para ele: o anúncio da Apple diz que o telefone “enters StandBy on either the outer or inner display” (entra em StandBy na tela externa ou na interna) e o chama de “hub for widgets” (central de widgets), o post sobre o Duo para desenvolvedores cobre o que aparece ali, e até que um beta posterior derrube o limite, o StandBy neste aparelho é coisa para conferir em hardware (15 de outubro: as notas da versão final continuam a listá-lo15).11
Mais dois ficam em Mac Catalyst, Known Issues, e mordem qualquer app que adote essas APIs e também compile para o 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)” (projetos que usam APIs específicas do iOS 27.1 mostram erros de compilação ao compilar para Mac Catalyst), com o workaround da Apple de #if !targetEnvironment(macCatalyst) em Swift ou #if !TARGET_OS_MACCATALYST em Objective-C, e “Projects that target iOS 27.1 show no Mac Catalyst run destination available. (187046347)” (projetos que miram o iOS 27.1 não mostram nenhum destino de execução de Mac Catalyst), com “Add a Mac Catalyst 27.0 minimum deployment in target settings.” como solução.2 As notas do Xcode 27.2 beta acrescentam um terceiro pelo outro lado: “macOS, watchOS, tvOS, and visionOS SDKs in Xcode 27.2 incorrectly report 27.1 as a valid deployment target,” e “Mac Catalyst builds with a 27.1 or 27.2 deployment target may be unable to use newly introduced API.” (187160501), ou seja, esses SDKs reportam errado o 27.1 como deployment target válido e as compilações de Mac Catalyst com deployment target 27.1 ou 27.2 podem ficar sem conseguir usar a API recém-introduzida.8
O que eu faria esta semana
- Instale o beta ao lado do Xcode 27.0, e não por cima: expanda o xip, renomeie o app e aponte o
DEVELOPER_DIRpara ele nas compilações de linha de comando; nada nas notas do beta mexe no toolchain do 27.0, e o compilador e o linker carregam strings de versão idênticas.4 - Comece o download do runtime antes de precisar dele, com
xcodebuild -downloadPlatform iOSsob o beta, e repita se falhar; o runtime é o que torna o tipo de dispositivo iPhone Duo inicializável, e a Apple avisa que, por cima disso, a primeira inicialização leva minutos.23 - Compile uma vez contra o SDK 27.1 com o seu target de Mac Catalyst incluído, e leia os dois diagnósticos que a Apple cita antes de decidir se cerca a API nova com
#if !targetEnvironment(macCatalyst)ou se sobe o mínimo do Catalyst para 27.0.2 - Use os números do perfil como os tamanhos contra os quais pré-visualizar e testar: 466 por 678 pontos fechado, 669 por 951 aberto, com a tela interna nativa em paisagem. A nota de Previews do beta acrescenta um grupo Display ao seletor de overrides do canvas “for previewing content on a device’s alternative display.” (182598534), ou seja, para pré-visualizar conteúdo na tela alternativa de um aparelho.25
- Leia as regiões reservadas num lugar onde elas serão lidas de novo: no body da view, pelo geometry proxy, ou a cada mudança de geometria, nunca uma única vez no primeiro layout.
reservedRegions(kind:options:layoutDirectionBehavior:)com.includeInactivenão devolveu nada nas primeiras seis a nove avaliações da sonda e, em cada uma das seguintes, devolveu todas as regiões que a tela tem (fechado, a câmera e a coluna de status; aberto, a dobra, a câmera interna e a coluna de status), então um valor guardado em cache na primeira passada é um array vazio durante toda a vida da view. E antes de confiar em qualquer parte disso, confirme que o build está carimbado com o SDK 27.1:otool -l <app>/<binary> | grep -A4 LC_BUILD_VERSION.713
Perguntas frequentes
O simulador de iPhone Duo está no Xcode 27.1 beta?
Está. O beta instala um tipo de dispositivo iPhone Duo, com.apple.CoreSimulator.SimDeviceType.iPhone-Duo, cujo perfil exige um runtime de iOS 27.1 que o Xcode baixa à parte com xcodebuild -downloadPlatform iOS. As notas da Apple avisam que a primeira inicialização “can take several minutes” (pode levar vários minutos) e que nem o StandBy nem a maioria das extensões de app estão disponíveis nesse runtime.235
Como consigo o simulador do iPhone Duo?
Instale o Xcode 27.1 beta, baixe o runtime do iOS 27.1 com xcodebuild -downloadPlatform iOS sob o beta e escolha o dispositivo iPhone Duo no Device Hub, onde as poses são botões. O beta 27.2 não o inclui; as notas do 27.2 da Apple apontam para o beta 27.1 para obter “the iOS SDK and simulator support for iPhone Duo.” (o SDK do iOS e o suporte de simulador para o iPhone Duo).238 (11 de outubro: o Xcode 27.1 RC (27A9275) saiu em 5 de outubro, e as notas dele listam os mesmos problemas conhecidos do iPhone Duo Simulator, então o beta não é mais o único Xcode 27.1 cujas notas cobrem o simulador do Duo; eu não instalei o RC.14) (15 de outubro: o Xcode 27.1 saiu como versão final, build 27A9275, o build do RC, com os mesmos dois problemas conhecidos do simulador do Duo nas notas; eu não o instalei.15)
Existe um simulador do iPhone Duo online?
Não da Apple. O simulador vinha só dentro do Xcode 27.1 beta antes do RC e roda o runtime do iOS 27.1 da Apple; uma página de navegador com esse nome está desenhando outra coisa. Para uma checagem rápida de layout, o canvas de Previews do beta oferece um grupo Display para a tela alternativa.2 (11 de outubro: o Xcode 27.1 RC (27A9275) saiu em 5 de outubro, e as notas dele listam os mesmos problemas conhecidos do iPhone Duo Simulator, então o beta não é mais o único Xcode 27.1 cujas notas cobrem o simulador do Duo; eu não instalei o RC.14) (15 de outubro: o Xcode 27.1 saiu como versão final, build 27A9275, o build do RC, com os mesmos dois problemas conhecidos do simulador do Duo nas notas; eu não o instalei.15)
Como instalo o Xcode 27.1 beta ao lado do Xcode 27?
Expanda o xip com xip --expand, mova o app resultante para um nome com versão, como /Applications/Xcode-27.1-beta.app, e aponte o DEVELOPER_DIR para a pasta Contents/Developer dele nos comandos xcodebuild, xcrun e swiftc. O beta exige macOS Tahoe 26.6 ou posterior, o mesmo piso do Xcode 27.0.24
Qual é o tamanho da tela interna do iPhone Duo em pontos?
669 por 951 pontos, segundo o perfil de dispositivo do simulador, que define a tela interna como 2007 por 2853 pixels em escala 3 com orientação nativa em paisagem; a tela externa tem 466 por 678 pontos, a partir de 1398 por 2034 pixels em escala 3.5
O Xcode 27.1 beta muda o SDK do iOS 27.0 ou o toolchain do Xcode 27?
Não. O compilador Swift e o linker reportam as mesmas strings de versão do Xcode 27.0, e as notas de versão do beta têm três seções, Mac Catalyst, Previews e Simulator, e nenhuma delas encosta no toolchain. O SDK do iOS 27.1 é um acréscimo, identificado como build 24A94403 tanto no SDK de dispositivo quanto no de simulador.24
Quando o iPhone Duo chega, e com o quê?
Em 23 de outubro, com o iOS 27.1, segundo o post de notícias da Apple de 16 de setembro: “When iPhone Duo becomes available on October 23, it will run iOS 27.1.” (quando o iPhone Duo ficar disponível em 23 de outubro, ele rodará o iOS 27.1).9 (26 de outubro: foi o que aconteceu, e o iOS 27.1 não saiu para nenhum outro aparelho; a página de segurança da Apple o lista só para o iPhone Duo, e o runtime do simulador do 27.1 neste Mac aceita apenas o tipo de dispositivo iPhone Duo.16)
Relacionado neste site: o post sobre o Duo para desenvolvedores traz os números da ficha técnica e a lista de APIs que este post confere contra o SDK; o post sobre o design para o iPhone Duo lê as orientações de design da Apple; a lista de verificação do iPhone redimensionável é o trabalho de layout que os números do perfil alimentam; o hub do Xcode 27 guarda as seções datadas de cada beta; o post sobre as falhas de build do Xcode 27 cobre a toolchain que este beta deixa intacta; e o post sobre as release notes do iOS 27 acompanha os builds 27.x.
Fontes
-
Apple, Releases, feed RSS consultado em 19 de setembro de 2026: “Xcode 27.1 beta (27A9269)” datado de Fri, 18 Sep 2026 10:00:00 PDT e “TestFlight Update” datado de Fri, 18 Sep 2026 14:00:00 PDT. Apple, App Store Connect release notes, 18 de setembro de 2026, atualização do TestFlight, citada na íntegra. ↩↩↩↩
-
Apple, Xcode 27.1 Beta Release Notes, obtidas pelo endpoint JSON da documentação em 19 de setembro de 2026: Overview, citado; Mac Catalyst, Known Issues 185924957 e 187046347 com seus workarounds, citados; Previews, New Features 182598534, citado; Simulator, Known Issues 187708500, 187708663 e 187708767, citados. As notas não contêm nenhuma outra seção. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩
-
Download do runtime feito pelo autor no macOS 26.6.2 (25G83), em 19 de setembro de 2026, com o
DEVELOPER_DIRapontando para o Xcode 27.1 beta:xcodebuild -downloadPlatform iOSimprimiu “iOS is already downloaded.” para o runtime 27.0 já instalado e depois “Downloading iOS 27.1 Simulator (24A94401) (arm64)”, seguido deDVTDownloadable: 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)eError Domain=DVTDownloadableErrorDomain Code=41 "Download failed."; a repetição,xcodebuild -downloadPlatform iOS -buildVersion 24A94401, imprimiu “Downloading iOS 27.1 Simulator (24A94401) (arm64): 0.0% (66 kB of 7.85 GB)” e concluiu, depois do que oxcrun simctl list runtimeslistou “iOS 27.1 (27.1 - 24A94401) - com.apple.CoreSimulator.SimRuntime.iOS-27-1”. A página de downloads para desenvolvedores da Apple, pesquisada por “Simulator Runtime” com a sessão iniciada no mesmo dia, lista imagens de disco não mais novas do que o iOS 18.2 Simulator Runtime. ↩↩↩↩↩↩↩ -
Inspeção do autor em
/Applications/Xcode-27.1-beta.app, 19 de setembro de 2026:xcodebuild -versionimprimeXcode 27.1eBuild version 27A9269;xcrun --sdk iphoneos --show-sdk-versionexcrun --sdk iphonesimulator --show-sdk-versionimprimem os dois 27.1; oSystemVersion.plistnos dois SDKs carregaProductBuildVersion24A94403 eProductVersion27.1;xcrun swift --versionimprimeApple Swift version 6.4 (swiftlang-6.4.0.34.1 clang-2100.3.34.1)excrun ld -vimprimeld-27037.1, as mesmas strings de versão que o Xcode 27.0 (27A266a) imprime neste mesmo Mac. OXcode_27.1_beta.xiptem 2.027.292.809 bytes; opkgutil --check-signaturereporta “signed Apple Software” com uma cadeia de certificados de Software Update; odu -sksobre o app expandido reporta 3.813.336 KB, contra 3.804.188 KB do Xcode 27.0 (27A266a) expandido em/Applications/Xcode-27.app. As contagens de nomes sãogrep -cda substring emSwiftUICore.swiftmodule/arm64e-apple-ios.swiftinterface,SwiftUI.swiftmodule/arm64e-apple-ios.swiftinterfaceeUIKit.swiftmodule/arm64e-apple-ios.swiftinterfacedentro do SDK de iPhoneOS, e contagens de arquivos comgrep -rlemUIKit.framework/Headers; atributos de disponibilidade lidos desses arquivos:@available(anyAppleOS 27.1, *)acima depublic struct ArrangementView<na interface do SwiftUICore e acima daextension SwiftUICore.Viewque declarafunc toolbarVerticalBehaviorna interface do SwiftUI,API_AVAILABLE(ios(27.1), tvos(27.1), visionos(27.1))seguido deAPI_UNAVAILABLE(watchos)emUIArrangementViewController.h, nas duas declarações dereservedRegionsOfKind:emUIView.h, e no enumUIVerticalBarEdgee no traitverticalBarEdge, maisAPI_AVAILABLE(ios(27.1)) API_UNAVAILABLE(visionos) API_UNAVAILABLE(watchos, tvos)nos casosUIVerticalBarEdgeLeadingeUIVerticalBarEdgeTrailingdele;@available(anyAppleOS 27.0, *)acima defunc presentationPlacement;@available(iOS 27.0, visionOS 27.0, *)acima depublic static let topBarPinnedTrailinge nenhum atributo acima depublic static let cancellationAction. Primeira inicialização: o primeiroxcodebuild -versionsob oDEVELOPER_DIRdo beta passou de um timeout de dois minutos, e o/var/log/install.logregistra oxcodebuildenfileirando uma instalação do PackageKit às 16:01:54 de 19 de setembro, que extraiuCoreTypes.pkgeXcodeSystemResources.pkgdeXcode-27.1-beta.app/Contents/Resources/Packagese terminou às 16:03:04; oxcodebuild -checkFirstLaunchStatusem seguida devolveu 0. ↩↩↩↩↩↩↩↩↩↩↩ -
/Library/Developer/CoreSimulator/Profiles/DeviceTypes/iPhone Duo.simdevicetype, instalado pelo Xcode 27.1 beta e lido complutil -convert xml1em 19 de setembro de 2026.profile.plist:modelIdentifieriPhone19,4,productClassV68,aliasescom.apple.CoreSimulator.SimDeviceType.V68,minRuntimeVersion27.1,createByDefaultForRuntimeVersionsversionMin 27.1.capabilities.plist:ModelNumberA3447,ThinningProductTypeiPhone19,4,CompatibleDeviceFallbackiPhone18,3,DeviceCornerRadius59,HomeButtonType2,DeviceSupportsDynamicIslandtrue,DeviceSupportsEnhancedMultitaskingfalse,IsLargeFormatPhonetrue;ScreenDimensionsCapabilitymain-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 e vdpi 460, refreshRate 60, nativeOrientation 0, cornerRadiusUL 8, UR 59, LL 8, LR 59, colorspace P3) eprimary-1(displayName LCD-1, screenID 3, width 2007, height 2853, scale 3, hdpi e vdpi 460, refreshRate 60, nativeOrientation 270, os quatro raios de canto 55, colorspace sRGB), além deexternal-0(TVOut),wireless0(carPlay) eresizable(scene). Os dois PDFs deframebufferMaskIdentifierforam renderizados comqlmanagee inspecionados; os números da ficha técnica da Apple para os painéis estão no post sobre o Duo para desenvolvedores. Oxcrun simctl list devicetypessob o beta lista “iPhone Duo (com.apple.CoreSimulator.SimDeviceType.iPhone-Duo)”. ↩↩↩↩↩↩↩↩↩ -
Execuções do autor no macOS 26.6.2 (25G83), em 19 e 20 de setembro de 2026. Dispositivo:
simctl create "Duo-27.1" com.apple.CoreSimulator.SimDeviceType.iPhone-Duo com.apple.CoreSimulator.SimRuntime.iOS-27-1, iniciado comsimctl bootesimctl bootstatus -b(cerca de um minuto neste Mac); osimctl io <udid> enumeratelista duas portascom.apple.framebuffer.displayde classe de tela 0 a 1398 por 2034 e 2007 por 2853 e, em Connected Screens, “LCD-1” com nome de dispositivoprimary-1, screen ID 3, tamanho em pixels {2007, 2853}. Sonda: DuoProbe, um app SwiftUI de arquivo único compilado comxcrun swiftc -sdk <iPhoneSimulator.sdk> -target arm64-apple-ios27.1-simulator -parse-as-librarysob o Xcode 27.1 beta, instalado comsimctl install, lançado comsimctl launch --console-pty, capturas comsimctl io <udid> screenshot --mask=alpha --display=primarye--display=primary-1. Linhas de console da pose fechada: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); nenhuma linhadivision[ouocclusion[. A captura com--display=primary-1sai preta. Energia das telas:simctl io <udid> screenConfig --display=primary power offimprimiu “Screen 1 power state set to off”; osimctl launchseguinte falhou comFBSOpenApplicationServiceErrorDomaincódigo 5, “The system shell probably crashed.”;simctl shutdownebootrecuperaram o dispositivo. As rodadas de poses de 20 de setembro foram duas séries, as duas pressionando Rotate Right, Closed, Book e Open pela API de acessibilidade com a açãoAXPressnos botões que o Device Hub expõe para o dispositivo selecionado, e as duas conduzidas pela ferramenta de linha de comandosimctldo 27.2 beta, oDEVELOPER_DIRque esses scripts definem, contra o runtime, o tipo de dispositivo e o Device Hub do 27.1 beta. Na primeira série a sonda da pose anterior ainda estava rodando quando o botão seguinte era pressionado, e depois era encerrada e relançada, com o console capturado por doze segundos e capturas das duas telas; as leituras giradas acima e as linhas de transição vêm dela. Na segunda série a sonda era encerrada depois de cada captura, então não havia nenhum app em primeiro plano quando o botão seguinte era pressionado; as capturas anteriores ao relançamento vêm dela. 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)eDUOPROBE screen=(466.0, 678.0); a captura com--display=primary-1mostra a sonda, a com--display=primarysai preta. Book: as mesmas três linhas depois do relançamento; a captura da tela interna, feita depois do toque e antes do relançamento, sem nenhum app rodando, mostra a Tela de Início. Closed: as linhas da pose fechada acima. Depois de 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)euikit bounds=(637.0, 44.0), com a captura da tela interna em retrato. Nenhuma execução imprimiu uma linhadivision[ouocclusion[. Um estado fechado e girado apareceu só como linhas de transição enquanto uma pose mudava,DUOPROBE size=610x232 h=compact v=compact ... screen=(678.0, 466.0), e não entra na contagem acima. Este build saiu carimbado comsdk 27.0; veja a atualização de 2 de outubro e a nota 13. ↩↩↩↩↩↩↩ -
Apple, JSON de documentação obtido em 19 de setembro de 2026 para ArrangementView, UIArrangementViewController, reservedRegions(kind:options:layoutDirectionBehavior:), reservedRegions(kind:options:) e toolbarVerticalBehavior(_:): a disponibilidade por plataforma de cada página traz iOS 27.1 e iPadOS 27.1, marcadas como beta. Apple, Preparing your app for iPhone Duo, obtido no mesmo dia, para os nomes que o guia usa. ↩↩↩↩
-
Apple, Xcode 27.2 Beta Release Notes, obtidas em 19 de setembro de 2026, SDK, Known Issues, 187160501, citado; obtidas de novo em 26 de setembro de 2026 para o aviso da Overview, “Download Xcode 27.1 beta to get the iOS SDK and simulator support for iPhone Duo.”, citado. ↩↩↩
-
Apple, “Get ready with the latest beta releases”, notícias, 16 de setembro de 2026, “Note about iOS 27.1 and iPhone Duo”, citada. ↩
-
Apple, Designing for iPhone Duo, Human Interface Guidelines, obtidas pelo endpoint JSON da documentação em 20 de setembro 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.” (os controles da lateral incluem elementos do sistema e do app: a Dynamic Island, a barra de status, a barra de ferramentas com os botões de navegação e a barra de abas) e “A hinge in the center lets people open and close the device” (uma dobradiça no centro permite abrir e fechar o aparelho); consultadas de novo em 2 de outubro de 2026, Vertical controls: “The exception is the inner display in portrait, which has enough vertical space to keep standard horizontal bars.” (a exceção é a tela interna em retrato, que tem espaço vertical suficiente para manter as barras horizontais padrão); Anatomy: “The inner camera is behind the display and stays hidden until the camera is active.” (a câmera interna fica atrás da tela e permanece oculta até a câmera ser ativada). ↩↩↩↩
-
Apple Newsroom, Apple unveils iPhone Duo, 9 de setembro de 2026, consultado em 20 de setembro de 2026: “Set iPhone Duo down and it enters StandBy on either the outer or inner display” e “hub for widgets”, citados do parágrafo sobre o StandBy. ↩
-
Sven-Eric Molzahn, iphone-duo-probe, README do GitHub consultado em 24 de setembro de 2026 (último commit em 20 de setembro de 2026): “Two caveats before reaching for it:
reservedRegionsis empty on the first geometry evaluation and populated on a later one” e “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 setembro de 2026, citado. ↩↩↩ -
Nova rodada do autor em 2 de outubro de 2026: macOS 27.0 (26A428), Xcode 27.1 beta (27A9269), o runtime do iOS 27.1 (24A94401) e o mesmo simulador
Duo-27.1. Sonda: DuoProbe2, um único arquivo Swift, umTabViewcuja primeira aba contém umNavigationStackcom cinco itens de barra de ferramentas, as leituras descritas no texto e uma view do UIKit que registra a sua janela, a tela da cena da sua janela,UIScreen.maine o traitverticalBarEdge. Compilada duas vezes a partir desse arquivo contra o SDK do simulador 27.1, com o linker instruído sobre qual versão de SDK registrar (-Xlinker -platform_version -Xlinker ios-simulator -Xlinker 27.1 -Xlinker 27.0e... 27.1);otool -limprimiusdk 27.0esdk 27.1. Um terceiro build feito do jeito de setembro,swiftc -sdk <iPhoneSimulator27.1.sdk>comSDKROOTnão definido, imprimiuclang: warning: using sysroot for 'macOS 27.0' but targeting 'arm64-apple-ios27.1.0-simulator'e saiu carimbado comsdk 27.0; comSDKROOTexportado para o SDK do simulador, o mesmo comando carimbasdk 27.1. O app de verdade que expôs a diferença é o Kiradex (941 Apps), compilado pelo Xcode 27.1 beta:minos 27.0,sdk 27.1. Linhas de console, carimbo 27.1, fechado: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; fechado e girado:size=594x350 ... h=compact v=compact verticalEdge=trailing,window=(678.0, 466.0); aberto: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: o mesmo comdivision[0] active=trueehinge=partiallyOpen 127 deg, emainScreen=(466.0, 678.0)ao lado desceneScreen=(951.0, 669.0); aberto e 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 e girado: o mesmo comdivision[0] active=true. Os frames estão nas coordenadas da view de leitura, cuja origem fica 82 ou 134 pontos abaixo do topo da janela. Carimbo 27.0:window=(386.0, 678.0)fechado,(871.0, 669.0)aberto e em Book,(669.0, 871.0)aberto e girado,(678.0, 386.0)fechado e girado, comverticalEdge=nil,verticalBarEdge=0edivisions=0 occlusions=0em todas as linhas. PlainProbe, com a mesma view de abas, a mesma pilha de navegação e a mesma barra de ferramentas, mas sem nada do SDK 27.1, compilada pelo Xcode 27.0 (27A266a) contra o seu próprio SDK do iOS 27.0 (otool:minos 27.0,sdk 27.0):window=(386.0, 678.0)fechado e(871.0, 669.0)aberto. Em cada inicialização com o carimbo 27.1, as primeiras seis a nove avaliações registraramdivisions=0 occlusions=0antes de as regiões aparecerem, três delas antes de a view ter tamanho. A oclusão da câmera foi comparada com o PNG da moldura “Outer Closed Portrait” da Apple, cujo recorte de câmera vai de 400,3 a 436,3 pontos na horizontal e de 29,7 a 65,7 na vertical em 3x; a oclusão vai de 399 a 436 e de 30 a 67 em pontos de janela, com no máximo 1,3 ponto de diferença em cada borda. As posições dos painéis foram medidas nas capturas: o primário de x 8 a 433,7 e o secundário de 433,7 a 859 com o celular plano; o primário até 455,7, uma faixa vazia até 495,7 e o secundário até 859 em Book. A sheet da sonda mediu653x501centralizada com o celular aberto e459x501na borda inicial em Book. Com uma opção de inicialização que faz a view de arranjo da sonda preencher a área de conteúdo, a tela girada mostrou o painel primário acima do secundário, e.split.axes(.horizontal)mostrou só o painel primário. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Apple, Releases, feed RSS consultado em 11 de outubro de 2026: “Xcode 27.1 RC (27A9275)” datado Mon, 05 Oct 2026 10:00:00 PDT. Apple, App Store Connect release notes, consultadas em 11 de outubro de 2026, entrada de 5 de outubro 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, obtidas em 11 de outubro de 2026, Simulator, Known Issues: “StandBy is unavailable in the iPhone Duo Simulator runtime. (187708663)” e “Running and debugging most app extensions is unavailable in the iPhone Duo Simulator runtime. (187708767)”, como nas notas do beta. ↩↩↩↩
-
Apple, Releases, feed RSS consultado em 15 de outubro de 2026 às 17:16 no horário do Pacífico (00:16 UTC, 16 de outubro): “Xcode 27.1 (27A9275)” datado Thu, 15 Oct 2026 13:00:00 PDT, o mesmo número de build do item do RC de 5 de outubro da consulta de 11 de outubro, que o feed não traz mais. Apple, Xcode 27.1 Release Notes, obtidas pelo endpoint JSON da documentação em 15 de outubro de 2026 às 17:21 no horário do Pacífico, com o título alterado de “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.”; os dois Known Issues do iPhone Duo Simulator, 187708663 e 187708767, sem mudança. Apple, App Store Connect release notes, consultadas em 15 de outubro de 2026 às 17:20 no horário do Pacífico, entrada de 15 de outubro 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.” e “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.” O feed de notícias para desenvolvedores da Apple, consultado na mesma hora, não traz nenhum item sobre a versão. ↩↩↩↩↩
-
Apple Newsroom, “iPhone Duo arrives at Apple Store locations worldwide”, 23 de outubro de 2026, consultado em 26 de outubro: “On Friday, October 23, the highly anticipated iPhone Duo made its debut at Apple Store locations worldwide.” Apple Support, “Apple security releases”, consultada em 26 de outubro de 2026: a linha “iOS 27.1,” “This update has no published CVE entries.,” “iPhone Duo,” “23 Oct 2026,” sem link. Apple, Releases, feed RSS consultado em 26 de outubro de 2026 às 16:12 no horário do Pacífico: “iOS 27.2 (24B91020)” e “iOS 27.2 (24B119)” datados Mon, 26 Oct 2026 10:00:00 PDT; “Xcode 27.2 RC (27B48)” datado Mon, 19 Oct 2026, o item de Xcode mais recente; nenhum título de item cita uma versão iOS 27.1. O índice iOS & iPadOS Release Notes, consultado em 26 de outubro, lista apenas “iOS & iPadOS 27 Release Notes” e “iOS & iPadOS 27.2 Release Notes”; o endpoint JSON da página do 27.1 retornou 404. Apple, Xcode 27.2 RC Release Notes, consultadas em 26 de outubro de 2026 (Last-Modified Mon, 19 Oct 2026 04:56:10 GMT): Device Hub, Known Issues (187146039, 187148389, 189465196 com contorno); Mac Catalyst, Known Issues (185924957); Simulator, Resolved Issues (190155353); citadas. Apple, iOS & iPadOS 27.2 Release Notes, consultadas em 26 de outubro de 2026: UIKit, New Features (186294594). Mac do autor, 26 de outubro de 2026, macOS 27.0 (26A428), Xcode 27.1 (27A9275) em /Applications/Xcode.app:
iPhoneOS.sdk/System/Library/CoreServices/SystemVersion.pliste o plist do SDK do iPhoneSimulator informam os doisProductVersion27.1 eProductBuildVersion24A94232;xcrun simctl list runtimesimprime “iOS 27.1 (27.1 - 24A94425)” e-jlista uma única entrada emsupportedDeviceTypes, “iPhone Duo”;xcrun simctl createdecom.apple.CoreSimulator.SimDeviceType.iPhone-16-Proemcom.apple.CoreSimulator.SimRuntime.iOS-27-1falhou com “Incompatible device” (SimError 403); a sonda das margens e as saídas dela estão na nota 4 do post sobre as notas de versão do iOS 27.2. ↩↩