Реализация Shorebird для обновлений Flutter-приложения
Flutter не имеет аналога React Native CodePush — до появления Shorebird. Dart-код компилируется в нативные инструкции, которые нельзя просто заменить JS-бандлом. Shorebird решил это через собственный Dart runtime с поддержкой патчей: изменения в Dart-коде упаковываются в компактный diff и загружаются на устройство без прохождения Store Review.
Принцип работы
Shorebird встраивает модифицированный Dart VM в приложение. При запуске VM проверяет наличие патча на серверах Shorebird. Если есть — загружает и применяет. Патч содержит только изменённые Dart-объекты, не весь бандл. Это принципиально отличается от CodePush: здесь меняется скомпилированный Dart-код, а не интерпретируемый JS.
Что можно обновить через Shorebird:
- Весь Dart/Flutter код
- Dart-зависимости (pub packages), если они pure Dart
Что нельзя:
- Нативные плагины (platform channels с Kotlin/Swift кодом)
- Assets (изображения, шрифты) — пока не поддерживается
- Изменения в
AndroidManifest.xml/Info.plist
Установка и первый релиз
# Установка CLI
curl --proto '=https' --tlsv1.2 https://raw.githubusercontent.com/shorebirdtech/shorebird/main/install.sh -sSf | bash
# Инициализация в проекте
shorebird init
# Первый релиз (полная сборка + загрузка в Shorebird)
shorebird release android
shorebird release ios
После shorebird init в проекте появляется shorebird.yaml с app_id. Этот файл коммитится в репозиторий.
Релиз через Shorebird — это полноценная сборка приложения. Загружать в Play Store / App Store нужно именно этот артефакт — он содержит Shorebird runtime.
Создание патча
# Патч для Android
shorebird patch android --release-version 1.2.3+42
# Патч для iOS
shorebird patch ios --release-version 1.2.3+42
--release-version — версия, к которой применяется патч. Пользователи с версией 1.2.3+42 получат патч автоматически при следующем запуске.
CI/CD интеграция
# .github/workflows/shorebird-patch.yml
name: Shorebird Patch
on:
push:
branches: [hotfix/*]
jobs:
patch:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: subosito/flutter-action@v2
with:
flutter-version: '3.x'
- uses: shorebirdtech/setup-shorebird@v1
with:
cache: true
- name: Create patch
run: |
shorebird patch android \
--release-version ${{ inputs.release_version }}
env:
SHOREBIRD_TOKEN: ${{ secrets.SHOREBIRD_TOKEN }}
SHOREBIRD_TOKEN создаётся через shorebird login:ci аналогично Fastlane firebase login:ci.
Мониторинг и rollback
Shorebird Console показывает статистику патчей: процент устройств, получивших патч, crash rate после применения. Откат: shorebird patch rollback android --patch-number 5 — Shorebird перестаёт отдавать патч новым устройствам, уже обновлённые устройства получат предыдущую версию при следующем запуске.
Ценовая модель и ограничения
Shorebird — платный сервис (free tier: 5000 MAU). Это нужно учитывать в архитектуре: зависимость от стороннего сервиса критична для production-приложения. Self-hosted вариант недоступен — код runtime закрытый.
Для приложений с очень строгими требованиями к безопасности (финансовые, медицинские) нужно проверить политику платформы: App Store Review Guidelines 3.3.2 запрещает загрузку исполняемого кода через интерпретатор, но Shorebird апеллирует к тому, что патчи — это не новый код, а изменение существующего.
Процесс
Аудит Flutter-зависимостей на нативные компоненты → интеграция Shorebird SDK → первый релиз через Shorebird (взамен стандартного flutter build) → настройка CI для патчей → тест patch delivery → настройка мониторинга → документация.
Срок: 2–3 дня. Стоимость рассчитывается индивидуально.







