Repository navigation
Store as Code
Парадигма Store as Code в OctoPublisher (octopublish) переносит версионирование страниц приложений в магазинах в систему контроля версий Git.
Все метаданные, локализованные описания, иконки, промо-баннеры и скриншоты для Google Play Store и Microsoft Store хранятся в виде обычных файлов и синхронизируются автоматически в релизных пайплайнах CI/CD.
packaging/
├── whatsnew/ # Заметки о выпуске («Что нового» при обновлении)
│ ├── whatsnew-ru-RU.txt # Русский текст (до 500 символов)
│ └── whatsnew-en-US.txt # Английский текст (до 500 символов)
│
└── store/
├── android/ # Метаданные и графика для Google Play Store
│ ├── ru-RU/ # Русская локализация (Основной язык)
│ │ ├── title.txt # Название приложения (строго <= 30 символов)
│ │ ├── short_description.txt # Краткое описание (строго <= 80 символов)
│ │ ├── full_description.txt # Полное описание (до 4000 символов)
│ │ ├── privacy.txt # Ссылка на политику конфиденциальности
│ │ ├── icon.png # Иконка для Play Market (512x512, 32-bit PNG)
│ │ ├── feature_graphic.png # Баннер (1024x500, PNG или JPEG)
│ │ └── phoneScreenshots/ # Скриншоты телефона (от 2 до 8 штук, 16:9 / 9:16)
│ │ ├── 01_главная.png
│ │ └── 02_настройки.png
│ │
│ └── en-US/ # Английская локализация
│ ├── title.txt # App title (max 30 chars)
│ ├── short_description.txt # Short description (max 80 chars)
│ ├── full_description.txt # Full description (max 4000 chars)
│ ├── privacy.txt # Privacy policy URL
│ ├── icon.png # Store icon (512x512 PNG)
│ ├── feature_graphic.png # Promo banner (1024x500 PNG/JPEG)
│ └── phoneScreenshots/ # Phone screenshots
│ ├── 01_home.png
│ └── 02_settings.png
│
└── windows/ # Метаданные для Microsoft Store
├── ru-RU/ # Русская локализация
│ ├── title.txt # Название в магазине (override)
│ ├── full_description.txt # Описание приложения (до 10 000 символов)
│ ├── features.txt # Список возможностей (1 строка = 1 пункт, до 20)
│ ├── release_notes.txt # Заметки к обновлению для Windows (до 1500 символов)
│ ├── privacy.txt # Ссылка на политику конфиденциальности
│ ├── icon.png # Логотип приложения (квадрат 300x300 PNG)
│ ├── banner.png # Баннер приложения (1920x1080 SuperHeroArt)
│ └── screenshots/ # Скриншоты Windows (1920x1080 PNG)
│ └── 01_рабочий_стол.png
│
└── en-US/ # Английская локализация
├── title.txt # Title override
├── full_description.txt # Application description
├── features.txt # Key features (1 line per item)
├── release_notes.txt # Windows release notes
├── privacy.txt # Privacy policy URL
├── icon.png # App logo (300x300 PNG)
├── banner.png # Hero banner (1920x1080 PNG)
└── screenshots/ # Windows screenshots
└── 01_desktop.png
Каждая подпапка внутри store/android/ соответствует коду языка (ru-RU, en-US, de-DE, fr-FR и др.).
| Файл / Папка | Назначение | Требования и лимиты Google Play |
|---|---|---|
title.txt |
Название приложения | Максимум 30 символов. Нельзя использовать эмодзи и спецсимволы рекламного характера («БЕСПЛАТНО», «ТОП-1»). |
short_description.txt |
Краткое описание | Максимум 80 символов. Отображается под иконкой и названием на главной странице приложения в Google Play. |
full_description.txt |
Полное описание | Максимум 4000 символов. Поддерживает списки, переносы строк и базовый текст. |
privacy.txt |
Политика конфиденциальности | Валидный URL с протоколом https://. |
icon.png |
Значок приложения в магазине | 512 × 512 пикселей, формат PNG (32-бит с альфа-каналом), вес до 1024 КБ. Углы скруглять не нужно. |
feature_graphic.png |
Баннер (главное изображение) | 1024 × 500 пикселей, формат PNG (24-бит без прозрачности) или JPEG, вес до 15 МБ. Отображается в шапке карточки приложения. |
phoneScreenshots/ |
Скриншоты телефона | Формат PNG или JPEG (24-бит без альфы), соотношение сторон 16:9 или 9:16. Стороны: от 320 px до 3840 px. От 2 до 8 файлов. Сортируются по имени файла (01_...png, 02_...png). |
sevenInchScreenshots/ (опционально)
|
Скриншоты планшетов 7" | Формат PNG или JPEG, от 320 до 3840 px, от 2 до 8 штук. |
tenInchScreenshots/ (опционально)
|
Скриншоты планшетов 10" | Формат PNG или JPEG, от 1080 до 7680 px, от 2 до 8 штук. |
Tip
Общие материалы (Fallback):
Если вы хотите использовать одинаковую иконку или скриншоты для всех языков, вы можете поместить icon.png или папку phoneScreenshots/ прямо в корень packaging/store/android/. Локали без собственных файлов графики унаследуют общие файлы автоматически.
| Файл | Назначение | Требования и формат |
|---|---|---|
title.txt |
Название продукта | Строка текста с названием приложения в Partner Center (до 256 знаков). |
full_description.txt |
Описание продукта | До 10 000 символов. Основной текст на странице приложения в Microsoft Store. |
release_notes.txt |
Заметки к выпуску | Заметки, отображаемые пользователям Windows в разделе «Что нового» (до 1500 символов). |
features.txt |
Ключевые возможности |
Один пункт на строку. До 20 пунктов. Каждый пункт до 200 символов. Строки, начинающиеся с #, игнорируются. |
privacy.txt |
Политика конфиденциальности | Ссылка на страницу политики конфиденциальности разработчика. |
icon.png |
Логотип приложения | Квадратное изображение 300 × 300 пикселей PNG. |
banner.png |
Промо-баннер (Hero) | Изображение 1920 × 1080 пикселей PNG/JPEG (SuperHeroArt). |
screenshots/ |
Скриншоты для десктопа | Изображения 1920 × 1080 или 1366 × 768 пикселей PNG/JPEG. |
Используются при доставке обновлений на устройства пользователей:
-
whatsnew-ru-RU.txt: текст для русскоязычных пользователей (макс. 500 символов). -
whatsnew-en-US.txt: текст для англоязычных пользователей (макс. 500 символов).
Встроенный в OctoPublisher механизм Safe-Merge защищает от случайного затирания метаданных:
- Google Play API при HTTP
PUT /edits/{id}/listings/{language}полностью перезаписывает карточку приложения. Если поле отсутствует или равноnull, Google Play удаляет его. - Если в
title.txtне задано новое название (или файл отсутствует), OctoPublisher перед отправкой обновления сначала делаетGET /listings/{language}, извлекает текущее рабочее название из Google Play и подставляет его в запрос. - Это гарантирует, что вы можете обновлять описание, скриншоты или заметки к релизу, не рискуя потерять название приложения и получить отказ API.
Запускается командой:
octopublish test --dir packagingЛинтер выполняет 5 уровней валидации:
-
Маркеры шаблонов: проверяет, не забыл ли разработчик стартовые заглушки (
[ШАБЛОН],example.com,App Name). -
Обязательные файлы: проверяет наличие и непустоту
title.txt,full_description.txt,icon.png. - Лимиты символов: сверяет длину текстов с официальными правилами магазинов.
- Размеры графики: читает заголовки PNG и JPEG без загрузки растра в память, проверяя точные габариты.
- Безопасность URL: валидирует адреса политики конфиденциальности.
# 1. Инициализация чистой структуры (или выгрузка из магазина):
octopublish init all --dir packaging
octopublish pull windows 9NZXP5WR803J --dir packaging
# 2. Добавление локалей:
octopublish add all fr --dir packaging
# 3. Предполётная проверка линтером:
octopublish test --dir packaging
# 4. Просмотр сводной таблицы готовности:
octopublish list --dir packaging
# 5. Синхронизация описаний и графики со сторами:
octopublish sync all --dir packaging-
Начало работы
-
Store as Code
-
Модули магазинов
-
CI/CD и конфигурация
-
Внутреннее устройство