Массовая загрузка локализованных скриншотов в оба магазина
deliver/supply поверх них). Mokbi рендерит каждую локаль × устройство и публикует готовый набор в оба магазина за тебя — напрямую отправляя в Google Play через Play Developer API и подготавливая набор в App Store Connect, готовый к твоей финальной отправке.Ты в разгаре релиза. Скриншоты готовы. Теперь их нужно загрузить в оба магазина, на всех поддерживаемых языках, во всех размерах устройств, которые требует каждый магазин. Вот о чём никто не предупреждает — и именно тут люди тихо гуглят что-то вроде «bulk upload localized screenshots app store connect / google play all languages».
Сразу честный ответ, чтобы ты не тратил время на поиски: ни в одном из магазинов нет встроенной массовой загрузки, которая охватывала бы все локали сразу. Загружаешь по локали, по семейству размеров устройств, в веб-интерфейсе, по одной «корзине» за раз.
Что на самом деле значит «нет массовой загрузки»
В App Store Connect ты открываешь приложение, выбираешь версию, прокручиваешь до раздела скриншотов и перетаскиваешь PNG в конкретный слот типа дисплея — 6,9", 6,5", 13" iPad и так далее. Потом переключаешь выпадающий список локализации на следующий язык и повторяешь всё заново. Apple позволяет добавить до 10 скриншотов на тип устройства, на локализацию. Кнопки «применить ко всем языкам» для изображений не существует.
Google Play Console работает так же. В разделе основной информации о приложении ты выбираешь локаль, а затем загружаешь скриншоты в каждый раздел устройства — телефон, 7-дюймовый планшет, 10-дюймовый планшет, а также опционально Chromebook, Wear OS, Android TV и новые типы. До 8 штук на тип устройства. Переключаешь язык, повторяешь.
Так что единица работы — это не «набор скриншотов». Это одна корзина = один язык × одно семейство размеров устройств, и ты заполняешь каждую корзину вручную.
Объём работы в цифрах
Посчитай корзины честно. У Apple обычная подача заполняет минимум семейство дисплеев iPhone и семейство дисплеев iPad — скажем, 2, больше, если ты держишь отдельный набор для 6,5" iPhone наряду с 6,9". У Play обычная подача заполняет телефон плюс два размера планшета — скажем, 3, больше, если добавить Chromebook или Wear OS.
- Один язык, оба магазина: примерно 2 корзины Apple + 3 корзины Play = 5 ручных загрузок.
- Десять языков: около 20 + 30 = 50 корзин на заполнение, каждая вмещает до 8–10 изображений.
- Пятьдесят языков: около 100 + 150 = 250 отдельных загрузок перетаскиванием, ещё до того, как ты проверил, что нужное изображение попало в нужный слот.
Тридцать минут перетаскивания на локаль — цифра, которую люди приводят не просто так. При любом реальном количестве языков это перестаёт быть задачей и превращается в добрую половину рабочего дня — половину дня, которая повторяется с каждым следующим релизом.
Два единственных пути автоматизации
Если хочешь полностью пропустить веб-интерфейс, есть ровно две поддерживаемые «двери», по одной на магазин:
- App Store Connect API. Ресурс скриншотов позволяет создавать набор и загружать изображения программно для заданной локализации и типа дисплея устройства. Ты аутентифицируешься с помощью API-ключа и отправляешь изображения по локали, по семейству дисплеев.
- Google Play Developer API. Метод
edits.images.uploadзагружает одно изображение указанного языка и типа (phoneScreenshots,sevenInchScreenshots,tenInchScreenshotsи так далее) в отложенное изменение (edit), которое затем нужно зафиксировать (commit).
Большинство команд не работают с ними напрямую. Они используют fastlane поверх: deliver (также известный как upload_to_app_store) управляет App Store Connect API, а supply (upload_to_play_store) — Play Developer API. Supply даже запускает несколько потоков загрузки, чтобы отправлять локализованные изображения параллельно. Вот это и есть настоящая «массовая загрузка» — это цикл вызовов API, а не кнопка в дашборде.
Стоит прямо сказать о цене вопроса: fastlane означает Ruby-инструментарий, fastfile, учётные данные API магазинов и (для стороны Apple) обычную возню с подписью кода и симулятором. Это окупается, если ты выпускаешь релизы часто. Для приложения, которое подаётся в магазины несколько раз в год, настраивать всё это ради загрузки картинок может оказаться больше работы, чем то перетаскивание, которое оно заменяет. Если ты уже используешь fastlane для сборок, добавить шаг со скриншотами — почти бесплатно.
Настоящее узкое место — откуда берутся скриншоты
Обрати внимание: каждый из описанных путей предполагает, что файлы уже существуют — правильного размера, по набору на семейство устройств, переведённые на каждый язык. Вот в чём реальная сложность. App Store Connect API и Play Developer API переносят готовые изображения; они не создают дизайн, не меняют размер и не переводят подписи. Если ты вручную создаёшь 50 языковых вариантов в 5 размерах устройств в дизайн-инструменте, загрузка никогда не была твоим узким местом.
Именно этот пробел закрывает Mokbi. Ты создаёшь один дизайн, и он рендерит каждый размер устройства и каждый из 50 языков из этого единого источника — подписи переведены, макет перестроен, каждый кадр экспортирован в точных пиксельных размерах, которых ожидает слот магазина. На выходе — готовый пакет: чистый набор файлов локаль × устройство, названных и организованных, готовых к загрузке в нужные корзины.
Публикация в оба магазина в один клик
Mokbi решает именно эту задачу. Ты создаёшь один набор, а он рендерит каждую локаль × каждый размер устройства и публикует их в оба магазина — отправляя напрямую в Google Play через Play Developer API и подготавливая наборы в App Store Connect, готовые к твоей отправке. Apple требует финального Submit и проверки, так что этот последний шаг остаётся за тобой; всё до него уже сделано. Никакой ручной загрузки по локали и по устройству.
Если ты уже используешь fastlane или API магазинов в своём CI, те же экспортированные файлы напрямую поступают в deliver и supply. В любом случае дизайн, изменение размера и перевод на 50 языков уже сделаны за тебя — а теперь и публикация тоже.
Рабочий процесс, который действительно экономит полдня
- Создай дизайн один раз. Собери карусель один раз в редакторе.
- Экспортируй матрицу пакетно. Каждый размер устройства × каждый язык, в точных размерах магазина, за один экспорт.
- Опубликуй в оба магазина. Mokbi отправляет наборы в Google Play и подготавливает их в App Store Connect для твоей финальной отправки — либо передай файлы в fastlane
deliver/supply, если у тебя свой CI. - В следующем релизе — переэкспортируй и повтори. Измени дизайн один раз, перегенерируй всю матрицу, загрузи снова.
Важная математика: число корзин не меняется, но время на каждую корзину сокращается в разы, когда ты просто перетаскиваешь готовый файл нужного размера вместо того, чтобы сначала его создавать и подгонять. Это и есть разница между полднём работы и перерывом на кофе.