← К техническим практикам

Apple

Сломает ли iPhone Duo старые приложения? У каких чаще чёрные полосы, сбой вёрстки и промахи по нажатию

Около 3 мин чтения

Рука держит iPhone с чёлкой, на экране сетка фотографий; рядом MacBook с похожей сеткой в окне редактора
Сетка на телефоне и сетка на Mac — разные размеры одного интерфейса. На Duo окно приложения может не занять весь внутренний дисплей.

Откройте новый iPhone Duo — привычные приложения почти наверняка запустятся. Приложение не падает только потому, что его не перерисовали под складной экран. Если бинарник собран с SDK iOS 26 или более ранним, на раскрытом внутреннем дисплее он остаётся в знакомом окне размером с телефон, по центру. Остальная площадь пустая. Эта пустая полоса и есть чёрная полоса, о которой спрашивают.

Растянутая вёрстка и промахи по кнопкам — другая поломка. Она появляется после пересборки с SDK iOS 27 или 27.1, когда система начинает менять размер окна вместе со сгибом. Старая вёрстка нарисована под один фиксированный экран. Уберите окно совместимости — и эти допущения становятся видны.

Короткий ответ

Старые приложения запускаются. Чёрные полосы — это окно совместимости для сборок на SDK iOS 26 и раньше, а не вылет. Сбои вёрстки и попаданий появляются, когда окно уже выросло, а код всё ещё считает, что размер один, ориентация одна, и устройство — либо iPhone, либо iPad.

Факты ниже сверены 15 октября 2026 года. Размеры экранов и даты продаж — со страницы iPhone Duo на сайте Apple. Три режима окна — из Prepare your app for iPhone Duo. Сопутствующий Tech Talk разбирает главный экран, ориентацию и безопасные зоны. Этот текст не открывает известные приложения App Store на устройстве. Он называет классы кода, а не бренды, которые «уже сломались».

Старые приложения ещё открываются на iPhone Duo?

Да. Страница подготовки прямо говорит: запускается каждое приложение. Меняется то, следует ли окно за внутренним дисплеем, внешним дисплеем и Split View.

iPhone Duo — первый складной iPhone Apple. Внутренний дисплей — 7,6 дюйма, на 50 процентов больше, чем у iPhone 18 Pro Max. В сложенном виде внешний дисплей — 5,4 дюйма, и его площадь больше 90 процентов площади экрана iPhone 18 Pro. Соотношение сторон совпадает. Предзаказ начинается 16 октября 2026 года в 5:00 по тихоокеанскому времени, продажи — 23 октября. Эти цифры со страницы продукта, а не из обсуждения слухов.

Система выбирает окно по SDK, которым скомпилирован этот бинарник. Имя приложения не важно, как и то, насколько аккуратно оно выглядит на iPhone 18 Pro.

3
Режимы окна по SDK сборки
7,6″
Внутренний дисплей, страница продукта
23.10
Старт продаж в США, 2026
SDK сборки Внутренний дисплей, раскрыт Что ещё написано в документации
iOS 26 или раньше По центру, вокруг пусто В сложенном виде содержимое слева от строки состояния и камеры
iOS 27 Большая часть внутреннего дисплея, справа строка состояния всё ещё свободна При раскрытии окно расширяется, при сложении возвращается на внешний дисплей
iOS 27.1 и новее Весь внутренний дисплей Панели инструментов и вкладок стоят вертикально под строкой состояния; это надо проверить до выпуска

Первые два столбца следуют странице подготовки. Фраза про сложенный экран — содержимое слева от строки состояния и камеры — написана для SDK iOS 26 и раньше. Для iOS 27 и новее задокументировано другое: на внутреннем дисплее окно расширяется, при сложении возвращается на внешний. Не рисуйте одну и ту же чёрную рамку вокруг всех трёх случаев внешнего дисплея.

Три схемы внутреннего дисплея: старый SDK по центру с пустыми полями, iOS 27 с зазором справа, iOS 27.1 на всю площадь с вертикальной панелью
Схема только про внутренний дисплей. Сложенный внешний дисплей — отдельный случай: содержимое уступает место строке состояния и камере.

Кто на самом деле оставляет чёрные полосы?

Полосы — не украшение, которое нарисовало приложение. Для бинарника на SDK iOS 26 или раньше система не растягивает его на внутренний дисплей 7,6 дюйма и ставит в размер, который этот бинарник уже понимает. Оставшаяся область пустая. Кнопки внутри окна по-прежнему нажимаются.

Сложить телефон — другая картинка. Для этого старого SDK страница подготовки говорит: внешний дисплей показывает содержимое слева от строки состояния и камеры. Внешний дисплей шире и ниже, а страница продукта говорит, что основные элементы управления уходят на бок, чтобы у содержимого осталось больше высоты. Внутренняя рамка не означает, что в сложенном виде телефон чёрный со всех четырёх сторон.

Внешний дисплей — не уменьшенная копия внутренней рамки

Фраза, которая уезжает слишком далеко: «крышка — обычный iPhone, значит старые приложения там от края до края». Apple пишет, что содержимое отступает от строки состояния и камеры. Заполняет ли оно внешний дисплей и стоят ли элементы сбоку — смотрите примечание к этому SDK. Не переносите внутреннее окно совместимости на крышку.

Полосы остаются, пока разработчик не сменит SDK. iOS 27 заметно уменьшает пустую область. iOS 27.1 — сборка на весь экран, и стандартные панели могут сдвинуться. Перекомпиляция без прохода по вёрстке может убрать полосы и открыть ошибки следующего раздела. Немногие команды успеют закончить прогон 27.1 и отправку в магазин до 23 октября, поэтому окна совместимости в первый день будут обычным делом. Это календарь, а не список сломанных карточек в магазине.

У каких приложений чёрные полосы видны чаще всего?

Проверка одна: собран ли этот бинарник с SDK iOS 26 или раньше? Игра это или известное имя — правило не меняет. На открытом внутреннем дисплее каждый бинарник этой группы сидит в центральном окне.

Сначала заметны редко обновляемые инструменты: парковка, доступ к двери, внутреннее согласование, отраслевое приложение, которое никто не пересобрал. Человек видит чёрные полосы. Списки и кнопки внутри окна обычно ещё отвечают.

Игры надо смотреть отдельно. Human Interface Guidelines просят заполнять каждую позу и менять соотношение сторон, а не оставлять letterbox; если поле неизбежно, в нём должна быть графика. Игра, которая оставляет чёрные поля уже после сборки на новом SDK, выбирает эту рамку сама. Это не системное окно совместимости. Полосы похожи, а слой ответственности разный. Этот текст не относит конкретную игру к одному из слоёв. Для этого нужен SDK сборки в магазине.

У каких приложений чаще ломается вёрстка?

Пока приложение внутри окна совместимости, вёрстка почти не ломается. Размер окна не менялся, телефонная раскладка всё ещё совпадает. Поломка начинается, когда сгиб, поворот или Split View меняют окно, а код держит старый размер.

Страница подготовки называет приёмы, которые растягивают, обрезают или прячут элементы:

  • Считать весь экран своим окном. UIScreen.main.bounds, размер, прочитанный один раз при запуске, и UIWindow(frame: UIScreen.main.bounds). Сгиб меняет размер посреди сеанса, число со старта устаревает. Tech Talk также говорит, что главный экран на устройстве с двумя дисплеями неоднозначен и в будущем выпуске будет объявлен устаревшим.
  • Выбирать вёрстку по ориентации. Внутренний дисплей не соблюдает заявленные ориентации. Ориентация UIDevice или interfaceOrientation не совпадёт с фактической шириной и высотой окна.
  • Переключать вёрстку вопросом «это iPhone?». userInterfaceIdiom == .phone или .pad, и любая ветка, где regular width означает iPad. Приложение iPhone на внутреннем дисплее может быть regular width.
  • Таблица известных высот. Проверки вроде bounds.height == 844 не совпадают с окном Duo.
  • Полноэкранные герои и видео с обрезкой. scaleAspectFill срезает сюжет на более широком кадре.

Пример, который совпадает с документацией. Заметки, собранные с SDK iOS 26, открываются по центру, вокруг пусто, кнопки на своих местах, записи сохраняются. Пересоберите с SDK iOS 27.1 — окно заполняет внутренний дисплей, система ставит панель вкладок вертикально под строкой состояния. Если Y нижней кнопки взят из высоты экрана при запуске, кнопка попадает на панель или за пределы содержимого. Ввод не менялся. Изменилось окно.

Regular width — это не iPad

Самая частая путаница — включать боковую панель «только для iPad», потому что ширина regular. Раньше эта ветка выполнялась только на iPad. Внутренний дисплей iPhone Duo тоже может сообщить regular width, и панель появится на этом телефоне.

Какие приложения промахиваются по нажатию или переворачивают превью камеры?

Ошибки взаимодействия — следующий слой ошибки вёрстки. Элемент на месте, но палец попадает в другое, или превью смотрит не туда.

Игры и видео с заблокированной ориентацией

Внутренний дисплей игнорирует заявленные ориентации. Ландшафтная игра с кнопками, приваренными к одному краю, после сгиба может загнать виртуальный стик в безопасную зону или оставить letterbox старого соотношения. Рекомендация — менять соотношение сторон и заполнять экран. Если поле необходимо, в нём должна быть графика, а не голая чёрная полоса.

Камера и звонки, которые сами выбирают объектив

Сгиб меняет, куда объектив смотрит относительно человека с телефоном. Приложение, которое само выбирает «переднюю» или «заднюю» камеру, должно переключать объективы при открытии и закрытии. Tech Talk про камеру указывает на AVCaptureDeviceDirectionCoordinator: координатор внешнего дисплея сообщает задние камеры как смотрящие вперёд, координатор внутреннего — как смотрящие назад. Без него превью может отзеркалиться неверно или оставить прежний объектив после раскрытия. Это ошибка взаимодействия, а не чёрная полоса.

Свои нижние панели и зоны нажатия

Системные панели навигации, инструментов и вкладок лежат вне безопасной зоны и сами обходят строку состояния и камеру. Нарисованная вручную нижняя панель сама не становится вертикальной. На внешнем дисплее и на внутреннем в ландшафте стандартные элементы стоят сбоку. Только внутренний дисплей в портрете достаточно высок, чтобы оставить горизонтальные панели. Безопасные зоны часто несимметричны, а в Split View вертикальная кнопка может оказаться слева. Проверка попадания из допущения «панель всегда снизу, стороны симметричны» промахнётся.

Это тот же режим совместимости iPhone, что на iPad?

Нет. Увеличенное окно iPhone на iPad отвечает на вопрос «у этого бинарника нет интерфейса iPad». Три окна Duo отвечают на вопрос «каким SDK скомпилирован этот бинарник». Оба правила могут жить в одном проекте. Они не заменяют друг друга.

И ломаются они в разное время. Режим iPad не меняет размер потому, что кто-то сложил устройство посреди сеанса. Duo меняет. Измерения один раз в viewIsAppearing недостаточно. Читайте размер снова в layoutSubviews, viewDidLayoutSubviews или в колбэке перед изменением размера. В SwiftUI — GeometryReader или onGeometryChange. Масштаб берите из traitCollection.displayScale, не из UIScreen.main.scale. Окно создавайте через UIWindow(windowScene:) и не храните UIScreen.

Если команда уже отделила регрессию релиза от более короткой бета-дорожки до осенних телефонов, тот план отвечал, где крутится регрессия. Duo добавляет правило: один и тот же сценарий надо смотреть в сложенном виде, раскрытым, повёрнутым и в Split View, а не только скриншотом одного размера симулятора. Разделение стабильной дорожки и тестовой — смысл текста нужно ли менять план тестирования iPhone 18 перед осенней презентацией. Положите Duo на тестовую дорожку. Не останавливайте регрессию релиза. Симулятору нужен Mac с Xcode 27.1. Как отделить эту машину от повседневной работы, разобрано в материале как собрать тестовую среду macOS 27. Правила окна не зависят от того, арендуете ли вы Mac.

На какой вопрос этот текст не ответит за вас?

Показывает ли конкретное приложение чёрные полосы сегодня, зависит от SDK сборки в магазине или от открытия этой сборки в симуляторе iPhone Duo в Xcode 27.1. Страница подготовки называет ещё изменяемый по размеру симулятор в Device Hub и растягивание окна iPhone Mirroring до крайних размеров в macOS 27. Там сказано, что полный нативный опыт смотрят в симуляторе Duo. Этот текст не делал этого ни для одного выпущенного приложения.

Закрывает ли складка пиксель, нарочные ли полосы у игры и перекрывает ли боковой элемент свой жест — это проверяют в соответствующей позе. Документация говорит, какой слой подозревать. Она не говорит, исправлен ли этот слой в вашем бинарнике.

Насколько же сломаны старые приложения?

Приложения на SDK iOS 26 и раньше запускаются. На раскрытом дисплее типичный результат — чёрные полосы, а не вылет. В сложенном виде содержимое уступает строке состояния и камере. Не описывайте это как ту же рамку, что на внутреннем дисплее.

Чёрные полосы раньше всего видны у бинарников, которые не сменили SDK, особенно у редко выпускаемых инструментов. Вёрстка ломается раньше всего у приложений, которые перешли на iOS 27 или 27.1, но всё ещё считают размер от синглтона экрана, фиксированной высоты, ориентации или ветки «iPhone / iPad». Промахи по нажатию раньше всего у игр с заблокированной ориентацией, камер, которые сами ведут направление объектива, и у своих нижних панелей.

Стандартные панели навигации и вкладок следуют за системой. Координаты, которые вы считаете сами, — нет. Чтобы узнать про одно приложение, откройте этот бинарник в симуляторе Duo или на телефоне. То, что на iPhone 18 Pro всё в порядке, не значит, что после сгиба тоже будет в порядке.

Продолжить на сайте?

Текст останавливается на правилах окна и на том, какой код получает чёрные полосы, сломанную вёрстку или промах по нажатию. Связанные заметки о тестах — в блоге. Обзор продукта — на главной.