Posts

Compatibilidad hacia atrás en iPhone Duo: el SDK decide cuánto ocupa una app

Arturo Rivas Arias

Que una aplicación pueda ejecutarse en un dispositivo nuevo no significa que esté preparada para aprovecharlo. El iPhone Duo es un buen ejemplo: las versiones que ya están publicadas continúan funcionando sin que sus desarrolladores tengan que recompilarlas, pero iOS modifica el espacio que les concede según el SDK con el que se construyeron.

Una aplicación antigua aparece dentro de una superficie protegida, otra compilada con el SDK de iOS 27 utiliza una parte mayor de la pantalla interior y una construida con iOS 27.1 puede adoptar la experiencia completa. La compatibilidad está garantizada; la adaptación, no.

Tres generaciones de una misma aplicación

Apple utiliza el SDK como una señal de las reglas que la aplicación conoce. No examina si cada pantalla está bien diseñada para el nuevo dispositivo, sino que parte de una suposición prudente: un binario creado antes de existir el iPhone Duo no puede saber cómo comportarse en su geometría.

SDK utilizado para compilarComportamiento en la pantalla interior
Anterior a iOS 27Mantiene una disposición estrecha y deja espacio negro alrededor
iOS 27Se extiende por una superficie mayor y puede mostrar más contenido, aunque las barras permanecen en la parte superior
iOS 27.1El fondo alcanza los bordes y las barras estándar pueden organizar sus botones verticalmente

El primer modo prioriza que todo siga siendo utilizable. Al limitar la aplicación a unas proporciones conocidas, el sistema evita exponer de golpe diseños con posiciones absolutas, anchos fijos o controles que podrían quedar bajo una cámara o una barra.

El SDK de iOS 27 representa un paso intermedio. La interfaz puede extenderse hacia la zona situada a la izquierda de los indicadores de estado y dispone de anchura suficiente para presentar dos columnas, pero todavía no incorpora la nueva distribución vertical de los controles.

Con iOS 27.1 llega la integración completa. El fondo puede ocupar la pantalla de borde a borde y los elementos proporcionados por las barras de navegación y herramientas del sistema se recolocan en vertical, debajo de los indicadores de estado. Esta última parte es importante: recompilar no transforma automáticamente una barra personalizada en una barra adaptativa.

El SDK y la versión mínima no son lo mismo

Compilar con el SDK de iOS 27.1 no obliga a elevar el destino mínimo de despliegue a esa versión. Una aplicación puede construirse con Xcode 27.1, conservar por ejemplo iOS 17 como versión mínima y beneficiarse del nuevo comportamiento cuando se ejecute en un iPhone Duo.

El SDK determina las APIs disponibles durante la compilación y permite al sistema reconocer que el binario conoce las reglas actuales. El destino mínimo, en cambio, establece el sistema más antiguo en el que puede instalarse. Las APIs introducidas en iOS 27.1 continúan necesitando comprobaciones de disponibilidad si la aplicación mantiene compatibilidad con versiones anteriores, pero adoptar el nuevo SDK ya activa por sí solo el nivel moderno de presentación.

Esta separación permite actualizar una aplicación de forma gradual. Primero puede recompilarse y comprobarse su interfaz con las APIs existentes; después pueden incorporarse capacidades exclusivas de iOS 27.1 allí donde realmente aporten valor.

Recompilar amplía el espacio, no corrige el diseño

El modo protegido de las aplicaciones antiguas también oculta problemas. En cuanto una nueva compilación recibe más superficie, pueden aparecer líneas demasiado largas, controles alejados entre sí o imágenes que crecen sin límite. Por eso el cambio de SDK debe ir acompañado de una revisión de las decisiones que dependen del tamaño.

Entre los patrones que conviene buscar están los anchos codificados como constantes, las decisiones tomadas a partir de la orientación, el uso de UIScreen.main, la suposición de que los márgenes izquierdo y derecho siempre coinciden y las barras creadas completamente a mano.

Apple recomienda responder al espacio disponible mediante size classes, geometría y traits, sin comprobar el modelo concreto del dispositivo. La pantalla exterior se comporta como la de otros iPhone, mientras que la interior utiliza una clase de tamaño regular en ambas dimensiones.

Una cuadrícula de actividades, por ejemplo, puede pasar de una a dos columnas sin conocer nada sobre el iPhone Duo:

import SwiftUI

struct ActivitiesView: View {
    @Environment(\.horizontalSizeClass) private var horizontalSizeClass
    let activities: [Activity]

    private var columns: [GridItem] {
        let count = horizontalSizeClass == .regular ? 2 : 1
        return Array(
            repeating: GridItem(.flexible(), spacing: 16),
            count: count
        )
    }

    var body: some View {
        ScrollView {
            LazyVGrid(columns: columns, spacing: 16) {
                ForEach(activities) { activity in
                    ActivityCard(activity: activity)
                }
            }
            .padding()
        }
        .navigationTitle("Actividades")
    }
}

La misma solución funciona en un iPad, en Split View o en cualquier contexto futuro que ofrezca una anchura semejante. Vincular el diseño al espacio expresa mejor la necesidad de la interfaz y evita acumular excepciones por dispositivo.

Barras estándar y áreas seguras

Los contenedores del sistema ofrecen una ventaja especial durante esta transición. NavigationSplitView, UISplitViewController, TabView y UITabBarController pueden contraer, superponer o distribuir su contenido según la posición del dispositivo. Las hojas, los menús y las alertas también reciben el comportamiento apropiado sin necesitar una implementación exclusiva.

Las áreas seguras siguen siendo la referencia para el contenido interactivo, pero en el iPhone Duo pueden ser asimétricas. No es correcto calcular el ancho disponible restando dos veces el margen de un único lado. Los fondos sí pueden extenderse con ignoresSafeArea(), mientras que textos, botones y otros controles deben respetar cada margen real.

La pantalla interior tampoco garantiza las orientaciones declaradas por la aplicación. Una decisión de diseño basada en “vertical” u “horizontal” puede dejar de describir el espacio que existe de verdad. Las clases de tamaño y la geometría de la escena resultan más fiables.

Probar la transición, no solo dos capturas

Xcode 27.1 incorpora el simulador del iPhone Duo en Device Hub y permite abrir, cerrar, girar y plegar el dispositivo. Las pruebas deberían comprobar también el cambio entre posiciones mientras una pantalla permanece activa: selección, desplazamiento, presentación de hojas y estado de navegación deben sobrevivir al redimensionado.

También conviene ejecutar la aplicación en Split View, aumentar el tamaño del texto y recorrer las pantallas con barras o fondos personalizados. La herramienta App Resizability de Xcode ayuda a localizar referencias a la pantalla principal y otros patrones que dificultan el redimensionado.

Compatibilidad progresiva como estrategia

Apple ha evitado que la llegada de una geometría nueva convierta las aplicaciones existentes en software incompatible. Cada binario conserva un entorno acorde con las reglas que conocía al compilarse y obtiene más superficie a medida que adopta SDKs recientes.

El resultado es una transición progresiva, pero no gratuita. El SDK de iOS 27.1 abre toda la pantalla del iPhone Duo; una interfaz basada en contenedores estándar, áreas seguras y medidas flexibles es la que realmente sabe qué hacer con ella.