Узнайте, как команда Flutter работает с WWDC, бета-версиями и проактивной разработкой, чтобы обеспечить поддержку iOS в день релиза.
25 августа 2026 г. · 7 мин чтения
Как разработчик Flutter, вы по-разному взаимодействуете с каждой из шести основных платформ, поддерживаемых Flutter (не говоря уже о расширенной вселенной платформ, таких как webOS). Что касается платформы, на которой работает ваш телефон, вы можете следить за презентациями и с нетер и ждать каждого анонса. Для других платформ вы, возможно, просто скрещиваете пальцы в надежде, что ежегодные изменения не помешают вам выполнять flutter build [platform] и выпускать свое приложение. К счастью, независимо от того, кто вы, вы получаете пользу от группы разработчиков Flutter, ориентированных на платформы, чья работа заключается в том, чтобы разобраться в каждом анонсе и устаревании, чтобы вам не пришлось делать это самостоятельно.
Рабочий процесс каждой подкоманды, отвечающей за конкретную платформу, адаптирован к тому, как эта платформа развивается. В случае с Apple это обычно вращается вокруг одной недели в июне, когда взгляды технологического мира обращены на Купертино, Калифорния.
Главное событие Apple, WWDC
Каждый июнь Apple проводит мероприятие под названием WWDC, чтобы показать, как их программное обеспечение будет развиваться в ближайшем году. Обычно это отделено от анонсов оборудования, которые появляются в течение остальной части года. На WWDC главными героями являются многочисленные операционные системы Apple (iOS, macOS, watchOS и другие).
Если вы когда-либо смотрели WWDC, то знаете ее общий формат после пандемии: сначала основная презентация, затем «Platform State of the Union» и, наконец, массовый выпуск тематических видеороликов. В 2026 году WWDC включила более 145 технических сессий, помогающих сообществу разработчиков Apple понять, чего ожидать — это, безусловно, невероятный ресурс, но также и слишком много контента, чтобы просматривать его вручную.
Вы уже догадываетесь, к чему все идет. Нам даже не нужно писать следующее предложение, чтобы вы поняли, что это правда, но мы все равно это сделаем:
В 2026 году команда Flutter начала использовать ИИ для классификации каждой технической сессии.
Начиная с этого года, небольшой фрагмент кода на Dart сначала извлекал транскрипты из каждого видео. Затем Gemini ранжировала и классифицировала каждую сессию на основе следующей рубрики:
- Важность для участников Flutter (внутри и за пределами Google)
- Область влияния
- Рекомендуемые действия
Вместо того чтобы смотреть 145 (надо признать, очень качественных) технических сессий, к закату дня, когда были выпущены видео, у нас был документ с сортировкой, созданный Gemini, с предварительными данными по каждой сессии. Например, наша система распознала, что мы можем в значительной степени игнорировать сессию по SwiftData, потому что Flutter обрабатывает сохранение данных иначе. Отдельно она пометила доклад «Modernize your UIKit app» как критический [1] для команды Flutter Engine, потому что он описывал обязательные изменения в API жизненного цикла UIScene [2].
[1] Чтобы увидеть все важное для Flutter, мы действительно готовим попкорн и смотрим каждую сессию, которую Gemini помечает таким образом. [2] Подробнее об API UIScene позже!
[1] Чтобы увидеть все важное для Flutter, мы действительно готовим попкорн и смотрим каждую сессию, которую Gemini помечает таким образом. [2] Подробнее об API UIScene позже!
К рассвету следующего дня команда Flutter по iOS официально вступила в период аврала. Три месяца отделяют WWDC в июне от финальных стабильных релизов в сентябре, так что это гонка со временем, наполненная спринтами и поиском багов, чтобы обеспечить своевременное соответствие требованиям. Это большая работа, но команда Flutter стремится всегда обеспечивать поддержку в день релиза (Day 0) для каждой крупной версии iOS. Чтобы следить за нашим прогрессом в поддержке iOS 27, загляните в проект на GitHub.
Эта система кода Dart и рабочих процессов Gemini обрабатывает всю WWDC, на которую приходится подавляющее большинство изменений от Apple. Однако «подавляющее большинство» и «полный объем» — это разные вещи; и иногда критическое ломающее изменение происходит из-за чего-то столь безобидного, как примечания к выпуску небольшого патча.
Бета-релизы, о которых гудела команда Flutter
Был 2024 год, и только что вышла бета-версия iOS 18.2 для разработчиков с множеством обновлений, касающихся, среди прочего, обработки жестов и событий указателя. Спустя несколько дней мы получили тревожный отчет об ошибке: после нажатия на виджет над webview, никакие последующие жесты или клики по нижележащему webview не вызывали события onClick.
Это было не просто плохо. Нет, это был «Красный код», пожарная тревога — потому что реклама зависит от webview, и лишение разработчиков даже одного доллара дохода — это абсолютно неприемлемо.
Первопричина ошибки изначально была неясна, но по старой доброй традиции отладки технологий, один из членов команды решил попробовать «выключить и включить снова», так сказать. Мы обнаружили, что замена одного из распознавателей жестов в стеке webview при каждом клике решала проблему. Никто не был в восторге от этого решения, но это было решение, причем невидимое для конечных пользователей.
Перенесемся в август 2025 года, бета-версия iOS 26, и, казалось бы, не связанные с этим изменения столкнулись с нашим трюком с переключением распознавателя жестов, что вызвало более серьезную регрессию, при которой система блокировки касаний и жестов Flutter полностью вышла из строя. Не имея других вариантов, мы отменили предыдущий обходной путь… и сразу же столкнулись с той же ошибкой не отвечающего webview.
Расследования аномалии со стороны Flutter оказались безрезультатными, поэтому нам пришлось упростить ситуацию. Команда создала тестовый проект на чистом Swift. Без Flutter, без Dart, просто стандартное родительское представление UIKit, нативный распознаватель жестов и автономный webview — мы увидели то же самое ошибочное поведение.
Это была огромная победа! Имея чистое воспроизведение, мы отправили наш отчет об ошибке и рекомендуемое исправление в Apple, которая не теряла времени даром, выявив и исправив проблему. К версии iOS 26.4 клики по webview снова стали вести себя так, как вы ожидаете, независимо от того, использовал ли проект Flutter.
Множество исправлений с разных сторон
Дополнением к этому счастливому концу стал тот факт, что в то же время команда Flutter была занята миграцией всего нашего кода на Dart с отдельного «потока пользовательского интерфейса» обратно на основной «поток платформы» (как их называет Flutter). Это означало, что код на Dart мог синхронно общаться с кодом платформы, таким как Swift и Objective-C для iOS, что открыло двери для других модернизаций, таких как внедрение синхронной системы для проверки попаданий (hit testing). Эти рефакторинги еще больше улучшили поведение жестов на iOS за счет устранения задержек микрозадач и других источников хаоса.
В совокупности эти изменения обеспечили значительные улучшения стабильности как для приложений Flutter, работающих на iOS, так и для нативных приложений iOS.
Иногда мы даже действуем проактивно
Анонсы WWDC и отчеты об ошибках по определению являются реактивными маневрами, но иногда команда Flutter действительно опережает события. Весной 2025 года Apple выпустила iOS 18.4, которая выдавала следующее предупреждение в приложениях Flutter:
CLIENT OF UIKIT REQUIRES UPDATE: This process does not adopt UIScene lifecycle. This will become an assert in a future version.
CLIENT OF UIKIT REQUIRES UPDATE: This process does not adopt UIScene lifecycle. This will become an assert in a future version.
Фраза «в будущей версии» звучит двусмысленно, но команда Flutter не собиралась откладывать работу над вашими приложениями в долгий ящик, поэтому мы приступили к делу с опережением графика. К сожалению, подразумеваемое изменение оказалось весьма масштабным.
Чтобы понять почему, нужно вспомнить, как сильно изменился мобильный ландшафт с момента появления Flutter в 2014 году. Когда-то Flutter работал только на iOS и Android, полностью занимал экраны и имел стабильные размеры окон. Теперь, в 2026 году, Flutter работает на других платформах, может иметь несколько окон, встраиваться в приложения, не основанные на Flutter, и в любой момент менять свою геометрию, складываясь пополам. Эти изменения усложнили некогда простые вопросы, такие как «Каков размер окна?», «Находится ли приложение в фоновом режиме?», а также усложнили внедрение UIScene!
Затем, на WWDC 2025, в одном из технических докладов прозвучала крайне важная фраза:
В релизе, следующем за iOS 26, любое приложение UIKit, собранное с использованием последней версии SDK, будет обязано использовать жизненный цикл UIScene, в противном случае оно не запустится.
В релизе, следующем за iOS 26, любое приложение UIKit, собранное с использованием последней версии SDK, будет обязано использовать жизненный цикл UIScene, в противном случае оно не запустится.
Слава богу, что наш процесс приема и (тогда еще ручной) сортировки задач позволил вовремя заметить этот доклад!
Мы потратили третий квартал 2025 года на проектирование и реализацию, и в итоге уже к четвертому кварталу проводили бета-тестирование нашей реализации UIScene. Экспериментальный флаг открыл доступ к ней для смелых разработчиков Flutter, и мы выражаем огромную благодарность всем, кто решил протестировать эту функцию, так как вы помогли нам обнаружить критические пограничные случаи, проблемы с таймингами и другие особенности.
К январю 2026 года мы переключили внимание на помощь экосистеме в обновлении плагинов для iOS, поскольку их адаптация также была необходима для стабильной работы приложений. После миграции каждого плагина, который мы поддерживаем напрямую, мы начали создавать тикеты для плагинов сообщества. К счастью, авторы плагинов со всего мира очень оперативно отреагировали, и мы получили колоссальную поддержку и командный дух в процессе обновления всего необходимого!
Выпуск функции
Полная поддержка API UIScene от Apple появилась в стабильном релизе Flutter 3.41 в феврале 2026 года. И если вы никогда не слышали о UIScene и, по сути, не понимаете, о чем мы говорим — отлично! Нашим определением успеха было то, что большинство разработчиков Flutter просто запустят flutter upgrade, продолжат писать код на Dart и им никогда не придется задумываться об этом. (Некоторым продвинутым пользователям, например, тем, кто использует сценарии add-to-app, пришлось следовать краткому руководству по ручной миграции.)
Эта проактивная работа принесла огромные дивиденды, потому что Apple превратила это предупреждение в утверждение (assert) в бета-версии iOS 27, как и обещала. Но благодаря нашим ранним усилиям Flutter был готов к iOS 27 за несколько месяцев до того, как она была официально анонсирована.
Мы работаем в поте лица, чтобы вы получали удовольствие от результата
Цель команды Flutter остается прежней: разобраться с утомительными аспектами разработки приложений, чтобы вы могли сосредоточиться на приятных вещах: создании функций, повышении удовлетворенности пользователей и выпуске отличных релизов. Будь то iOS, Android или любая другая из множества платформ, на которых работают приложения Flutter, мы хотим, чтобы ваши целевые платформы оставались лишь деталью реализации на пути к созданию великолепного опыта, который радует ваших пользователей.
Для получения дополнительной информации о Flutter посмотрите видеоверсию этого поста в блоге, ознакомьтесь с нашей документацией, посетите наш YouTube-канал или найдите нас в социальных сетях. А пока мы с нетерпением ждем, что вы создадите!









