Закрепление проекта за стабильной версией

FlutterFlow обновляется постоянно: новые возможности, исправления, свежие версии Flutter и сторонних пакетов. Обратная сторона такой скорости — обновление иногда ломает то, что работало, особенно в проектах с кастомным кодом и внешними зависимостями.

На этот случай есть управление версиями: проект закрепляется за конкретным стабильным релизом и перестаёт получать обновления автоматически.

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

инфо

Пока закреплять проект за стабильной версией могут только пользователи тарифа Enterprise.

Когда это нужно

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

Как это устроено

В основе — семантическое версионирование.

Новая версия FlutterFlow выходит примерно раз в неделю, и с каждой номер версии увеличивается.

Номер состоит из трёх частей:

  • Мажорная версия — существенные изменения, заметно меняющие продукт.
  • Минорная версия — важные изменения в работе: переход на новую версию Flutter, серьёзные правки в генерации кода или структуре проекта, крупные новые возможности.
  • Патч-версия — рядовые выпуски с исправлениями и мелкими улучшениями, не затрагивающие структуру проекта и сгенерированный код.

semantic_versioning

Текущая версия FlutterFlow видна в левом верхнем углу конструктора.

version-in-builder

Стандартный релиз

Стандартный релиз выходит примерно раз в неделю (график может меняться).

Если проект не закреплён — а это поведение по умолчанию, — он всегда работает на последнем стандартном релизе.

Стабильный релиз

Стабильный релиз выпускается раз в месяц, если выполнено хотя бы одно условие:

  • заметно изменилась генерация кода;
  • обновились версия Flutter или зависимости в pubspec сгенерированных проектов;
  • изменилась структура проекта — например, появился новый тип виджета.

У каждого стабильного релиза свой номер Major.Minor. Закрепить за ним можно те проекты, которые не редактировались в более новой версии Major.Minor.

заметка

Каждый стабильный релиз поддерживается 6 месяцев, после чего перейти на следующий придётся в любом случае.

Как закрепить версию

Откройте Settings and Integrations > General > App Details > Version Pinning и выберите стабильный релиз.

pin-version

Изменение закреплённой версии

  • Перейти на более новый стабильный релиз. Как только он выходит, он появляется в том же списке. Чем больше номер, тем новее релиз: 5.1 новее 5.0.
  • Открепить проект — выбрать Latest Version, и проект вернётся на последний стандартный релиз.
  • Подписаться на следующий стабильный. Бывает, что вашей стандартной версии не соответствует ни один стабильный релиз: вы на 5.0.1, а стабильной станет 5.0.4. Тогда выберите Next Stable Version — проект закрепится за ней, как только она выйдет.
внимание
Открепить обратно не получится

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

Где работать с закреплённой версией

Проект, закреплённый за версией, редактируется только в этой версии FlutterFlow.

  • В браузере: при открытии проекта с панели управления вас автоматически перенаправят на адрес нужной версии.
  • В десктопном приложении: понадобится установить отдельную сборку под этот стабильный релиз. Такие сборки не обновляются сами — при переходе на новую версию установите новую.

Если приложение сложное, а кастомный код завязан на конкретные версии пакетов, придерживайтесь такого порядка.

  1. Закрепите проект за доступным стабильным релизом, если он есть.
  2. Когда выйдет новый стабильный релиз, решите, когда переходить: удобнее делать это не в разгар работы над функциональностью, а сначала посмотреть, что в нём появилось.
  3. Готовы обновляться — зафиксируйте все изменения в главной ветке. Создайте от неё новую ветку, смените закреплённую версию и проверьте всё, что может сломаться. Правки вносите в этой же ветке.
  4. Запустите приложение на всех платформах, которые поддерживаете, — на симуляторе, эмуляторе или живом устройстве. Подробности — в разделе о локальном запуске.
  5. Если всё в порядке, влейте ветку в главную. Для слияния обе ветки должны быть закреплены за одной и той же версией FlutterFlow. Если что-то работает не так, оставьте ветку до тех пор, пока не разберётесь с зависимостями и кастомным кодом.
совет

Как обновлять зависимости, показано в видео.

Версии и библиотеки

У библиотек свои версии. Как и проект, библиотека работает в версиях FlutterFlow не ниже той, в которой её редактировали последний раз.

Чтобы всё сходилось, закрепляйте библиотеки закреплённого проекта за той же версией FlutterFlow, что и сам проект, или за более ранней.

Библиотечный проект тоже можно закрепить — тогда все его версии останутся на выбранном релизе, пока вы не решите иначе.

инфо
  • В закреплённый проект нельзя добавить библиотеку с версией current или версию, которую редактировали в более позднем релизе FlutterFlow.

  • Проект нельзя закрепить, если в нём есть библиотека с версией current или версия, отредактированная в более позднем релизе.

совет

Версия подключаемой библиотеки должна быть не выше версии проекта, куда её подключают, иначе будет ошибка.

Частые вопросы

Можно ли редактировать проект в разных версиях FlutterFlow?

Нет. Незакреплённый проект всегда открывается в последнем релизе. Закреплённый — только в той версии, за которой закреплён.

Как часто выходят стабильные версии?

Примерно раз в месяц.

Где посмотреть, что вошло в стабильную версию?

Заметки о выпуске готовятся к показу прямо в продукте — тогда состав каждой стабильной версии будет виден на месте.

Что делать, если в моей версии обнаружилась ошибка?

Для критических ошибок выпускаются исправления и для прежних версий. Но часть исправлений требует обновления самого Flutter или зависимостей, а это для старых версий возможно не всегда. В этом и состоит риск того, чтобы оставаться на старом релизе.

Можно ли закрепить разные версии за разными ветками?

Да. Рекомендуемый порядок такой: создать ветку, обновить в ней версию, внести нужные правки и убедиться, что всё работает, — и только потом вливать её в главную.

Для слияния обе ветки должны быть закреплены за одной и той же версией FlutterFlow.

Что делать, если подходящей стабильной версии нет?

Если проект создавался и редактировался на стандартном релизе, которому не соответствует ни один стабильный, в списке может не быть ни одного варианта. Тогда выберите следующий стабильный релиз — проект закрепится за ним сразу, как только он выйдет.

Как быть, если проектов и библиотек несколько?

Закрепляйте их за одной и той же версией и обновляйте примерно одновременно. Так проще держать совместимость между проектами и библиотеками, которые зависят друг от друга, и работать в одной десктопной сборке FlutterFlow.

перевод официальной документации FlutterFlow

обновлено

ESC