Telegram для iOS подготовился к складному iPhone Duo, который Apple начала продавать 23 октября. Основная часть работы лежит в открытом репозитории Telegram-iOS одним коммитом c8bb114b от 9 октября: 12 889 добавленных строк и 2 940 удалённых. На Duo кнопка «Назад» переезжает в боковую полосу у края экрана, панель вкладок становится вертикальной, а истории на большом внутреннем экране открываются карточкой, как на iPad. Последние правки под Duo попали в код 22 октября, меньше чем за час до того, как номер версии сменился на 13.1.1, и вечером того же дня 13.1.1 вышла в App Store. Касается это владельцев Duo: на остальных iPhone и iPad раскладка остаётся прежней, кроме нескольких попутных исправлений.
Что меняется на экране Duo
Главное правило записано в руководстве, которое лежит в репозитории рядом с кодом: кнопка «Назад» или «Закрыть» ставится в боковую полосу, если она есть. Стандартные экраны делают это сами, а экраны со своей шапкой берут место кнопки у общей разметки.
- Чат. Шапка делится на верхнюю строку и боковую колонку. В колонке стоят кнопка «Назад» и аватар собеседника, поле ввода тянется до края полосы, если она свободна.
- Список чатов и профиль. Кнопки уходят в полосу, заголовок центрируется по оставшейся части экрана.
- Панель вкладок. Вместо горизонтальной полосы внизу — вертикальная капсула в боковой полосе, прижатая к низу. На внутреннем экране, где слева список, а справа чат, подписей под значками нет.
- Кнопки внизу экрана («Продолжить», «Отправить», панели выбора) растягиваются на всю ширину, вместе с полосой. Исключения: маленькие кнопки по центру (кнопка записи, «Готово» на превью камеры), высокие листы с прокруткой вроде «Поделиться» и поле ввода, которое растёт вверх. Они остаются в основной части экрана: маленькая кнопка иначе съехала бы с оси содержимого на 42 точки, кнопки в углах высокого листа доставали бы до углового блока, а поле ввода занимает ширину своих строк.
- Истории на развёрнутом экране показываются карточкой 9:16 по центру с размытым фоном, как на iPad. Без этой правки история растягивалась на весь экран и обрезалась.
- «Готово» на экранах с переключателем «Изменить/Готово» остаётся в верхней строке. Раньше оно перепрыгивало из строки в круг боковой колонки.
Почему у Duo нужна своя раскладка
У обычного iPhone система резервирует края экрана: сверху вырез с часами, снизу полоску жеста «Домой». У Duo резерв — это прямоугольный блок в одном углу, где стоят часы, значки связи и камера. iOS расширяет этот блок до отступа на всю высоту края, и приложение, которое просто соблюдает системные отступы, теряет вдоль края полосу шириной 84 точки. Telegram продолжает соблюдать системные отступы, а размеры угловых блоков берёт из своей таблицы по каждому положению устройства. Живые значения системы после поворота и складывания до 0,6 секунды переходные, поэтому их не читают.
| Положение | Окно, точек | Угловой блок | Что остаётся сбоку |
|---|---|---|---|
| Сложен, вертикально | 466 × 678 | справа сверху, 84 × 170 | полоса справа под блоком |
| Сложен, повёрнут влево | 678 × 466 | справа снизу, 84 × 82 | полоса справа над блоком |
| Сложен, повёрнут вправо | 678 × 466 | слева сверху, 84 × 84 | полоса слева под блоком |
| Разложен, вертикально | 669 × 951 | справа сверху, 134 × 82 | полосы нет, сверху «островок» |
| Разложен, горизонтально | 951 × 669 | справа сверху, 84 × 120 | полоса справа под блоком |
Отсюда главная ловушка, которую руководство называет первой: у сложенного Duo боковой отступ есть в вертикальной ориентации, а код любого приложения для iPhone обычно исходит из того, что в портрете боковых отступов не бывает.
Ещё три особенности устройства, под которые пришлось менять код:
UIScreen.mainна Duo всегда возвращает внешний экран, даже когда телефон разложен. Подсветка при съёмке фронтальной камерой и видеосообщений, яркость при показе QR-кода и автоматический ночной режим меняли яркость не того экрана.- Скругления углов внешнего экрана разные: 8 точек со стороны сгиба и 59 снаружи. У внутреннего экрана все углы по 55 точек. Листы, переходы между экранами и сдвиг списка чатов при открытии камеры историй теперь скругляются по каждому углу отдельно.
- Разложенный горизонтально Duo система считает экраном «обычной ширины», как у iPad, хотя это телефон. Проверки «это iPad?» по ширине экрана ломались, а поворот экрана из приложения разложенный Duo не выполняет вовсе.
Как выглядели ошибки раскладки
Руководство перечисляет типовые ошибки, которые на других устройствах незаметны, потому что отступы слева и справа там равны. Отступ левого края подставлялся и справа. Блок шириной с основную часть экрана центрировался по всему экрану и съезжал на 42 точки к полосе. Кнопка у правого края отсчитывалась от левого отступа. Превью камеры 9:16 оказывалось выше экрана: на сложенном Duo на 150 точек. Нижние кнопки, отсчитанные от края экрана по старым константам для iPhone с кнопкой «Домой», вставали на полоску жеста. Каждая правка обязана сводиться к прежнему выражению, когда угловых блоков нет и отступы равны, поэтому остальные устройства байт в байт рисуют то же, что раньше.
Как проверяли 298 экранов
Ход работы записан в отчёте о проверке экранов. Ветка feature/reserved-corners велась с 25 сентября по 9 октября, а сама проверка заняла 8 и 9 октября. Проверено 298 экранов, то есть все контроллеры экранов приложения, кроме двух тестовых заглушек. Их читали агенты, которым запрещено менять код, и каждый экран получил строку в таблице проверки: находку или причину, почему правка не нужна. Исправления вносились каждое только в своих файлах, а три проверяющих сверяли каждый дифф с правилами. Основной коммит и почти все последующие подписаны соавтором Claude Opus 5.5. Всего, по сообщению коммита, исправлено около 65 находок.
Попутно нашлись и ошибки серьёзнее неровного отступа:
- экран «Темы чатов» закрывался с ошибкой при прокрутке, потому что элементы списка создавались не в главном потоке;
- кнопка в настройках прямой трансляции на Duo была шире свободного места рядом с полосой и уходила за край экрана на 12 точек;
- кнопка авторизации Telegram Passport в сложенном горизонтальном положении оказывалась под угловым блоком.
Проверки на экране шли в симуляторе Duo с iOS 27.1. Сложить и разложить симулятор из командной строки нельзя, поэтому большая часть правок для развёрнутого горизонтального положения проверена только сборкой и чтением кода. Это прямо записано в разделе отчёта о пробелах. Туда же отнесены экраны, которых не было на тестовом аккаунте: кнопки оформления Premium (у аккаунта подписка уже есть), импорт чатов и живые звонки.
Что доделали к выходу устройства
После основного коммита правки под Duo продолжились. 18 октября соседние истории перестали выглядывать в боковую полосу: на обычном телефоне они стоят за краем экрана, а на Duo кусок чужой истории всё время был виден под часами. В тот же день поправили переключатель вкладок кошелька и анимацию аватара в боковой колонке. 22 октября камера историй и редактор подняли кнопки над полоской жеста «Домой», а поле поиска в списке чатов на разложенном горизонтальном экране перестало уходить наполовину за верхний край.
В файле versions.json номер 13.1.1 появился 22 октября в 12:11 UTC, через девять минут после последней правки под Duo. В App Store версия 13.1.1 вышла в тот же день в 18:45 UTC, с описанием «Bug fixes, minor improvements, and more». В списке устройств приложения iPhone Duo значится, но этот список говорит только о том, что приложение устанавливается, а не о том, что оно переложено под экран. Сборка, которую получают владельцы Duo, совпадает с открытым кодом по номеру и по дате, а сам бинарник из App Store с кодом не сверялся.




