Перейти к инструкции
Moonbay Studio
Moonbay Labs / Справка

От сборки
до обновления.

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

Открыть Labs ↗
Сначала о главном

Приложению нужна поддержка автообновления

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

Загрузка файла в Labs сама по себе не добавляет механизм обновления в новый продукт. Сайт тоже нужно один раз подключить к публичной ссылке проекта. Исходный код Labs не собирает: готовый установщик нужно заранее собрать и подписать локально или в CI.

01 / Подготовка

Команда и первый проект

  1. Открой доступ команде. Первый администратор создаёт аккаунт на главной странице Labs по приватному коду команды. После этого регистрация новых аккаунтов доступна по одноразовой ссылке из раздела «Команда».
  2. Пригласи участников. Администратор выбирает роль, при необходимости закрепляет приглашение за email и передаёт ссылку. Участник работает с проектами и сборками; администратор также управляет приглашениями, ролями и доступом.
  3. Создай проект. Укажи название, адрес проекта slug, описание и сайт. Например: название «Мой Герцена», адрес myherzen.

Адрес проекта используется в публичном API. После первой публикации его нельзя изменить. Аккаунты и база Labs отделены от Records.

02 / Выпуск

Загрузка → черновик → публикация

Внутри проекта заполни форму «Загрузить сборку». Для каждого сочетания платформы, архитектуры и канала ведётся своя последовательность номеров.

ПолеЧто указать
ФайлГотовый установщик или архив продукта. Для Android — .apk с AndroidManifest.xml, AAB не поддерживается.
Версия versionОтображаемая версия, например 1.2.0. Это текст длиной до 64 символов.
Номер сборки buildNumberЦелое число от 1 до 2 147 483 647. Для Android оно должно совпадать с versionCode внутри APK; в других клиентах — с числовым идентификатором установленной сборки.
Платформаandroid, macos, ios, windows, linux или web.
Архитектураuniversal, arm64, x86_64 или x86. Должна соответствовать файлу и настройке клиента.
Каналstable — основной выпуск, beta — тестирование, alpha — ранние сборки.
Что новогоОписание изменений releaseNotes для пользователей приложения.

Нажми «Загрузить черновик», проверь параметры и контрольную сумму, затем отдельно нажми «Опубликовать». Черновик не виден в публичном API и недоступен по публичной ссылке на скачивание.

Опубликованный выпуск нельзя изменить или удалить. Следующая публикация должна иметь больший номер сборки для того же сочетания платформы, архитектуры и канала. Для исправления выпуска подготовь новую сборку.

Точные пути для интеграции загрузки

Эти операции требуют авторизации аккаунта Labs. Публичному приложению токен команды не нужен.

POST /projects/{projectId}/releases
Content-Type: multipart/form-data

file, version, buildNumber, platform,
architecture, channel, releaseNotes

POST /projects/{projectId}/releases/{releaseId}/publish

Загрузка возвращает черновик. Второй запрос публикует уже загруженный выпуск.

03 / Интеграция

Что должно делать приложение

  1. Запросить описание выпуска по HTTPS. Используй постоянную ссылку проекта с точными platform, channel и architecture. Авторизация для неё не нужна.
  2. Проверить ответ. Обработай ошибки сети и отсутствие публикации. Проверь платформу, архитектуру, канал и статус published. Сравни целый buildNumber с номером установленной сборки, а не строки версий.
  3. Предложить обновление. Если номер больше установленного, покажи версию и releaseNotes. Равный или меньший номер не должен запускать обновление или откат.
  4. Скачать файл по downloadUrl. До установки проверь фактический размер против fileSize, SHA-256 против sha256, совместимость платформы и архитектуры, а также подлинность подписи пакета.
  5. Передать файл штатному установщику. Используй механизм обновления конкретной ОС с необходимыми разрешениями и согласием пользователя. Labs не выполняет скрытую установку и не обходит ограничения системы.

Для сайта достаточно читать тот же JSON и подставлять downloadUrl в кнопку скачивания. В приложении загрузку, проверку подписи и установку нужно реализовать отдельно для каждой поддерживаемой платформы. SHA-256 проверяет целостность файла и не заменяет цифровую подпись пакета.

Если сайт работает на другом домене

Браузер сможет прочитать JSON, только если origin сайта разрешён настройками CORS API Labs. Для нового сайта настрой разрешённый origin или запрашивай feed через backend этого сайта. Обычная ссылка на скачивание не требует CORS; нативный HTTP-клиент приложения также не ограничен браузерным CORS.

Не встраивай код команды или Bearer-токен аккаунта Labs в приложение и публичный сайт. Feed и скачивание опубликованных файлов доступны без них.

04 / Публичный API

Собери ссылку своего проекта

Feed возвращает JSON последнего опубликованного выпуска с максимальным buildNumber для выбранных параметров. На странице можно подготовить адрес без запросов к API.

Параметр platform обязателен. Если не передать канал или архитектуру, используются stable и universal. Архитектура сопоставляется точно: запрос arm64 не подставляет сборку universal автоматически.

Проверка через curl

curl --fail-with-body --show-error --silent \
  'https://api.labs.moonbaystudio.ru/public/projects/myherzen/latest?platform=android&channel=stable&architecture=universal'

Формат ответа

Пример с условными данными. Все поля ниже соответствуют ответу Labs; реальные значения выдаёт API.

{
  "id": 123,
  "projectId": 1,
  "version": "1.2.0",
  "buildNumber": 42,
  "platform": "android",
  "architecture": "universal",
  "channel": "stable",
  "releaseNotes": "Исправления и улучшения.",
  "fileName": "MyHerzen-1.2.0-42-release.apk",
  "fileSize": 67108864,
  "sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
  "status": "published",
  "createdAt": "2026-10-22T10:00:00Z",
  "publishedAt": "2026-10-22T10:05:00Z",
  "downloadUrl": "https://api.labs.moonbaystudio.ru/public/releases/123/download"
}

fileSize указан в байтах. Объект выпуска возвращается напрямую, без обёртки. Для скачивания используй полученный downloadUrl: это путь /public/releases/{id}/download. Не конструируй адрес по имени файла: у API нет алиаса latest.apk.

Для feed и файла используй метод GET. Метод HEAD на этих путях не поддерживается.

Feed может кэшироваться на 30 секунд. Ссылка на опубликованный файл постоянна; сам файл выдаётся как неизменяемый артефакт.

05 / Пример для разработчика

Проверка наличия новой версии

Этот JavaScript показывает только чтение feed и сравнение номера сборки. Он не скачивает файл и не запускает установку. В браузере действует ограничение CORS, описанное выше; в нативном приложении ту же проверку можно написать на языке его платформы.

Параметры примера обновляются вместе с формой выше.
// Пример появится после загрузки страницы.

После результата с новой версией покажи пользователю предложение обновиться. До установки отдельно проверь размер, SHA-256, пакет приложения и его подпись. Для загрузки и запуска установщика нужны платформенные API.

06 / Готовые подключения

MyHerzen и особенности платформ

Для MyHerzen уже предусмотрен мост между Labs, сайтом скачивания и существующей проверкой обновления Android. Для новых продуктов такую интеграцию нужно добавить в их сайт и клиент.

Параметры Android MyHerzen

  • Проект myherzen, платформа android, канал stable, архитектура universal.
  • Готовый APK размером не более 128 МиБ. buildNumber должен совпадать с versionCode APK и быть больше установленного и уже предлагаемого сайтом номера сборки. Мост MyHerzen не заменяет текущий выпуск равным или более старым.
  • Сохрани тот же идентификатор пакета и сертификат подписи. Android не установит такую сборку поверх приложения с другой подписью.
  • Загрузи APK как черновик и опубликуй его. Действующий сайт и проверка обновления Android используют подключение к этому выпуску.
ПлатформаКак распространять
AndroidAPK и системный установщик с согласием пользователя. Для нового продукта сначала реализуй клиент обновлений.
macOS, Windows, LinuxСейчас для MyHerzen доступны скачивания с сайта. Нативное автообновление для этих платформ требует отдельной интеграции в приложение; загрузка установщика в Labs его не включает.
iOSОбычное распространение и обновления — через TestFlight или App Store. Хранение IPA в Labs не отправляет его на обработку и не заменяет эти каналы.
WebZIP можно опубликовать для скачивания. Развёртывание сайта и обновление уже установленной веб-оболочки выполняются отдельным механизмом продукта.
07 / Проверки

Если выпуск не появился

API вернул 404

Проект не найден либо для точного сочетания платформы, канала и архитектуры нет опубликованной сборки. Проверь slug и все три параметра; наличие черновика не означает наличие публичного выпуска. В клиенте обработай 404 как отсутствие доступного обновления.

Сборка опубликована, но feed ещё старый

Подожди до 30 секунд: публичный ответ допускает кэширование. Затем проверь точный адрес feed и номер сборки в ответе.

Приложение не предлагает обновление

Убедись, что в нём реализована проверка Labs, выбран нужный канал и архитектура, а buildNumber больше установленного. Сравнивай числа, не строку version.

Файл скачался, но установка не проходит

Проверь платформу и архитектуру, размер и SHA-256, подпись и идентификатор приложения, разрешения установщика. Для Android MyHerzen проверь также соответствие номера сборки и ограничение 128 МиБ.

Labs не разрешает опубликовать сборку

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