Реалізація 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 дні. Вартість розраховується індивідуально.







