Руководство пользователя

Nursery — нативное приложение для macOS, которое проводит iOS-приложение через весь путь публикации в App Store Connect: сертификаты, создание записи, метаданные, скриншоты, сборка и загрузка билда — из одного окна.

01

О приложении

Nursery автоматизирует рутинную часть публикации. Вы добавляете приложение (вручную или из Notion), один раз входите в Apple-аккаунт — дальше Nursery сам выпускает сертификаты и профили, создаёт приложение в App Store Connect, загружает метаданные сразу на все локали, подгоняет и загружает скриншоты, собирает IPA из исходников и отправляет билд в ASC.

Два действия намеренно остаются за вами: привязка билда к версии и отправка на ревью (Submit for Review). Рутину забирает машина — решение о релизе остаётся за человеком.

Как Nursery общается с Apple

Используются два независимых механизма — понимание разницы снимает большинство вопросов «почему не работает»:

  • Cookie-сессия — «браузерная» авторизация, попадает в Nursery через расширение «Nursery Cookie Sync» (раздел 7). Живёт ограниченное время, её нужно периодически обновлять повторным входом.
  • API-ключ App Store Connect (файл .p8) — Nursery создаёт его сам при первом выпуске сертификатов. Не протухает: скриншоты, загрузка билдов, версии и Submit работают по нему даже когда cookie-сессия давно истекла.

Требования

  • Mac на Apple Silicon или Intel с macOS 15.6 или новее (приложение нативное, не web-обёртка).
  • Xcode — только если собираете IPA из исходников. Для всего остального (метаданные, скриншоты, загрузка готового .ipa) Xcode не нужен.
  • Браузер на базе Chromium (Chrome, Edge, Brave, Arc и т.п.) — для расширения «Nursery Cookie Sync» из Chrome Web Store. Safari и Firefox не поддерживаются.
Всё хранится локальноДанные приложений — сертификаты, ключи, билды, метаданные — лежат только на вашем Mac в ~/Library/Application Support/sv.NurseryApp/. Никакого облака: чем делиться и с кем — решаете вы (см. раздел 17).
02

Установка и лицензия

  1. Установите приложениеСкачайте установщик .pkg с сайта и пройдите стандартную установку. Обновления дальше приходят автоматически (см. раздел 18).
  2. Активируйте лицензиюПри первом запуске откроется окно «Активируйте NurseryApp». Введите лицензионный ключ формата NRSY-XXXX-XXXX-XXXX-XXXX и нажмите «Активировать» — дефисы подставляются автоматически.
  3. Или попробуйте бесплатноКнопка «Попробовать 3 дня» включает пробный период — без ключа и без карты. Триал выдаётся один раз на каждый Mac: переустановка приложения его не сбрасывает.

Ключ выдаётся лично — написать за покупкой или продлением можно в Telegram: @R_R_E_B. Статус лицензии, оставшиеся дни и кнопка «Обновить статус» — в настройках, карточка «Аккаунт и лицензия».

Как работает привязка

  • Ключ привязывается к Mac. Командные ключи активируются на нескольких машинах — лимит мест зашит в ключ. При его превышении появится «Достигнут лимит устройств для этого ключа» — напишите, чтобы освободить место или расширить лимит.
  • Сменили Mac? Активация на новой машине сообщит, что ключ привязан к другому Mac, — перепривязка делается на стороне разработчика, просто напишите в Telegram.
  • Офлайн-режим. Лицензия перепроверяется по сети фоново; без связи с сервером приложение продолжает работать до 14 дней. Дольше — появится окно блокировки с кнопкой «Повторить проверку»: подключитесь к интернету и нажмите её.
  • Продление. После оплаты ничего вводить заново не нужно: новый срок подтянется сам при фоновой проверке — даже если доступ уже был заблокирован из-за истёкшего срока. Чтобы не ждать, нажмите «Повторить проверку» в окне блокировки.

Окно «Доступ заблокирован» всегда объясняет причину (истёк срок, отозван ключ, слишком долго офлайн, ключ привязан к другой машине) и позволяет ввести новый ключ или проверить обновления, не заходя в приложение.

03

Быстрый старт: от нуля до загруженного билда

Полный путь для нового приложения выглядит так:

  1. Добавьте приложениеКнопка «Добавить приложение» внизу сайдбара (или «Notion» / «Вручную», если подключён Notion). Достаточно названия: пустой Bundle ID сгенерируется из него — раздел 6.
  2. Войдите в Apple-аккаунтКнопка «Войти» в шапке — вход через браузерное расширение «Nursery Cookie Sync», логин и пароль в Nursery не вводятся — раздел 7.
  3. Задайте прокси (или разрешите работу без прокси)Каждому аккаунту — свой прокси: карточка «Прокси» на вкладке «Главная» — раздел 8.
  4. Запустите «Быстрая загрузка»Кнопка «Быстрая загрузка» в шапке открывает визард из пяти шагов: сертификаты и язык, метаданные, скриншоты, исходники, подтверждение. Дальше всё выполняется автоматически — раздел 15.
  5. Прикрепите билд и отправьте на ревьюКогда билд обработается в ASC, на вкладке «Публикация» нажмите «Прикрепить билд», затем «Создать черновик» и «Отправить» — раздел 14.

Каждый шаг можно выполнять и по отдельности, со своих вкладок — «Быстрая загрузка» лишь прогоняет ту же цепочку одной кнопкой и пропускает уже сделанное.

При первом запуске Nursery показывает короткий онбординг — несколько слайдов о том, как всё устроено. Дальше по ходу работы у нужной кнопки появляется подсказка с пульсирующей рамкой: закрыли — больше не покажется. Если основная кнопка неактивна, причина написана прямо под ней (у остальных — в подсказке при наведении). Вернуть закрытые подсказки — Настройки → «Сбросить подсказки», онбординг — там же, «Показать онбординг».

04

Интерфейс

Сайдбар: список приложений

  • Поиск — по имени, Bundle ID и номеру приложения (можно с решёткой: #894).
  • Сортировка — кнопка со стрелками: по имени или дате создания, по возрастанию/убыванию.
  • Группы — приложения можно раскладывать по цветным группам (секции сворачиваются). Группа назначается при добавлении, через контекстное меню («Группа») или массово: пункт «Выбрать» включает режим множественного выбора с действиями «Группа» и «Удалить» для всех отмеченных.
  • Статус — цветная точка справа в каждой строке: авторизован (зелёная), сессия истекла (жёлтая), не авторизован (красная), идёт операция (синяя).
  • Контекстное меню — «Свойства…» (имя, Bundle ID, email аккаунта, основная локаль, прокси), «Группа», «Удалить».

Вкладки выбранного приложения

ВкладкаГорячая клавишаЧто там
«Главная»⌘1Прогресс, аккаунт, прокси, API-ключ — раздел 10
«Метаданные»⌘2Тексты, локали, AI-перевод, категории, цена, рейтинг, Game Center и покупки — раздел 11
«Скриншоты»⌘3Скриншоты и видео App Preview, A/B-тесты страницы, загрузка — раздел 12
«Сборка»⌘4Исходники, сборка IPA, библиотека билдов — раздел 13
«Публикация»⌘5Версии в ASC, привязка билда, черновик заявки и отправка на ревью — раздел 14

В шапке над вкладками: статус авторизации, Bundle ID, кнопка «Открыть в Notion» (если приложение привязано к карточке), аккаунт-капсула со входом/выходом и кнопка «Быстрая загрузка». Слева от вкладок — чип текущей версии в ASC и кнопка + для создания новой версии.

Панель операций

Открывается кнопкой в правом верхнем углу (⌘0). Это история всего, что Nursery делал с этим приложением: каждая операция — карточка с прогрессом, статусом («В процессе», «В очереди», «Успешно», «Ошибка», «Отменено») и разворачиваемым логом. Здесь можно:

  • отменить идущую операцию или убрать её из очереди;
  • развернуть «Логи» и скопировать их;
  • для упавшей операции — нажать «Отправить лог»: короткое описание, что вы делали, плюс полный лог уходят разработчику;
  • очистить историю целиком («Очистить историю»).

Уведомления

Об окончании операции сообщает всплывающий тост в окне («Сертификаты созданы», «IPA собран», «Скриншоты загружены»…). Если окно Nursery в этот момент не активно, вместо тоста придёт системное уведомление macOS со звуком — можно спокойно уходить в другое приложение на время долгой сборки. Разрешение на уведомления запрашивается один раз при первом запуске.

05

Настройки

Кнопка «Настройки» — внизу сайдбара. В шапке окна: переключатель темы (светлая/тёмная) и «Язык интерфейса» — Системный, English, Русский, Українська (после смены Nursery предложит перезапуститься).

  • «Аккаунт и лицензия» — статус ключа, оставшиеся дни, «Обновить статус», продление через Telegram.
  • «Интеграции» — подключение Notion-токена (раздел 16) и «AI-переводы локалей» — свой API-ключ OpenAI или DeepSeek для перевода описаний (раздел 11).
  • «Сеть» — тумблер «Работа без прокси»: разрешить операции без прокси. Настройка глобальная, действует на все приложения. Осторожно: Apple увидит реальный IP устройства (раздел 8).
  • «Обновления» — текущая версия и кнопка «Проверить обновления».
  • «Браузерное расширение» — кнопка «Скопировать ссылку на расширение» (страница «Nursery Cookie Sync» в Chrome Web Store) и короткая инструкция «Как установить» (раздел 7).
  • «Обратная связь» — написать разработчику прямо из приложения.
  • «Показать онбординг» — заново показать вступительные слайды.
  • «Сбросить подсказки» — вернуть закрытые подсказки у кнопок: они снова появятся на своих шагах.
06

Добавление приложения

Внизу сайдбара: если Notion не подключён — одна кнопка «Добавить приложение» (ручной режим); если подключён — две: «Notion» и «Вручную».

Вручную

  • «Название» — обязательно.
  • Bundle ID — например com.example.myapp. Кнопка с волшебной палочкой сгенерирует его из названия.
  • App Number — необязательный порядковый номер для своей нумерации (показывается в сайдбаре как #894, по нему работает поиск).
  • Proxy URL — можно задать сразу или позже.
  • «Группа» — существующая или «+ Новая группа…».

Из Notion

Вставьте «URL страницы или ID» карточки приложения — Nursery подтянет всё, что найдёт в карточке, и сразу настроит приложение:

  • название, Bundle ID, номер, Issuer ID;
  • App ID — если приложение уже создано в App Store Connect и его ID записан в карточке, Nursery сразу пометит шаг «Приложение создано» выполненным и разблокирует метаданные;
  • API-ключ — файл AuthKey_*.p8 с карточки скачается автоматически;
  • сертификаты — если на странице лежит cert.zip, запустится автоматический импорт (в окне добавления появится строка статуса «Найден cert.zip в Notion — импортирую…»);
  • если Bundle ID в карточке пуст, Nursery сгенерирует его и запишет обратно в Notion.

Структура карточки — в разделе 16.

После создания в ASCBundle ID и Apple ID блокируются — приложение уже существует в App Store Connect, менять их поздно. Основную локаль после этого можно сменить только на вкладке «Метаданные» — правым кликом по языку → «Сделать основной». Остальные свойства редактируются через «Свойства…» в любой момент.
07

Вход в Apple-аккаунт

Nursery не спрашивает логин и пароль от Apple ID. Вход выполняется переносом cookie-сессии из браузера — одним нажатием в расширении «Nursery Cookie Sync». Расширение передаёт cookies только на локальный адрес вашего же Mac (порт 5556) и принимает только домены Apple — наружу ничего не уходит.

Установка расширения (один раз)

  1. Скопируйте ссылку на расширениеНастройки → «Браузерное расширение» → «Скопировать ссылку на расширение» (та же кнопка есть в онбординге). Ссылка ведёт на страницу «Nursery Cookie Sync» в Chrome Web Store.
  2. Установите его в свой браузерОткройте ссылку в браузере, где ведёте Apple-аккаунт, — обычном Chrome или антидетекте (Octo и подобные) — и нажмите Add to Chrome. Ссылка копируется, а не открывается автоматически, как раз потому, что Nursery не знает, в каком браузере и профиле живёт ваш аккаунт. Расширение работает только в браузерах на основе Chromium (Chrome, Edge, Brave, Arc, Opera и подобных); Safari и Firefox не поддерживаются.

Вход

Порядок важен: сначала «Войти» в Nursery, потом «Sync Cookies» в браузере. Приёмник cookies на порту 5556 работает только пока открыто окно входа — если нажать кнопку расширения без него, получите «Server unreachable».

  1. Нажмите «Войти» в NurseryКнопка в шапке приложения. Откроется окно «Вход через cookies» с подсказкой «Откройте App Store Connect в браузере и нажмите кнопку расширения «Nursery Cookie Sync».» — с этого момента Nursery слушает и ждёт.
  2. Залогиньтесь на appstoreconnect.apple.comВ браузере, под нужным аккаунтом — как обычно, с двухфакторкой. Если уже залогинены — просто откройте вкладку ASC.
  3. Нажмите иконку расширения → «Sync Cookies»В popup будет видно состояние: «Apple session found (N cookies)» — можно жать; «No Apple session…» — сначала войдите на сайт. При успехе — «Synced! <email>», окно входа в Nursery закроется само, статус сменится на «Авторизован».

После входа на вкладке «Главная» появится карточка «Apple Account» с именем и Team ID.

Жизнь сессии

  • Nursery фоново проверяет живость сессий примерно каждые 15 минут. Когда Apple завершает сессию, точка статуса становится жёлтой — «Сессия истекла».
  • Это нормально и ожидаемо: cookie-сессии Apple короткоживущие. Автоматического перелогина нет — повторите вход (те же «Войти» → «Sync Cookies»).
  • Протухшая сессия не останавливает работу: всё, что ходит по API-ключу (скриншоты, загрузка билда, версии, Submit), продолжает работать — см. таблицу ниже.

Кнопка «Выйти» — два разных поведения

  • Сертификаты ещё не созданы: «Выйти» полностью сбрасывает аккаунт у приложения — удаляются сессия, email, ключи и файлы сертификатов. Можно привязать другой Apple ID.
  • Сертификаты уже созданы: «Выйти» только отзывает текущую сессию. Email, сертификаты и ключи сохраняются, аккаунт закрепляется за приложением — сменить Apple ID уже нельзя, только войти в тот же заново.

Несколько аккаунтов

Cookies хранятся отдельно у каждого приложения — внутри Nursery аккаунты изолированы. Но источник cookies — браузер, а он держит одну активную сессию Apple на профиль. Поэтому:

  • заводя второй аккаунт, сначала выйдите на appstoreconnect.apple.com из первого и войдите под вторым — иначе расширение синхронизирует не тот аккаунт;
  • удобнее — отдельный профиль браузера под каждый Apple-аккаунт: сессии живут параллельно, и «Sync Cookies» жмёте из нужного профиля (расширение придётся установить в каждый).
  • если приложение уже привязано к аккаунту, а «Sync Cookies» нажат в профиле с другим аккаунтом, Nursery такие cookies не примет: покажет «Эти cookies — аккаунт …, а приложение привязано к …» и оставит окно входа открытым — синхронизируйте из нужного профиля. Сменить аккаунт приложения можно только через «Выйти» (см. выше).

Что требует cookie-сессию, а что API-ключ

ОперацияЧто нужно
Создание сертификатов (первый раз)Cookie-сессия (заодно создаётся API-ключ)
Создание приложения в ASCCookie-сессия
Метаданные («Загрузить в ASC»)API-ключ и cookie-сессия (часть шагов — App Privacy, платформы, DSA — идёт по cookie)
СкриншотыТолько API-ключ
Сборка IPAНичего из этого — локальная операция
Загрузка IPA, привязка билда, новая версия, черновик заявки и отправка на ревьюТолько API-ключ
Синк локалей из ASCТолько API-ключ
Game Center и покупки (отдельная загрузка), A/B-тесты страницы, смена основной локалиТолько API-ключ
08

Прокси и работа без прокси

Каждому приложению (аккаунту) можно назначить собственный прокси — весь трафик Nursery к Apple для этого аккаунта пойдёт через него. Задаётся при добавлении приложения, в «Свойства…» или на вкладке «Главная»: карточка «Прокси» → «Добавить» / «Изменить».

Поддерживаются SOCKS5 и HTTP, форматы записи:

socks5://user:pass@host:port
http://user:pass@host:port
user:pass@host:port      (SOCKS5 по умолчанию)
host:port:user:pass

Кнопка «Проверить» делает два запроса — напрямую и через прокси — и показывает оба IP. Если они совпали, увидите предупреждение «Прокси не меняет IP — возможно, не работает». Проверяйте прокси до запуска операций.

Как устроена защита

  • Обычные операции (создание приложения, метаданные, скриншоты, загрузка билда) ходят через прокси на уровне самого Nursery — тут всё просто.
  • Сборка IPA — особый случай: инструменты Apple (xcodebuild и другие) игнорируют настройки прокси. Поэтому на время сборки Nursery через фоновый помощник заворачивает трафик на уровне системы. Помощник ставится автоматически; macOS при первой установке попросит разрешить его в Системные настройки → Основные → «Объекты входа и расширения» (Allow in the Background).
  • Если помощник выключен, а прокси задан, на «Главной» появится баннер «Защита прокси отключена» с кнопкой «Открыть настройки» — она ведёт прямо в нужный раздел.
  • Если защиту не удалось включить в момент сборки, Nursery остановится и спросит: «Отменить сборку» (безопасный выбор, по Enter) или «Продолжить без защиты» — тогда трафик сборки пойдёт с реального IP.

Работа без прокси

Тумблер «Работа без прокси» в настройках (карточка «Сеть») снимает единственное требование — «без прокси операции запускать нельзя». Всё остальное (вход, сессии, ключи) работает как обычно, но запросы идут с реального IP устройства — на «Главной» об этом напоминает оранжевый баннер «Работа без прокси включена». Без прокси и без этого тумблера операции заблокированы (красный баннер «Прокси не настроен»).

09

Сертификаты

Всё управление — на вкладке «Главная», карточка «Прогресс», строка «Сертификаты». Требуются вход в аккаунт и настроенный прокси (или разрешённая работа без прокси).

Создание

Кнопка «Создать» открывает окно «Capabilities для Bundle ID»:

  • Список capabilities — отметьте нужные (есть поиск). Push Notifications включён по умолчанию (можно снять); In-App Purchase помечен «всегда вкл» — его включает сам Apple. Game Center — обычная галка, по умолчанию выключен: включите, если в приложении есть достижения или лидерборды (раздел 11).
  • «Дополнительный таргет: виджет или NSE» — галка для второго таргета приложения: виджета или Notification Service Extension (rich-push — картинки в пушах). Nursery создаст для него отдельный Bundle ID и профиль. Если выбран проект («Выбрать проект…», «Сканировать таргеты»), Nursery сам найдёт таргет расширения, а если в проекте используются App Groups — зарегистрирует группу и привяжет её к обоим App ID. Без проекта создаётся <bundle>.NotificationService без App Groups. Поддерживается один дополнительный таргет; после создания сертификатов галка блокируется.

По кнопке «Создать сертификаты» Nursery выполняет цепочку: API-ключ ASC (если ещё нет) → регистрация Bundle ID → настройка capabilities → distribution-сертификат с приватным ключом → provisioning-профиль. Прогресс и лог — в панели операций. Если приложение привязано к Notion, готовый cert.zip и служебные поля (Team ID, Issuer ID) автоматически сохранятся в карточку.

Умное переиспользование

Nursery не плодит дубли на аккаунте:

  • API-ключ — один на команду (лимит Apple). Если у другого приложения того же аккаунта ключ уже есть, он просто переиспользуется.
  • Distribution-сертификат — если в аккаунте уже есть сертификат, чей приватный ключ лежит у другого приложения в Nursery, файлы скопируются, новый выпускаться не будет (в логе «♻️ Переиспользуем существующий сертификат»).
  • Лимит Apple — 2 сертификата Apple Distribution. Если оба слота заняты чужими (не созданными в Nursery) сертификатами, а в папке приложения нет своего, Nursery отзовёт все сертификаты этого типа, чтобы освободить место, — это видно в логе. Учтите это, если тем же аккаунтом подписываете что-то вне Nursery.

Повторный запуск безопасен: когда сертификаты уже созданы, «Управление» → «Capabilities» работает в режиме обновления — меняются только capabilities и перевыпускается профиль, сертификат и ключи не трогаются. Capabilities из списка Nursery, которые не отмечены в окне, будут сняты в Developer Portal; исключения — In-App Purchase, Game Center и WeatherKit, их Nursery не снимает никогда. Capabilities, которых нет в списке Nursery, не трогаются.

Импорт

Если сертификаты уже есть (сделаны коллегой или в другом инструменте) — кнопка «Импорт». Источники: страница Notion (Nursery сам найдёт cert.zip) или вручную — перетащите файл, папку или .zip с файлами .cer / .key / .mobileprovision / .p12 / .p8.

  • Поле Issuer ID нужно только для загрузки в ASC (метаданные, билды); для локальной сборки — не обязательно. Его нет ни в одном файле, поэтому вводится отдельно.
  • Один лишь .p8 (API-ключ) сертификатами не считается — для сборки нужны .cer + .key + .mobileprovision.
  • Из .mobileprovision Nursery сам вытащит Team ID и Bundle ID.

Файлы в папке сертификатов

ФайлЧто это
distribution.cerDistribution-сертификат Apple
<имя>.keyПриватный ключ сертификата — существует только у вас
distribution.p12Сертификат + ключ одним файлом (для Keychain; пароль пустой)
<имя>.mobileprovisionProvisioning-профиль (+ отдельный для дополнительного таргета — виджета или NSE, если включён)
AuthKey_<KeyID>.p8API-ключ App Store Connect

Меню «Управление»: «Папка» открывает эту папку в Finder, «Экспорт .zip» сохраняет всё одним архивом <bundleId>-cert.zip — так сертификаты передаются коллеге.

Приватный ключ существует в единственном экземпляреФайл .key создаётся локально и никуда не отправляется. Если удалить приложение из Nursery или потерять папку — восстановить ключ невозможно, только выпускать сертификат заново. Для важных приложений сделайте «Экспорт .zip» и положите архив в надёжное место.
10

Вкладка «Главная»

Домашняя вкладка приложения. Сверху может показываться баннер о состоянии сети («Прокси не настроен», «Работа без прокси включена», «Защита прокси отключена»). Ниже — карточки:

  • «Прогресс» — три ключевых шага со статусами и кнопками действий:
    • «Сертификаты» — создать / импортировать / управлять (раздел 9);
    • «Приложение создано» — кнопка «Создать» регистрирует приложение в App Store Connect: запись с вашим Bundle ID, названием и основной локалью, плюс первая версия 1.0. До этого шага вкладка «Метаданные» закрыта. Если приложение уже есть в App Store Connect (создано вручную, через Xcode или на другом Mac), нажмите «Привязать существующее…» и укажите его Apple ID (App Store Connect → App Information): Nursery проверит, что Bundle ID совпадает, возьмёт основную локаль и подтянет локали из ASC. «Создать» для уже существующего приложения не сработает — второе с тем же Bundle ID Apple не заведёт;
    • «Метаданные заполнены» — статус синхронизации метаданных.
  • «Apple Account» — имя и Team ID вошедшего аккаунта.
  • «App Store Connect API» — Issuer ID, Key ID и статус P8-ключа. Ключ создаётся автоматически при выпуске сертификатов (или приходит с импортом) и используется для всех API-операций: метаданных, скриншотов, загрузки билда.
  • «Прокси» — текущий прокси аккаунта, кнопки изменения и проверки.
11

Метаданные

Вкладка открывается после создания приложения в ASC. Если приложение добавлено из Notion, тексты подтянутся из карточки автоматически — но только в пустые поля, ручные правки не перетираются.

Для обновлений нужен черновикМетаданные загружаются в редактируемую версию (статус PREPARE_FOR_SUBMISSION). У нового приложения она создаётся автоматически. Если же вы обновляете живое приложение — привяжите его на «Главной» («Привязать существующее…»), если ещё не сделали этого, и создайте новую версию кнопкой + в шапке, иначе получите ошибку «Нет редактируемой версии в App Store Connect».

Локали

Карточка «Локали»: чипы языков стора — с названиями языков, код локали виден в подсказке при наведении. Основная локаль помечена бейджем «Основная», прочие удаляются крестиком (если в языке уже есть тексты — с подтверждением), новые добавляются чипом «Добавить локаль»: в окне есть поиск по названию или коду, и можно отметить сразу несколько языков. Переключение чипа показывает форму этой локали.

Сменить основную локаль — правый клик по языку → «Сделать основной». До создания приложения в ASC смена только локальная; у созданного приложения Nursery меняет основную локаль прямо в App Store Connect — для этого нужны прокси и API-ключ.

Наследование от основной локалиЕсли у локали, кроме основной, поля не заполнены — при синхронизации в неё копируются данные из основной (подзаголовок, описание, ключевые слова, URL, «Что нового»). Копия делается в момент загрузки, локально пустые поля так и остаются пустыми. Заполняйте только то, что реально переведено.

Кнопка с круговой стрелкой рядом с заголовком — «Подтянуть локали из App Store Connect»: добавляет локали, которые есть в ASC, но отсутствуют локально, вместе с их текстами. Существующие локальные данные при этом не перезаписываются. Нужен только API-ключ; работает повторно; та же кнопка есть на вкладке «Скриншоты». Полезно для приложений, которые уже живут в сторе, и при переносе на другой Mac.

AI-перевод локалей

Описание, подзаголовок и ключевые слова можно перевести из основной локали во все остальные — своим API-ключом OpenAI или DeepSeek (запросы оплачиваются у провайдера). Подключение: Настройки → «Интеграции» → «AI-переводы локалей» → «Подключить» — выберите провайдера и вставьте ключ, он хранится в Keychain. Сам перевод — кнопка со значком перевода рядом с заголовком «Локали» (активна, когда языков больше одного), окно «Перевод локалей»:

  • «Что переводить» — описание, подзаголовок, ключевые слова и What's New (описание обновления). Ключевые слова не переводятся дословно, а подбираются под поиск в App Store на языке локали (ASO-адаптация).
  • По умолчанию переводится только недостающее — пустые поля и копии из основной. Галка «Перевести всё заново» затирает существующие переводы: включайте, когда поменяли тексты основной.
  • «Перевести и основную локаль» — для приложений, где тексты основной написаны не на её языке (например, основная — тайский, а тексты английские).
  • При первом переводе Nursery запоминает тексты основной как эталон и дальше переводит с него, даже если основную потом переписать; кнопка «Обновить эталон» снимает его заново.

Переводы появляются в полях локалей — проверьте их и залейте как обычно, кнопкой «Загрузить в ASC».

Поля и лимиты

Форма локали: «Подзаголовок», «Ключевые слова» (через запятую, без пробелов — пробелы тоже считаются в лимит), «URL политики конфиденциальности», «Описание», для обновлений — «Что нового» (у версии 1.0 поле скрыто — Apple его игнорирует). Счётчики лимитов App Store:

ПолеЛимит
Название приложения30
Подзаголовок30
Ключевые слова100
Описание / Что нового4000
URL255

При превышении счётчик краснеет, и загрузка блокируется — под кнопкой «Загрузить в ASC» будет написано, какое поле и в какой локали не влезло. Название приложения одно на все локали.

Карточки настроек

  • «Основная категория» (обязательна) и «Дополнительная категория». У категории Games появляются две необязательные подкатегории — как в самом App Store Connect.
  • «Доступность по регионам» — плитка «Все страны» или регионы; стрелка на плитке региона открывает выбор отдельных стран.
  • «Платформы» — чекбоксы «Mac App Store» и «Vision Pro»: публиковать ли iOS-приложение также на этих платформах.
  • «Соответствие (EU DSA)» — чекбокс «Объявить аккаунт „не трейдером"»: при загрузке метаданных Nursery выставит trader status аккаунта в «не трейдер» (Business → Compliance). Действие на уровне аккаунта, повторный запуск безвреден; выключенный чекбокс статус не трогает вообще. Включайте, только если вы действительно не трейдер по EU DSA. Требует живой cookie-сессии.
  • «Возрастной рейтинг» — анкета Apple. Можно завести шаблоны и назначить один дефолтным; без шаблона применяется рейтинг 4+. Итоговую отметку (4+/9+/13+/16+/18+) App Store вычисляет из ответов анкеты.
  • «Цены и доступность» — цена (по умолчанию Free; базовая территория — США, остальные цены Apple считает сам).
  • «Контакты для обзора» — контакты для команды ревью Apple. Имя, фамилия и email подставляются из аккаунта в пустые поля автоматически; телефон Nursery берёт из данных Developer-аккаунта, а кнопка «Перегенерировать» создаёт номер страны аккаунта. Номер нужен в международном формате (с + и кодом страны) и обязательно мобильный: невалидный или городской номер подсвечивается предупреждением под полем — с ним App Review уйдёт без контактов (заметки и демо-аккаунт сохранятся). Если номер не примет сам ASC, контакты тоже сохранятся без него — в логе будет подсказка вписать их вручную. Демо-аккаунт (логин/пароль) указывайте, если для ревью нужен вход в приложение. Там же — «Заметки для ревьюера» и «Вложения»: видео или документы для App Review (перетащите файлы или нажмите «Добавить файл...»); при загрузке метаданных они заменяют вложения в ASC.

Загрузка

Кнопка «Загрузить в ASC» отправляет всё по шагам: copyright (генерируется автоматически из имени владельца аккаунта) и тип релиза → категории → тексты локалей → цена → доступность → права на контент → возрастной рейтинг → контакты ревью → App Privacy → платформы → DSA, а если включены — ещё Game Center и покупки (см. ниже). Тип релиза ставится «вручную» — после аппрува Apple версию выпускаете вы, а не автомат.

Ответы-декларации Nursery ставит самПри загрузке App Privacy заполняется как «Data Not Collected» (данные не собираются) — ответы, которые уже были в App Store Connect, заменяются; права на контент — «не использует сторонний контент». При привязке билда декларация шифрования ставится как «шифрование не используется». Если в приложении есть аналитика, реклама, сбор данных пользователей или нестандартное шифрование — после загрузки поправьте эти ответы в App Store Connect вручную.

Шаги независимы: если часть не прошла, появится окно «Метаданные загружены не полностью» со списком — исправьте причину и запустите синхронизацию ещё раз, успешные шаги повторятся безболезненно. Для кнопки нужны и API-ключ, и живая cookie-сессия (см. таблицу в разделе 7) — если чего-то не хватает, причина будет написана под кнопкой.

Game Center и покупки

В «Метаданных» есть две карточки — «Game Center» (достижения и лидерборды) и «Встроенные покупки» (consumable, non-consumable и non-renewing; подписки с автопродлением не поддерживаются). Включите нужную галкой и наполните одним из способов:

  • JSON — перетащите файл на карточку или импортируйте в редакторе. Образец формата — ссылка «Скачать пример JSON» прямо в карточке.
  • Вручную — «Добавить» или «Редактировать…» открывает редактор: список слева, форма справа, тексты по локалям, картинка достижения/лидерборда или скриншот покупки для ревью — перетаскиванием или выбором файла. Ошибки, которые ASC не примет, блокируют сохранение; нехватка картинок или текстов — только предупреждение.

При загрузке метаданных достижения, лидерборды и покупки создаются в ASC, существующие обновляются; отдельно их можно загрузить кнопками «Загрузить Game Center» и «Загрузить покупки» — для этого хватает API-ключа. «Убрать» удаляет конфиг только из Nursery — в App Store Connect ничего не удаляется. В заявку на ревью они добавляются отдельно, на вкладке «Публикация» (раздел 14).

Ограничения AppleДля достижений и лидербордов включите Game Center в capabilities сертификатов (раздел 9) — иначе карточка напомнит об этом. У одного достижения — не больше 100 очков, у всех вместе — не больше 1000. Покупку без скриншота для ревью создать можно, но на ревью Apple её не пустит.
12

Скриншоты

Устройства

Карточка «Устройства» — отметьте, под какие экраны загружать:

УстройствоЦелевой размер (портрет)Архив в Notion
iPhone 6.9″1320 × 2868iphone69.zip
iPhone 6.5″1242 × 2688iphone65.zip
iPhone 6.3″1206 × 2622iphone63.zip
iPhone 6.1″1170 × 2532iphone61.zip
iPad 13″2048 × 2732ipad13.zip

Точно попадать в размеры не нужно — Nursery сам приведёт картинки к целевым при загрузке. Но пропорции лучше соблюдать: подгонка выполняется растяжением под целевой размер, картинка с сильно другим соотношением сторон исказится. Картинки при этом перекодируются, прозрачность (alpha) теряется.

Источники

Для каждого устройства скриншоты берутся из одного из двух мест (локальный выбор всегда приоритетнее Notion):

  • Notion — архив с соответствующим именем на странице приложения (бейдж в строке устройства показывает, найден ли он);
  • Свои файлы — кнопка со стрелкой в лоток («Выбрать скриншоты (.png/.jpg) или видео App Preview (.mov/.mp4): папку, .zip или файлы») или просто перетащите папку/архив/файлы на строку устройства. Вернуться к Notion-архиву можно кнопкой «Убрать локальный архив».

Видео App Preview. Файлы .mov/.mp4 в наборе загружаются как App Preview — без изменений, поэтому требования Apple к разрешению и длительности соблюдайте сами. Лимит Apple — до 10 скриншотов и до 3 видео на устройство в каждом языке; если выбрать больше, Nursery предупредит окном «Слишком много файлов» — уберите лишнее и повторите.

Порядок скриншотовВ App Store они встают в порядке имён файлов по алфавиту. Нумеруйте с ведущим нулём: 01.png, 02.png, 03.png… — иначе 10 встанет перед 2.

Локали и загрузка

Карточка «Локали» — в какие языки грузить (кнопки «Все» / «Снять все»). При первой загрузке по умолчанию отмечены все локали, при обновлении — ни одной (обычно обновлять скриншоты нужно не везде). Кнопка запуска подписана по выбору: «Загрузить во все локали (N)» или «Загрузить в N локалей» (пока локали не выбраны — «Загрузить скриншоты»); статус-карточка покажет «Скриншоты загружены», когда всё готово.

Повторная загрузка заменяет наборЗагрузка скриншотов в локаль удаляет прежние скриншоты этой локали и ставит новые — не добавляет к существующим.

Если выбранной локали ещё нет в ASC, скриншоты в неё не загрузятся (в логе «В ASC нет локализаций для: … — пропускаю. Сначала запусти Метаданные.»). Порядок правильный: сначала метаданные (создают локали), потом скриншоты.

A/B-тесты страницы (Product Page Optimization)

Карточка «Куда загружать» выбирает цель: «Основная страница» или вариант A/B-теста из ASC (кнопка ↻ обновляет список). Новый тест — «Создать тест…»: название (видно только в ASC), 1–3 варианта (оригинал остаётся контрольной группой) и доля трафика на тест. У каждого варианта свои папки и свои локали: переключили цель — списки устройств и языков ниже меняются; устройство без своей папки возьмёт файл основной страницы, а если нет и его — архив из Notion. Можно загрузить сразу во все настроенные цели. Менять скриншоты можно только у тестов, которые не в ревью, не запущены и не завершены; сам запуск теста — вручную в App Store Connect после ревью вариантов.

13

Сборка IPA

Для сборки из исходников нужен установленный Xcode (не только Command Line Tools — их Nursery распознаёт и попросит поставить полный Xcode и один раз его запустить). Собранные и импортированные .ipa хранятся локально в библиотеке билдов.

Исходники

Карточка «Исходники»: перетащите .xcodeproj / .xcworkspace или выберите через «Выбрать…». Поддерживаются и Flutter-проекты — укажите папку проекта, Nursery сам найдёт ios/Runner.xcworkspace и прогонит flutter pub get и flutter build перед сборкой (Flutter должен быть установлен). Если путь не выбран, а приложение привязано к Notion, Nursery возьмёт source.zip со страницы.

Входить в аккаунт в самом Xcode не нужно: Nursery подписывает билд вручную — сертификатом и профилями из своей папки, команду и профиль подставляет сам, аккуратно внося правки в проект только на время сборки и возвращая его в исходное состояние после.

Сборка и отправка

  • «Собрать IPA» (⌘B) — собирает и подписывает. Требуются созданные (или импортированные) сертификаты.
  • После сборки появится карточка «Готов к отправке» с кнопкой «Отправить в App Store Connect».
  • Готовый .ipa со стороны — кнопка «Импортировать…» или перетащите файл прямо в окно.
Сборки идут по однойЗащита прокси при сборке работает на уровне всей системы, поэтому две сборки одновременно невозможны. Если запустить вторую, она встанет в очередь со статусом «В очереди» и стартует, когда освободится первая.

Библиотека билдов

Карточка «Локальные IPA»: все билды с версией, размером и датой. У незагруженных — кнопка «Загрузить в App Store Connect», у загруженных — зелёная пометка «Загружено». Контекстное меню: «Показать в Finder», «Удалить». После загрузки билд уходит на обработку к Apple (обычно 5–30 минут) и появляется на вкладке «Публикация».

Версия должна растиНельзя загрузить билд с тем же CFBundleShortVersionString, что у уже существующей в ASC версии (если она не в статусе черновика). Поднимите номер версии в проекте и пересоберите — иначе загрузка остановится с понятным сообщением.

Если сборка упала

Текст ошибки в панели операций содержит хвост лога xcodebuild — по нему видно причину. Частые случаи:

  • «Отсутствуют файлы сертификата» — в папке нет .cer/.key/.mobileprovision. Запустите «Создать сертификаты» (или проверьте, что импорт прошёл).
  • ValidateDevelopmentAssets — это не про подпись, а про сам проект: настройка Development Assets ссылается на папку (обычно «Preview Content»), которой в исходниках нет. Создайте её или уберите ссылку в настройках таргета Xcode.
  • Command Line Tools вместо Xcode — установите полный Xcode из App Store и запустите его один раз.

Полный лог всегда можно скопировать в панели операций («Логи» → «Скопировать логи») или отправить разработчику кнопкой «Отправить лог».

14

Публикация

Вкладка «Публикация» — зеркало App Store Connect: все версии приложения со статусами понятными словами («Готовится к отправке», «Ждёт ревью», «В продаже»…; исходный статус ASC — в подсказке при наведении), а под статусом — что делать дальше. Кнопка «Обновить» перечитывает состояние из ASC. Цвет бейджа: зелёный — версия в продаже, красный — отклонена, снята с ревью или билд отклонён, оранжевый — всё остальное (черновик, ревью, обработка).

Финальные действия выполняются здесь — и только вручную, в три шага:

  1. Прикрепите билдУ версии в статусе «Готовится к отправке» нажмите «Прикрепить билд» (или «Изменить», чтобы заменить) и выберите билд. Он появляется в списке после обработки Apple. Заодно Nursery автоматически проставит декларацию шифрования (Export Compliance) — «шифрование не используется». Если приложение использует нестандартное шифрование, поправьте ответ в App Store Connect.
  2. Создайте черновик заявкиКнопка «Создать черновик» (активна, когда билд прикреплён) собирает заявку на ревью: версия плюс, если они включены в «Метаданных», Game Center и покупки. На ревью при этом ничего не отправляется — версия переходит в статус «В черновике заявки».
  3. Отправьте на ревьюНа месте «Создать черновик» появится «Отправить». Подтверждение «Отправить версию X на ревью?» — уйдёт всё, что лежит в черновике заявки. Учтите: отменить отсюда нельзя — снять версию с ревью можно только на сайте App Store Connect.

Если Game Center или покупки нужно добавить в уже созданный черновик — кнопка «Добавить в заявку: …» вверху вкладки. Она появляется, когда они включены в «Метаданных», и тоже ничего не отправляет на ревью.

Новая версия существующего приложения создаётся кнопкой + рядом с чипом версии в шапке: Nursery предложит следующий номер, вам останется подтвердить. Затем заполняйте «Что нового», скриншоты и билд как обычно.

Почему Submit не автоматизированТак задумано: Nursery снимает рутину, но отправка на ревью — необратимое решение о релизе, и оно остаётся за вами.
15

Быстрая загрузка

Кнопка «Быстрая загрузка» в шапке приложения прогоняет весь конвейер одним запуском. Перед стартом — визард из пяти шагов:

  1. Сертификаты и языкОсновная локаль (с ней создаётся приложение в ASC; позже сменить её можно только в «Метаданных»), дополнительный таргет (виджет или NSE), выбор capabilities.
  2. МетаданныеТа же форма, что на вкладке «Метаданные».
  3. СкриншотыУстройства, источники, локали.
  4. ИсходникиПроект для сборки (или source.zip из Notion).
  5. ПодтверждениеСписок «Что будет выполнено» и кнопка «Запустить».

Порядок выполнения: сертификаты → создание приложения в ASC → сборка IPA → далее параллельно: загрузка метаданных, загрузка скриншотов и отправка IPA в ASC. Уже выполненные шаги распознаются автоматически: на них появляется баннер «Уже сделано», а в сводке — пометка, что они будут пропущены. Между шагами Nursery делает небольшие случайные паузы.

Прервались на середине — запустите сноваЕсли какой-то шаг упал (или вы нажали «Отменить загрузку»), уже сделанное сохраняется: созданный сертификат, запись в ASC, собранный билд никуда не денутся. Повторная «Быстрая загрузка» продолжит с места и пропустит готовые шаги. При частичном сбое параллельной фазы будет прямая подсказка «Запусти повторно — пропустит уже сделанное». Но кнопка видна, только пока сессия активна и метаданные ещё не загружены: если метаданные успели загрузиться, а упали скриншоты или отправка билда, кнопка исчезнет — оставшееся доделайте вручную на вкладках «Скриншоты» и «Сборка».

Во время работы кнопка в шапке превращается в «Отменить загрузку». Пока идут сертификаты, создание приложения или сборка, другие операции по этому приложению не запускаются — эти шаги выполняются строго по одному. По завершении остаются ручные шаги на «Публикации» — привязка билда, черновик заявки и отправка (раздел 14). Защита прокси, напомним, включается только на стадии сборки; параллельная фаза идёт через обычный прокси.

16

Интеграция с Notion

Notion используется как хранилище ресурсов приложения: карточка = приложение, из неё Nursery подтягивает метаданные, исходники, сертификаты и скриншоты, а служебные поля дописывает обратно. Это удобный способ передавать материалы между менеджером и тем, кто загружает.

Как оформить карточку NotionКакие свойства и файлы должны быть в карточке (Bundle ID, блок Metadata, source.zip, cert.zip, архивы скриншотов) — с примерами в PDF со структурой карточки Notion.

Подключение

Настройки → «Интеграции» → «Подключить». Создайте интеграцию на notion.so/my-integrations, выдайте ей доступ к нужным страницам (Share → пригласить интеграцию) и вставьте Internal Integration Token (ntn_…). Токен хранится в Keychain. Свой токен всегда приоритетнее токена из лицензии; если токен входит в вашу лицензию — подключать ничего не нужно.

«Notion API 404 / object not found»Почти всегда означает, что страница не расшарена с интеграцией. Откройте карточку в Notion → Share → добавьте вашу интеграцию.

Что Nursery читает и что пишет

  • Читает: название, Bundle ID, App ID, Team ID, Issuer ID, ссылку на политику конфиденциальности; блок Metadata (строки Ключ: значение — Subtitle, Description, Keywords; они подставляются в основную локаль, если там эти поля пустые); файлы source.zip, cert.zip и архивы скриншотов.
  • Пишет обратно (по мере работы, без вашего участия): сгенерированный Bundle ID, Issuer ID, Team ID, App ID, email аккаунта и готовый cert.zip. Статусы версий и публикации в Notion не пишутся.

Тексты из блока Metadata подтягиваются в метаданные только в пустые поля — ваши ручные правки не перетираются.

Правки в Notion не видны?Карточка кэшируется клиентом Notion, а Nursery читает актуальное состояние через API. Если кажется, что данные «не подтянулись» или «не записались», сначала жёстко обновите страницу в Notion (⌘R) — чаще всего всё уже на месте.
17

Обмен файлами и бэкапы

Nursery принципиально не имеет облака и синхронизации: все данные — на вашем Mac. Передача между коллегами — явная, файлами:

  • Сертификаты — «Управление» → «Экспорт .zip» у отправителя, «Импорт» у получателя. Или положите cert.zip на страницу Notion — коллега импортирует «Из Notion» (а при добавлении приложения из Notion импорт запустится сам).
  • Билды — «Показать в Finder» → передайте .ipa → у получателя «Импортировать…» или drag&drop в окно.
  • Исходники и скриншоты — через файлы на странице Notion (source.zip, архивы скриншотов).
  • Тексты локалей — отдельного файла обмена нет, но получатель может подтянуть описания, ключевые слова и подзаголовки из ASC кнопкой синка локалей или сразу при привязке приложения кнопкой «Привязать существующее…» на «Главной» (категории, цену, рейтинг и контакты синк не переносит).
БэкапПапка данных — ~/Library/Application Support/sv.NurseryApp/. Самое ценное в ней — приватные ключи сертификатов: они существуют только у вас. Экспортируйте cert.zip важных приложений или включите папку в резервное копирование (Time Machine и т.п.).
18

Обновления и поддержка

  • Обновления приходят автоматически: Nursery проверяет их при запуске и дальше каждые 6 часов и показывает окно «Доступна новая версия». Проверить вручную: Настройки → «Обновления» → «Проверить обновления». После установки приложение перезапустится само.
  • Ошибка операции — в панели операций нажмите «Отправить лог»: опишите, что делали, полный лог прикрепится автоматически и уйдёт разработчику.
  • Идеи и вопросы — карточка «Обратная связь» в настройках или Telegram @R_R_E_B.
19

Частые вопросы

В расширении «Server unreachable»

Приёмник cookies работает только пока в Nursery открыто окно входа. Сначала нажмите «Войти» в приложении, потом — «Sync Cookies» в браузере.

Расширение пишет «No Apple session»

Вы не залогинены на appstoreconnect.apple.com в этом браузере (или профиле). Откройте сайт, войдите, затем жмите «Sync Cookies».

Синхронизируется не тот аккаунт

Браузер держит одну активную сессию Apple на профиль. Выйдите из первого аккаунта на сайте и войдите под нужным — или используйте отдельный профиль браузера под каждый Apple ID (раздел 7). Если приложение уже привязано к другому аккаунту, Nursery такие cookies не примет и покажет, какой аккаунт пришёл и к какому привязано приложение.

Кнопка неактивна — почему?

У основных кнопок причина написана прямо под ними, у остальных — в подсказке при наведении курсора («Нужен прокси…», «API ключ не загружен», «Выберите хотя бы одно устройство» и т.п.). Это первый шаг диагностики почти любой ситуации.

Вкладка «Метаданные» размыта и не редактируется

Приложение ещё не создано в App Store Connect. Вкладка «Главная» → карточка «Прогресс» → строка «Приложение создано» → «Создать».

«Нет редактируемой версии в App Store Connect»

Метаданные загружаются в черновик (PREPARE_FOR_SUBMISSION). Для обновления живого приложения сначала создайте новую версию кнопкой + в шапке.

Статус «Сессия истекла»

Cookie-сессия Apple закончилась — это норма, повторите вход через расширение. Операции по API-ключу (скриншоты, загрузка, версии, Submit) работают и без неё.

Загруженный билд не виден на «Публикации»

Apple обрабатывает билд после загрузки — обычно 5–30 минут. Нажмите «Обновить» позже. Письмо от Apple о завершении обработки придёт на почту аккаунта.

Сборка идёт с реального IP, хотя прокси задан

Не поднялась системная защита сборки. Включите NurseryApp в Системных настройках → «Объекты входа и расширения», либо не соглашайтесь на «Продолжить без защиты», когда Nursery об этом спрашивает (раздел 8).

Нужен ли вход в Xcode?

Нет. Nursery подписывает сборку вручную своими сертификатами и профилями — аккаунт в Xcode и выбор Team не требуются.

Как перенести приложение на другой Mac?

Экспортируйте сертификаты («Экспорт .zip»), передайте .ipa-билды при необходимости. На новом Mac добавьте приложение с тем же Bundle ID, импортируйте архив, затем на «Главной» нажмите «Привязать существующее…» и укажите Apple ID приложения — вкладка «Метаданные» откроется, а локали с текстами (описания, ключевые слова, подзаголовки) подтянутся из ASC. Локали, которые уже есть в Nursery, не перезаписываются. А вот категории, цену, возрастной рейтинг и контакты для ревью синк не восстанавливает — их заполните заново. Лицензию, привязанную к старому Mac, поможет перепривязать разработчик.

User Guide

Nursery is a native macOS app that walks your iOS app through the entire App Store Connect publishing path — certificates, creating the app record, metadata, screenshots, building and uploading the build — all from a single window.

01

About the app

Nursery automates the routine part of publishing. You add an app (manually or from Notion), sign in to your Apple account once — and from there Nursery issues the certificates and profiles itself, creates the app in App Store Connect, uploads metadata to all locales at once, resizes and uploads screenshots, builds the IPA from source, and submits the build to ASC.

Two actions are deliberately left to you: attaching the build to a version, and submitting for review (Submit for Review). The machine takes the routine — the release decision stays with a human.

How Nursery talks to Apple

Two independent mechanisms are used — understanding the difference clears up most "why isn't it working" questions:

  • Cookie session — "browser" authentication that reaches Nursery through the "Nursery Cookie Sync" extension (section 7). It lives for a limited time and must be periodically refreshed by signing in again.
  • App Store Connect API key (a .p8 file) — Nursery creates it itself the first time you issue certificates. It doesn't expire: screenshots, build uploads, versions, and Submit all work with it even long after the cookie session has expired.

Requirements

  • A Mac with Apple Silicon or Intel running macOS 15.6 or later (the app is native, not a web wrapper).
  • Xcode — only if you build the IPA from source. For everything else (metadata, screenshots, uploading a ready-made .ipa) Xcode is not required.
  • A Chromium-based browser (Chrome, Edge, Brave, Arc, etc.) — for the "Nursery Cookie Sync" extension from the Chrome Web Store. Safari and Firefox are not supported.
Everything is stored locallyYour app data — certificates, keys, builds, metadata — lives only on your Mac in ~/Library/Application Support/sv.NurseryApp/. No cloud: what to share, and with whom, is up to you (see section 17).
02

Installation and license

  1. Install the appDownload the .pkg installer from the website and go through the standard installation. Updates then arrive automatically (see section 18).
  2. Activate your licenseOn first launch the "Activate NurseryApp" window opens. Enter a license key in the format NRSY-XXXX-XXXX-XXXX-XXXX and click "Activate" — the dashes are inserted automatically.
  3. Or try it for freeThe "Try 3 days free" button starts a trial period — no key and no card. The trial is granted once per Mac: reinstalling the app does not reset it.

Keys are issued personally — to buy or renew, message us on Telegram: @R_R_E_B. Your license status, remaining days, and the "Refresh status" button are in Settings, in the "Account & License" card.

How binding works

  • The key is bound to a Mac. Team keys can be activated on several machines — the seat limit is baked into the key. If it's exceeded, you'll see "Device limit reached for this key" — get in touch to free up a slot or raise the limit.
  • Changed your Mac? Activating on a new machine will report that the key is bound to another Mac — rebinding is done on the developer's side, just message us on Telegram.
  • Offline mode. The license is rechecked over the network in the background; without a connection to the server, the app keeps working for up to 14 days. Longer than that and a lock window appears with a "Recheck" button: connect to the internet and click it.
  • Renewal. After payment there's nothing to re-enter: the new term is picked up by the background check on its own — even if access was already blocked because the license expired. To avoid waiting, click "Recheck" in the lock window.

The "Access blocked" window always explains the reason (expired, key revoked, offline too long, key bound to another machine) and lets you enter a new key or check for updates without entering the app.

03

Quick start: from zero to an uploaded build

The full path for a new app looks like this:

  1. Add an appThe "Add app" button at the bottom of the sidebar (or "Notion" / "Manual" if Notion is connected). A name is enough: an empty Bundle ID is generated from it — section 6.
  2. Sign in to your Apple accountThe "Sign In" button in the header — sign-in goes through the "Nursery Cookie Sync" browser extension; you never type your login and password into Nursery — section 7.
  3. Set a proxy (or allow working without a proxy)Each account gets its own proxy: the "Proxy" card on the Home tab — section 8.
  4. Run "Quick Upload"The "Quick Upload" button in the header opens a five-step wizard: certificates & language, metadata, screenshots, source, confirmation. Everything after that runs automatically — section 15.
  5. Attach the build and submit for reviewOnce the build is processed in ASC, on the "Publication" tab click "Attach build", then "Create draft" and "Submit" — section 14.

Each step can also be done separately, from its own tab — "Quick Upload" simply runs the same chain with one button and skips whatever is already done.

On first launch Nursery shows a short onboarding — a few slides on how everything works. After that, as you go, a tip with a pulsing outline appears next to the button you need: close it and it won't show again. If a main button is disabled, the reason is written right under it (for the others — in the tooltip on hover). To bring closed tips back — Settings → "Reset tips"; the onboarding is there too, "Show onboarding".

04

Interface

Sidebar: the app list

  • Search — by name, Bundle ID, and app number (with a hash too: #894).
  • Sorting — the arrows button: by name or creation date, ascending/descending.
  • Groups — apps can be arranged into colored groups (sections collapse). A group is assigned when adding, via the context menu ("Group"), or in bulk: the "Select" item turns on multi-select mode with "Group" and "Delete" actions for all checked items.
  • Status — a colored dot on the right of each row: authorized (green), session expired (yellow), not authorized (red), operation in progress (blue).
  • Context menu — "Properties…" (name, Bundle ID, account email, primary locale, proxy), "Group", "Delete".

Tabs of the selected app

TabShortcutWhat's there
"Home"⌘1Progress, account, proxy, API key — section 10
"Metadata"⌘2Texts, locales, AI translation, categories, price, rating, Game Center and purchases — section 11
"Screenshots"⌘3Screenshots and App Preview videos, product page A/B tests, upload — section 12
"Build"⌘4Source, building the IPA, build library — section 13
"Publication"⌘5Versions in ASC, attaching the build, the review draft and submission — section 14

In the header above the tabs: the auth status, the Bundle ID, the "Open in Notion" button (if the app is linked to a card), the account capsule with sign-in/out, and the "Quick Upload" button. To the left of the tabs — a chip for the current version in ASC and a + button to create a new version.

Operations panel

Opened with the button in the top-right corner (⌘0). It's a history of everything Nursery has done with this app: each operation is a card with progress, a status ("In progress", "Queued", "Success", "Error", "Cancelled") and an expandable log. Here you can:

  • cancel a running operation or remove it from the queue;
  • expand the "Logs" and copy them;
  • for a failed operation — click "Send log": a short description of what you were doing, plus the full log, goes to the developer;
  • clear the whole history ("Clear history").

Notifications

A pop-up toast in the window announces when an operation finishes ("Certificates created", "IPA built", "Screenshots uploaded"…). If the Nursery window isn't active at that moment, a macOS system notification with a sound arrives instead of a toast — so you can safely switch to another app during a long build. Notification permission is requested once, on first launch.

05

Settings

The "Settings" button is at the bottom of the sidebar. In the window header: a theme switch (light/dark) and "Interface language" — System, English, Русский, Українська (after a change, Nursery will offer to restart).

  • "Account & License" — key status, remaining days, "Refresh status", renewal via Telegram.
  • "Integrations" — connecting your Notion token (section 16) and "AI Locale Translations" — your own OpenAI or DeepSeek API key for translating descriptions (section 11).
  • "Network" — the "Work Without Proxy" toggle: allow operations without a proxy. The setting is global and applies to all apps. Careful: Apple will see the device's real IP (section 8).
  • "Updates" — the current version and the "Check for updates" button.
  • "Browser extension" — the "Copy extension link" button (the "Nursery Cookie Sync" page in the Chrome Web Store) and short "How to install" instructions (section 7).
  • "Feedback" — message the developer straight from the app.
  • "Show onboarding" — show the intro slides again.
  • "Reset tips" — bring back the tips you closed next to buttons: they will appear again at their steps.
06

Adding an app

At the bottom of the sidebar: if Notion is not connected — a single "Add app" button (manual mode); if it is connected — two: "Notion" and "Manual".

Manually

  • "Title" — required.
  • Bundle ID — for example com.example.myapp. The magic-wand button generates it from the name.
  • App Number — an optional sequential number for your own numbering (shown in the sidebar as #894, and search works by it).
  • Proxy URL — you can set it now or later.
  • "Group" — an existing one or "+ New Group…".

From Notion

Paste the "Page URL or ID" of the app's card — Nursery will pull in everything it finds in the card and configure the app right away:

  • name, Bundle ID, number, Issuer ID;
  • App ID — if the app already exists in App Store Connect and its ID is recorded in the card, Nursery immediately marks the "App created" step as done and unlocks metadata;
  • API key — the AuthKey_*.p8 file from the card is downloaded automatically;
  • certificates — if a cert.zip is attached to the page, an automatic import starts (the add window shows the status line "Found cert.zip in Notion — importing…");
  • if the Bundle ID in the card is empty, Nursery generates one and writes it back to Notion.

The card structure is covered in section 16.

After creation in ASCThe Bundle ID and Apple ID are locked — the app already exists in App Store Connect and it's too late to change them. After that, the primary locale can only be changed on the Metadata tab — right-click a language → "Make primary". The other properties can be edited via "Properties…" at any time.
07

Signing in to your Apple account

Nursery never asks for your Apple ID login and password. Sign-in works by transferring the cookie session from your browser — with a single click in the "Nursery Cookie Sync" extension. The extension sends cookies only to a local address on your own Mac (port 5556) and accepts only Apple domains — nothing leaves your machine.

Installing the extension (once)

  1. Copy the extension linkSettings → "Browser extension" → "Copy extension link" (the same button is in the onboarding). The link leads to the "Nursery Cookie Sync" page in the Chrome Web Store.
  2. Install it in your browserOpen the link in the browser where you manage your Apple account — regular Chrome or an anti-detect browser (Octo and the like) — and click Add to Chrome. The link is copied rather than opened automatically precisely because Nursery doesn't know which browser and profile your account lives in. The extension works only in Chromium-based browsers (Chrome, Edge, Brave, Arc, Opera and the like); Safari and Firefox are not supported.

Signing in

Order matters: first "Sign In" in Nursery, then "Sync Cookies" in the browser. The cookie receiver on port 5556 works only while the sign-in window is open — if you press the extension button without it, you'll get "Server unreachable".

  1. Click "Sign In" in NurseryThe button in the app header. The "Sign in with cookies" window opens with the hint "Open App Store Connect in your browser and click the Nursery Cookie Sync extension button." — from that moment Nursery listens and waits.
  2. Log in at appstoreconnect.apple.comIn the browser, under the account you need — as usual, with two-factor. If you're already logged in, just open the ASC tab.
  3. Click the extension icon → "Sync Cookies"The popup shows the state: "Apple session found (N cookies)" — good to go; "No Apple session…" — sign in on the site first. On success — "Synced! <email>", the Nursery sign-in window closes on its own, and the status changes to "Authorized".

After signing in, the "Apple Account" card with the name and Team ID appears on the Home tab.

Session lifetime

  • Nursery checks session liveness in the background roughly every 15 minutes. When Apple ends the session, the status dot turns yellow — "Session expired".
  • This is normal and expected: Apple cookie sessions are short-lived. There's no automatic re-login — just sign in again (the same "Sign In" → "Sync Cookies").
  • An expired session doesn't stop your work: everything that goes through the API key (screenshots, build upload, versions, Submit) keeps working — see the table below.

The "Sign Out" button — two different behaviors

  • Certificates not yet created: "Sign Out" fully resets the account for the app — the session, email, keys, and certificate files are deleted. You can bind a different Apple ID.
  • Certificates already created: "Sign Out" only revokes the current session. The email, certificates, and keys are kept, the account is pinned to the app — you can no longer change the Apple ID, only sign back in to the same one.

Multiple accounts

Cookies are stored separately per app — inside Nursery accounts are isolated. But the source of cookies is the browser, and it holds one active Apple session per profile. So:

  • when setting up a second account, first log out of the first at appstoreconnect.apple.com and log in as the second — otherwise the extension will sync the wrong account;
  • more convenient — a separate browser profile for each Apple account: sessions live in parallel, and you press "Sync Cookies" from the right profile (you'll need to install the extension in each one).
  • if the app is already bound to an account and "Sync Cookies" is pressed in a profile with a different account, Nursery won't accept those cookies: it shows "These cookies are for account …, but this app is linked to …" and keeps the sign-in window open — sync from the right profile. The app's account can only be changed via "Sign Out" (see above).

What needs a cookie session and what needs the API key

OperationWhat's needed
Creating certificates (first time)Cookie session (the API key is created along the way)
Creating the app in ASCCookie session
Metadata ("Upload to ASC")API key and cookie session (some steps — App Privacy, platforms, DSA — go through cookies)
ScreenshotsAPI key only
Building the IPANone of this — a local operation
Uploading the IPA, attaching the build, new version, the review draft and submissionAPI key only
Syncing locales from ASCAPI key only
Game Center and purchases (separate upload), product page A/B tests, changing the primary localeAPI key only
08

Proxy and working without a proxy

Each app (account) can be assigned its own proxy — all of Nursery's traffic to Apple for that account will go through it. It's set when adding the app, in "Properties…", or on the Home tab: the "Proxy" card → "Add" / "Edit".

SOCKS5 and HTTP are supported, with these formats:

socks5://user:pass@host:port
http://user:pass@host:port
user:pass@host:port      (SOCKS5 by default)
host:port:user:pass

The "Check" button makes two requests — direct and through the proxy — and shows both IPs. If they match, you'll see the warning "Proxy is not changing IP — may not be working". Check the proxy before running operations.

How the protection works

  • Regular operations (creating the app, metadata, screenshots, build upload) go through the proxy at Nursery's own level — that part is simple.
  • Building the IPA is a special case: Apple's tools (xcodebuild and others) ignore proxy settings. So for the duration of the build, Nursery routes traffic at the system level via a background helper. The helper is installed automatically; on first install macOS will ask you to allow it in System Settings → General → "Login Items & Extensions" (Allow in the Background).
  • If the helper is off while a proxy is set, a "Proxy protection is off" banner appears on Home with an "Open Settings" button — it takes you straight to the right section.
  • If protection couldn't be enabled at build time, Nursery stops and asks: "Cancel build" (the safe choice, on Enter) or "Continue without protection" — in which case the build's traffic goes through your real IP.

Working without a proxy

The "Work Without Proxy" toggle in Settings (the "Network" card) removes the one requirement — "operations can't run without a proxy". Everything else (sign-in, sessions, keys) works as usual, but requests go through the device's real IP — an orange "Working without a proxy is on" banner on Home reminds you of this. Without a proxy and without this toggle, operations are blocked (a red "Proxy not configured" banner).

09

Certificates

Everything is managed on the Home tab, in the "Progress" card, the "Certificates" row. Signing in and a configured proxy (or working without a proxy allowed) are required.

Creating

The "Create" button opens the "Capabilities for Bundle ID" window:

  • Capabilities list — check the ones you need (there's a search). Push Notifications is on by default (can be turned off); In-App Purchase is marked "always on" — Apple enables it itself. Game Center is a regular checkbox, off by default: turn it on if the app has achievements or leaderboards (section 11).
  • "Additional target: widget or NSE" — a checkbox for the app's second target: a widget or a Notification Service Extension (rich push — images in pushes). Nursery creates a separate Bundle ID and profile for it. If a project is chosen ("Choose Project…", "Scan targets"), Nursery finds the extension target itself, and if the project uses App Groups, it registers the group and links it to both App IDs. Without a project, <bundle>.NotificationService is created without App Groups. One additional target is supported; after the certificates are created, the checkbox is locked.

With the "Create certificates" button, Nursery runs a chain: ASC API key (if there isn't one yet) → register the Bundle ID → configure capabilities → distribution certificate with a private key → provisioning profile. Progress and the log are in the operations panel. If the app is linked to Notion, the finished cert.zip and service fields (Team ID, Issuer ID) are saved to the card automatically.

Smart reuse

Nursery doesn't breed duplicates on an account:

  • API key — one per team (Apple's limit). If another app on the same account already has a key, it's simply reused.
  • Distribution certificate — if the account already has a certificate whose private key lives with another app in Nursery, the files are copied and no new one is issued (in the log: "♻️ Reusing existing certificate").
  • Apple's limit is 2 Apple Distribution certificates. If both slots are taken by other (not created in Nursery) certificates and the app folder has no certificate of its own, Nursery will revoke all certificates of that type to free up a slot — this is visible in the log. Keep this in mind if you sign anything outside Nursery with the same account.

Re-running is safe: once certificates exist, "Manage" → "Capabilities" works in update mode — only the capabilities change and the profile is reissued; the certificate and keys are left alone. Capabilities from Nursery's list that are unchecked in the window will be removed in the Developer Portal; the exceptions are In-App Purchase, Game Center and WeatherKit, which Nursery never removes. Capabilities that aren't in Nursery's list are left alone.

Import

If certificates already exist (made by a colleague or in another tool) — the "Import" button. Sources: a Notion page (Nursery finds cert.zip itself) or manually — drag in a file, a folder, or a .zip with .cer / .key / .mobileprovision / .p12 / .p8 files.

  • The Issuer ID field is only needed for uploading to ASC (metadata, builds); for a local build it's not required. It's not in any file, so it's entered separately.
  • A lone .p8 (API key) doesn't count as certificates — building needs .cer + .key + .mobileprovision.
  • From the .mobileprovision Nursery extracts the Team ID and Bundle ID itself.

Files in the certificates folder

FileWhat it is
distribution.cerApple distribution certificate
<name>.keyThe certificate's private key — exists only on your machine
distribution.p12Certificate + key in one file (for Keychain; empty password)
<name>.mobileprovisionProvisioning profile (+ a separate one for the additional target — a widget or NSE, if enabled)
AuthKey_<KeyID>.p8App Store Connect API key

The "Manage" menu: "Folder" opens this folder in Finder, "Export .zip" saves everything as a single <bundleId>-cert.zip archive — that's how you hand certificates to a colleague.

The private key exists in a single copyThe .key file is created locally and is never sent anywhere. If you delete the app from Nursery or lose the folder, the key can't be recovered — you can only issue a new certificate. For important apps, do an "Export .zip" and keep the archive somewhere safe.
10

The Home tab

The app's home tab. At the top a network-state banner may show ("Proxy not configured", "Working without a proxy is on", "Proxy protection is off"). Below — the cards:

  • "Progress" — three key steps with their statuses and action buttons:
    • "Certificates" — create / import / manage (section 9);
    • "App created" — the "Create" button registers the app in App Store Connect: a record with your Bundle ID, name, and primary locale, plus a first version 1.0. Until this step, the Metadata tab is closed. If the app already exists in App Store Connect (created manually, in Xcode, or on another Mac), press "Link Existing…" and enter its Apple ID (App Store Connect → App Information): Nursery checks that the Bundle ID matches, takes the primary locale, and pulls the locales from ASC. "Create" won't work for an app that already exists — Apple won't register a second one with the same Bundle ID;
    • "Metadata complete" — the metadata sync status.
  • "Apple Account" — the name and Team ID of the signed-in account.
  • "App Store Connect API" — Issuer ID, Key ID, and the P8 key status. The key is created automatically when certificates are issued (or comes with an import) and is used for all API operations: metadata, screenshots, build upload.
  • "Proxy" — the account's current proxy, plus buttons to edit and check it.
11

Metadata

The tab opens after the app is created in ASC. If the app was added from Notion, the texts are pulled from the card automatically — but only into empty fields; manual edits are never overwritten.

Updates need a draftMetadata is uploaded into an editable version (status PREPARE_FOR_SUBMISSION). For a new app it's created automatically. But if you're updating a live app — link it on Home ("Link Existing…") if you haven't yet, and create a new version with the + button in the header, or you'll get the error "No editable version in App Store Connect".

Locales

The "Locales" card: chips for the store languages — showing language names, with the locale code in the tooltip on hover. The primary locale is marked with a "Primary" badge, the others are removed with an × (with a confirmation if the language already has texts), and new ones are added via the "Add locale" chip: the window has a search by name or code, and you can check several languages at once. Switching a chip shows that locale's form.

To change the primary locale — right-click a language → "Make primary". Before the app is created in ASC the change is local only; for a created app Nursery changes the primary locale right in App Store Connect — this needs a proxy and the API key.

Inheritance from the primary localeIf a locale other than the primary has empty fields, during sync the data from the primary is copied into it (subtitle, description, keywords, URL, "What's new"). The copy is made at upload time; locally the empty fields stay empty. Fill in only what's actually translated.

The circular-arrow button next to the heading is "Pull locales from App Store Connect": it adds locales that exist in ASC but are missing locally, along with their texts. Existing local data is not overwritten. Only the API key is needed; it can be run repeatedly; the same button is on the Screenshots tab. Handy for apps already live in the store, and when migrating to another Mac.

AI locale translation

The description, subtitle, and keywords can be translated from the primary locale into all the others — with your own OpenAI or DeepSeek API key (requests are billed by the provider). To connect: Settings → "Integrations" → "AI Locale Translations" → "Connect" — pick a provider and paste the key; it's stored in Keychain. The translation itself — the translate-icon button next to the "Locales" heading (active when there's more than one language), the "Translate Locales" window:

  • "What to translate" — description, subtitle, keywords, and What's New (update notes). Keywords aren't translated word for word but picked for App Store search in the locale's language (ASO adaptation).
  • By default only what's missing is translated — empty fields and copies of the primary. The "Re-translate everything" checkbox overwrites existing translations: turn it on after you've changed the primary's texts.
  • "Also translate the primary locale" — for apps whose primary texts aren't written in its language (e.g. the primary is Thai but the texts are in English).
  • On the first translation Nursery remembers the primary's texts as a reference and keeps translating from it, even if you rewrite the primary later; the "Update reference" button takes it again.

Translations appear in the locale fields — review them and upload as usual with the "Upload to ASC" button.

Fields and limits

The locale form: "Subtitle", "Keywords" (comma-separated, no spaces — spaces count toward the limit too), "Privacy policy URL", "Description", and for updates — "What's new" (hidden for version 1.0 — Apple ignores it). App Store limit counters:

FieldLimit
App name30
Subtitle30
Keywords100
Description / What's new4000
URL255

When a limit is exceeded, the counter turns red and upload is blocked — the text under the "Upload to ASC" button shows which field, in which locale, didn't fit. The app name is shared across all locales.

Settings cards

  • "Primary category" (required) and "Secondary category". The Games category gets two optional subcategories — just like in App Store Connect itself.
  • "Availability by region" — the "All countries" tile or regions; the arrow on a region tile opens the selection of individual countries.
  • "Platforms" — the "Mac App Store" and "Vision Pro" checkboxes: whether to also publish the iOS app on these platforms.
  • "Compliance (EU DSA)" — the "Declare account as 'non-trader'" checkbox: when uploading metadata, Nursery sets the account's trader status to "non-trader" (Business → Compliance). It's an account-level action, harmless to re-run; an unchecked box doesn't touch the status at all. Only enable it if you really are a non-trader under EU DSA. Requires a live cookie session.
  • "Age rating" — Apple's questionnaire. You can set up templates and mark one as default; without a template a 4+ rating is applied. The App Store computes the final mark (4+/9+/13+/16+/18+) from the questionnaire answers.
  • "Pricing and availability" — the price (Free by default; the base territory is the USA, and Apple computes the other prices itself).
  • "Review contact info" — contacts for Apple's review team. First name, last name, and email are filled from the account into empty fields automatically; Nursery takes the phone from the Developer account data, and the "Regenerate" button generates a number for the account's country. The number must be in international format (with + and the country code) and must be a mobile one: an invalid or landline number gets a warning under the field — with it, App Review goes without contacts (notes and the demo account are still saved). If ASC itself rejects the number, the contacts are saved without it too — the log will hint that you should enter them manually. Provide a demo account (login/password) if review needs to sign in to the app. Also here — "Notes for the reviewer" and "Attachments": videos or documents for App Review (drag files in or click "Add file..."); on metadata upload they replace the attachments in ASC.

Upload

The "Upload to ASC" button sends everything step by step: copyright (generated automatically from the account owner's name) and release type → categories → locale texts → price → availability → content rights → age rating → review contacts → App Privacy → platforms → DSA, and, if enabled, Game Center and purchases as well (see below). The release type is set to "manual" — after Apple approves it, you release the version, not an automaton.

Nursery fills in the declarations itselfOn upload, App Privacy is set to "Data Not Collected" — any answers already in App Store Connect are replaced; content rights — "does not use third-party content". When a build is attached, the encryption declaration is set to "no encryption used". If your app has analytics, ads, collects user data, or uses non-exempt encryption — correct these answers in App Store Connect manually after the upload.

The steps are independent: if some didn't go through, a "Metadata was only partially uploaded" window appears with a list — fix the cause and run the sync again; the successful steps repeat harmlessly. The button needs both the API key and a live cookie session (see the table in section 7) — if something is missing, the reason is written under the button.

Game Center and purchases

Metadata has two cards — "Game Center" (achievements and leaderboards) and "In-app purchases" (consumable, non-consumable, and non-renewing; auto-renewable subscriptions are not supported). Turn on the one you need with its checkbox and fill it in either way:

  • JSON — drag the file onto the card or import it in the editor. A format sample is the "Download sample JSON" link right in the card.
  • Manually — "Add" or "Edit…" opens the editor: a list on the left, a form on the right, texts per locale, the achievement/leaderboard image or the purchase's review screenshot — by dragging or picking a file. Errors ASC won't accept block saving; missing images or texts are only a warning.

On metadata upload, achievements, leaderboards, and purchases are created in ASC and existing ones are updated; they can also be uploaded separately with the "Upload Game Center" and "Upload purchases" buttons — the API key is enough for that. "Remove" deletes the config from Nursery only — nothing is deleted in App Store Connect. They're added to the review submission separately, on the Publication tab (section 14).

Apple's limitsFor achievements and leaderboards, enable Game Center in the certificates' capabilities (section 9) — otherwise the card will remind you. One achievement is worth at most 100 points, all of them together at most 1000. A purchase without a review screenshot can be created, but Apple won't let it through review.
12

Screenshots

Devices

The "Devices" card — check which screens to upload for:

DeviceTarget size (portrait)Archive in Notion
iPhone 6.9″1320 × 2868iphone69.zip
iPhone 6.5″1242 × 2688iphone65.zip
iPhone 6.3″1206 × 2622iphone63.zip
iPhone 6.1″1170 × 2532iphone61.zip
iPad 13″2048 × 2732ipad13.zip

You don't have to hit the sizes exactly — Nursery resizes the images to the targets at upload. But it's best to keep the aspect ratio: fitting is done by stretching to the target size, so an image with a very different ratio will be distorted. Images are re-encoded in the process, and transparency (alpha) is lost.

Sources

For each device, screenshots come from one of two places (a local selection always takes priority over Notion):

  • Notion — an archive with the matching name on the app's page (the badge in the device row shows whether it was found);
  • Your own files — the drop-into-tray button ("Pick screenshots (.png/.jpg) or App Preview video (.mov/.mp4): a folder, a .zip or files") or just drag a folder/archive/files onto the device row. You can return to the Notion archive with the "Remove local archive" button.

App Preview videos. .mov/.mp4 files in the set are uploaded as App Previews — unchanged, so meet Apple's resolution and duration requirements yourself. Apple's limit is up to 10 screenshots and up to 3 videos per device in each language; if you pick more, Nursery warns you with a "Too many files" window — remove the extras and try again.

Screenshot orderIn the App Store they line up in alphabetical order of file names. Number them with a leading zero: 01.png, 02.png, 03.png… — otherwise 10 comes before 2.

Locales and upload

The "Locales" card — which languages to upload to (the "All" / "Deselect All" buttons). On the first upload all locales are checked by default; on an update — none (usually a screenshot update isn't needed everywhere). The start button is labeled by the selection: "Upload to all locales (N)" or "Upload to N locales" ("Upload screenshots" while no locales are selected); the status card will show "Screenshots uploaded" when it's done.

Re-uploading replaces the setUploading screenshots to a locale removes the previous screenshots of that locale and puts the new ones in — it doesn't add to what's there.

If a selected locale isn't in ASC yet, screenshots won't upload to it (in the log: "ASC has no localizations for: … — skipping. Run Metadata first."). The right order: metadata first (it creates the locales), then screenshots.

Product page A/B tests (Product Page Optimization)

The "Upload target" card picks the target: "Main page" or a variant of an A/B test from ASC (the ↻ button refreshes the list). A new test — "Create test…": a name (visible only in ASC), 1–3 variants (the original stays the control group), and the share of traffic for the test. Each variant has its own folders and its own locales: switch the target and the device and language lists below change; a device without its own folder takes the main page's file, and if there's none — the archive from Notion. You can upload to all configured targets at once. Screenshots can only be changed for tests that aren't in review, running, or finished; launching the test itself is done manually in App Store Connect after the variants pass review.

13

Building the IPA

Building from source needs an installed Xcode (not just the Command Line Tools — Nursery detects those and will ask you to install the full Xcode and launch it once). Built and imported .ipa files are stored locally in the build library.

Source

The "Sources" card: drag in an .xcodeproj / .xcworkspace or choose one via "Select…". Flutter projects are supported too — point to the project folder, and Nursery finds ios/Runner.xcworkspace itself and runs flutter pub get and flutter build before building (Flutter must be installed). If no path is selected and the app is linked to Notion, Nursery takes source.zip from the page.

You don't need to sign in inside Xcode: Nursery signs the build manually — with the certificate and profiles from its own folder, filling in the team and profile itself, carefully editing the project only for the duration of the build and returning it to its original state afterward.

Building and submitting

  • "Build IPA" (⌘B) — builds and signs. Created (or imported) certificates are required.
  • After the build, a "Ready to upload" card appears with a "Send to App Store Connect" button.
  • A ready-made .ipa from elsewhere — the "Import…" button, or drag the file straight into the window.
Builds run one at a timeProxy protection during a build works at the whole-system level, so two builds at once are impossible. If you start a second one, it queues up with the status "Queued" and starts when the first finishes.

Build library

The "Local IPAs" card: all builds with version, size, and date. Un-uploaded ones have an "Upload to App Store Connect" button; uploaded ones have a green "Uploaded" mark. Context menu: "Show in Finder", "Delete". After upload the build goes to Apple for processing (usually 5–30 minutes) and appears on the "Publication" tab.

The version must go upYou can't upload a build with the same CFBundleShortVersionString as a version that already exists in ASC (unless it's in draft status). Bump the version number in the project and rebuild — otherwise the upload stops with a clear message.

If the build fails

The error text in the operations panel contains the tail of the xcodebuild log — it shows the cause. Common cases:

  • "Certificate files missing" — there's no .cer/.key/.mobileprovision in the folder. Run "Create certificates" (or check that the import went through).
  • ValidateDevelopmentAssets — this isn't about signing, it's about the project itself: the Development Assets setting references a folder (usually "Preview Content") that isn't in the source. Create it or remove the reference in the target's settings in Xcode.
  • Command Line Tools instead of Xcode — install the full Xcode from the App Store and launch it once.

The full log can always be copied in the operations panel ("Logs" → "Copy logs") or sent to the developer with the "Send log" button.

14

Publication

The "Publication" tab mirrors App Store Connect: all versions of the app with their statuses in plain words ("Prepare for Submission", "Waiting for Review", "Ready for Distribution"…; the raw ASC status is in the tooltip on hover), and under the status — what to do next. The "Refresh" button re-reads the state from ASC. Badge color: green — the version is on sale, red — rejected, removed from review, or the build was rejected, orange — everything else (draft, review, processing).

The final actions happen here — and only manually, in three steps:

  1. Attach the buildOn a version in "Prepare for Submission" status, click "Attach build" (or "Edit" to replace it) and choose a build. It appears in the list after Apple finishes processing. Along the way Nursery automatically sets the encryption declaration (Export Compliance) to "no encryption used". If your app uses non-exempt encryption, correct the answer in App Store Connect.
  2. Create the review draftThe "Create draft" button (active once a build is attached) assembles the review submission: the version plus, if they're enabled in Metadata, Game Center and purchases. Nothing is sent for review at this point — the version moves to the "In review draft" status.
  3. Submit for reviewIn place of "Create draft", a "Submit" button appears. Confirmation: "Submit version X for review?" — everything in the review draft goes out. Note: it can't be undone from here — a version can only be removed from review on the App Store Connect website.

If Game Center or purchases need to be added to an existing draft — use the "Add to submission: …" button at the top of the tab. It appears when they're enabled in Metadata, and it doesn't send anything for review either.

A new version of an existing app is created with the + button next to the version chip in the header: Nursery suggests the next number, and you just confirm. Then fill in "What's new", screenshots, and the build as usual.

Why Submit isn't automatedBy design: Nursery takes the routine off your hands, but submitting for review is an irreversible release decision, and it stays with you.
15

Quick Upload

The "Quick Upload" button in the app header runs the whole pipeline in a single go. Before it starts — a five-step wizard:

  1. Certificates & LanguageThe primary locale (the app is created in ASC with it; later it can only be changed in Metadata), the additional target (a widget or NSE), capability selection.
  2. MetadataThe same form as on the Metadata tab.
  3. ScreenshotsDevices, sources, locales.
  4. SourceThe project to build (or source.zip from Notion).
  5. ConfirmationThe "What will be executed" list and the "Run" button.

Order of execution: certificates → creating the app in ASC → building the IPA → then in parallel: uploading metadata, uploading screenshots, and submitting the IPA to ASC. Already-done steps are detected automatically: an "Already done" banner appears on them, and the summary notes that they'll be skipped. Between steps Nursery makes small random pauses.

Interrupted midway — run it againIf a step failed (or you pressed "Cancel upload"), what's already done is kept: the issued certificate, the ASC record, and the built build won't disappear. Running "Quick Upload" again picks up where it left off and skips the finished steps. On a partial failure of the parallel phase, there's a direct hint: "Re-run — completed steps will be skipped." Note that the button is only shown while the session is active and the metadata hasn't been uploaded yet: if the metadata went through but screenshots or the build upload failed, the button disappears — finish the rest manually on the Screenshots and Build tabs.

While it's running, the header button turns into "Cancel upload". While certificates, app creation or the build are running, no other operations on this app can start — these steps run strictly one at a time. When it finishes, the manual steps on Publication remain — attaching the build, the review draft, and submission (section 14). Proxy protection, as a reminder, is only enabled during the build stage; the parallel phase goes through the regular proxy.

16

Notion integration

Notion is used as storage for an app's resources: a card = an app, from which Nursery pulls metadata, source, certificates, and screenshots, and writes service fields back. It's a convenient way to hand materials between a manager and whoever does the upload.

How to lay out a Notion cardWhich properties and files a card must contain (Bundle ID, the Metadata block, source.zip, cert.zip, screenshot archives) — with examples in the Notion card structure PDF.

Connecting

Settings → "Integrations" → "Connect". Create an integration at notion.so/my-integrations, grant it access to the pages you need (Share → invite the integration), and paste the Internal Integration Token (ntn_…). The token is stored in Keychain. Your own token always takes priority over the one from the license; if a token is included in your license, you don't need to connect anything.

"Notion API 404 / object not found"Almost always means the page isn't shared with the integration. Open the card in Notion → Share → add your integration.

What Nursery reads and what it writes

  • Reads: name, Bundle ID, App ID, Team ID, Issuer ID, the privacy policy link; the Metadata block (Key: value lines — Subtitle, Description, Keywords; they go into the primary locale if those fields are empty there); the source.zip and cert.zip files, and screenshot archives.
  • Writes back (as it works, without your involvement): the generated Bundle ID, Issuer ID, Team ID, App ID, account email, and the finished cert.zip. Version and publication statuses are not written to Notion.

Texts from the Metadata block are pulled into metadata only into empty fields — your manual edits are never overwritten.

Edits in Notion not showing up?The card is cached by the Notion client, while Nursery reads the current state through the API. If it seems the data "didn't pull in" or "wasn't written", first hard-refresh the page in Notion (⌘R) — most often it's all already there.
17

Sharing files and backups

Nursery deliberately has no cloud and no sync: all data lives on your Mac. Transfer between colleagues is explicit, via files:

  • Certificates — "Manage" → "Export .zip" on the sender's side, "Import" on the recipient's. Or drop a cert.zip on the Notion page — the colleague imports it "From Notion" (and when adding an app from Notion, the import starts on its own).
  • Builds — "Show in Finder" → hand over the .ipa → on the recipient's side "Import…" or drag & drop into the window.
  • Source and screenshots — via files on the Notion page (source.zip, screenshot archives).
  • Locale texts — there's no dedicated exchange file, but the recipient can pull descriptions, keywords, and subtitles from ASC with the sync-locales button, or right away when linking the app with "Link Existing…" on Home (categories, price, rating, and contacts are not carried over by the sync).
BackupThe data folder is ~/Library/Application Support/sv.NurseryApp/. The most valuable thing in it is the certificates' private keys: they exist only on your machine. Export the cert.zip of important apps, or include the folder in a backup (Time Machine, etc.).
18

Updates and support

  • Updates arrive automatically: Nursery checks for them at launch and then every 6 hours, and shows a "New version available" window. To check manually: Settings → "Updates" → "Check for updates". After installing, the app restarts itself.
  • Operation error — in the operations panel click "Send log": describe what you were doing, the full log is attached automatically and goes to the developer.
  • Ideas and questions — the "Feedback" card in Settings or Telegram @R_R_E_B.
19

FAQ

The extension shows "Server unreachable"

The cookie receiver only works while the sign-in window is open in Nursery. First click "Sign In" in the app, then "Sync Cookies" in the browser.

The extension says "No Apple session"

You're not logged in at appstoreconnect.apple.com in this browser (or profile). Open the site, log in, then press "Sync Cookies".

The wrong account is syncing

The browser holds one active Apple session per profile. Log out of the first account on the site and log in as the one you need — or use a separate browser profile for each Apple ID (section 7). If the app is already bound to a different account, Nursery won't accept those cookies and will show which account came in and which one the app is bound to.

A button is disabled — why?

For main buttons the reason is written right under them; for the others — in the tooltip on hover ("A proxy is required…", "API key not loaded", "Select at least one device", etc.). That's the first step in diagnosing almost any situation.

The Metadata tab is blurred and won't edit

The app isn't created in App Store Connect yet. Home tab → the "Progress" card → the "App created" row → "Create".

"No editable version in App Store Connect"

Metadata is uploaded into a draft (PREPARE_FOR_SUBMISSION). To update a live app, first create a new version with the + button in the header.

Status "Session expired"

The Apple cookie session has ended — this is normal, sign in again through the extension. Operations that use the API key (screenshots, upload, versions, Submit) work without it too.

An uploaded build isn't visible on "Publication"

Apple processes the build after upload — usually 5–30 minutes. Click "Refresh" later. Apple's email that processing is done arrives at the account's mailbox.

The build runs through the real IP even though a proxy is set

The system build protection didn't come up. Enable NurseryApp in System Settings → "Login Items & Extensions", or don't agree to "Continue without protection" when Nursery asks about it (section 8).

Do I need to sign in to Xcode?

No. Nursery signs the build manually with its own certificates and profiles — an account in Xcode and choosing a Team aren't required.

How do I move an app to another Mac?

Export the certificates ("Export .zip") and transfer the .ipa builds if needed. On the new Mac add the app with the same Bundle ID, import the archive, then on Home press "Link Existing…" and enter the app's Apple ID — the Metadata tab opens and the locales with their texts (descriptions, keywords, subtitles) are pulled from ASC. Locales that already exist in Nursery are not overwritten. Categories, price, age rating, and review contacts, however, are not restored by the sync — fill those in again. A license bound to the old Mac can be rebound by the developer.

Посібник користувача

Nursery — нативний застосунок для macOS, який проводить iOS-застосунок через увесь шлях публікації в App Store Connect: сертифікати, створення запису, метадані, скриншоти, збірка та завантаження білда — з одного вікна.

01

Про застосунок

Nursery автоматизує рутинну частину публікації. Ви додаєте застосунок (вручну або з Notion), один раз входите в Apple-акаунт — далі Nursery сам випускає сертифікати та профілі, створює застосунок в App Store Connect, завантажує метадані одразу на всі локалі, підганяє й завантажує скриншоти, збирає IPA з вихідників і надсилає білд до ASC.

Дві дії навмисно лишаються за вами: прив'язка білда до версії та надсилання на ревʼю (Submit for Review). Рутину забирає машина — рішення про реліз лишається за людиною.

Як Nursery спілкується з Apple

Використовуються два незалежні механізми — розуміння різниці знімає більшість питань «чому не працює»:

  • Cookie-сесія — «браузерна» авторизація, потрапляє в Nursery через розширення «Nursery Cookie Sync» (розділ 7). Живе обмежений час, її потрібно періодично оновлювати повторним входом.
  • API-ключ App Store Connect (файл .p8) — Nursery створює його сам під час першого випуску сертифікатів. Не протухає: скриншоти, завантаження білдів, версії та Submit працюють за ним навіть коли cookie-сесія давно завершилася.

Вимоги

  • Mac на Apple Silicon або Intel з macOS 15.6 або новішою (застосунок нативний, не web-обгортка).
  • Xcode — лише якщо збираєте IPA з вихідників. Для всього іншого (метадані, скриншоти, завантаження готового .ipa) Xcode не потрібен.
  • Браузер на базі Chromium (Chrome, Edge, Brave, Arc тощо) — для розширення «Nursery Cookie Sync» із Chrome Web Store. Safari та Firefox не підтримуються.
Усе зберігається локальноДані застосунків — сертифікати, ключі, білди, метадані — лежать лише на вашому Mac у ~/Library/Application Support/sv.NurseryApp/. Жодної хмари: чим ділитися й з ким — вирішуєте ви (див. розділ 17).
02

Встановлення та ліцензія

  1. Встановіть застосунокЗавантажте інсталятор .pkg із сайту та пройдіть стандартне встановлення. Оновлення далі приходять автоматично (див. розділ 18).
  2. Активуйте ліцензіюПід час першого запуску відкриється вікно «Активуйте NurseryApp». Введіть ліцензійний ключ формату NRSY-XXXX-XXXX-XXXX-XXXX і натисніть «Активувати» — дефіси підставляються автоматично.
  3. Або спробуйте безкоштовноКнопка «Спробувати 3 дні» вмикає пробний період — без ключа й без картки. Тріал видається один раз на кожен Mac: перевстановлення застосунку його не скидає.

Ключ видається особисто — написати щодо купівлі чи продовження можна в Telegram: @R_R_E_B. Статус ліцензії, дні, що лишилися, та кнопка «Оновити статус» — у налаштуваннях, картка «Акаунт і ліцензія».

Як працює прив'язка

  • Ключ прив'язується до Mac. Командні ключі активуються на кількох машинах — ліміт місць зашито в ключ. Під час його перевищення з'явиться «Досягнуто ліміт пристроїв для цього ключа» — напишіть, щоб звільнити місце або розширити ліміт.
  • Змінили Mac? Активація на новій машині повідомить, що ключ прив'язано до іншого Mac, — перепривʼязка робиться на боці розробника, просто напишіть у Telegram.
  • Офлайн-режим. Ліцензія перевіряється по мережі у фоні; без зв'язку із сервером застосунок продовжує працювати до 14 днів. Довше — з'явиться вікно блокування з кнопкою «Повторити перевірку»: підключіться до інтернету та натисніть її.
  • Продовження. Після оплати нічого вводити заново не потрібно: новий термін підтягнеться сам під час фонової перевірки — навіть якщо доступ уже було заблоковано через сплив терміну. Щоб не чекати, натисніть «Повторити перевірку» у вікні блокування.

Вікно «Доступ заблоковано» завжди пояснює причину (сплив термін, відкликано ключ, надто довго офлайн, ключ прив'язано до іншої машини) і дозволяє ввести новий ключ або перевірити оновлення, не заходячи в застосунок.

03

Швидкий старт: від нуля до завантаженого білда

Повний шлях для нового застосунку виглядає так:

  1. Додайте застосунокКнопка «Додати застосунок» унизу сайдбара (або «Notion» / «Вручну», якщо підключено Notion). Достатньо назви: порожній Bundle ID згенерується з неї — розділ 6.
  2. Увійдіть в Apple-акаунтКнопка «Увійти» в шапці — вхід через браузерне розширення «Nursery Cookie Sync», логін і пароль у Nursery не вводяться — розділ 7.
  3. Задайте проксі (або дозвольте роботу без проксі)Кожному акаунту — свій проксі: картка «Проксі» на вкладці «Головна» — розділ 8.
  4. Запустіть «Швидке завантаження»Кнопка «Швидке завантаження» в шапці відкриває візард із п'яти кроків: сертифікати й мова, метадані, скриншоти, вихідники, підтвердження. Далі все виконується автоматично — розділ 15.
  5. Прикріпіть білд і надішліть на ревʼюКоли білд обробиться в ASC, на вкладці «Публікація» натисніть «Прикріпити білд», потім «Створити чернетку» і «Надіслати» — розділ 14.

Кожен крок можна виконувати й окремо, зі своїх вкладок — «Швидке завантаження» лише проганяє той самий ланцюжок однією кнопкою і пропускає вже зроблене.

Під час першого запуску Nursery показує короткий онбординг — кілька слайдів про те, як усе влаштовано. Далі по ходу роботи біля потрібної кнопки з'являється підказка з пульсуючою рамкою: закрили — більше не покажеться. Якщо основна кнопка неактивна, причину написано прямо під нею (в інших — у підказці під час наведення). Повернути закриті підказки — Налаштування → «Скинути підказки», онбординг — там само, «Показати онбординг».

04

Інтерфейс

Сайдбар: список застосунків

  • Пошук — за назвою, Bundle ID і номером застосунку (можна з решіткою: #894).
  • Сортування — кнопка зі стрілками: за назвою чи датою створення, за зростанням/спаданням.
  • Групи — застосунки можна розкладати за кольоровими групами (секції згортаються). Групу призначають при додаванні, через контекстне меню («Група») або масово: пункт «Обрати» вмикає режим множинного вибору з діями «Група» і «Видалити» для всіх позначених.
  • Статус — кольорова крапка справа в кожному рядку: авторизовано (зелена), сесія завершилася (жовта), не авторизовано (червона), триває операція (синя).
  • Контекстне меню — «Властивості…» (назва, Bundle ID, email акаунта, основна локаль, проксі), «Група», «Видалити».

Вкладки вибраного застосунку

ВкладкаГаряча клавішаЩо там
«Головна»⌘1Прогрес, акаунт, проксі, API-ключ — розділ 10
«Метадані»⌘2Тексти, локалі, AI-переклад, категорії, ціна, рейтинг, Game Center і покупки — розділ 11
«Скриншоти»⌘3Скриншоти й відео App Preview, A/B-тести сторінки, завантаження — розділ 12
«Збірка»⌘4Вихідники, збірка IPA, бібліотека білдів — розділ 13
«Публікація»⌘5Версії в ASC, прив'язка білда, чернетка заявки й надсилання на ревʼю — розділ 14

У шапці над вкладками: статус авторизації, Bundle ID, кнопка «Відкрити в Notion» (якщо застосунок прив'язано до картки), акаунт-капсула зі входом/виходом і кнопка «Швидке завантаження». Ліворуч від вкладок — чип поточної версії в ASC і кнопка + для створення нової версії.

Панель операцій

Відкривається кнопкою в правому верхньому куті (⌘0). Це історія всього, що Nursery робив із цим застосунком: кожна операція — картка з прогресом, статусом («У процесі», «У черзі», «Успішно», «Помилка», «Скасовано») і розгортуваним логом. Тут можна:

  • скасувати операцію, що триває, або прибрати її з черги;
  • розгорнути «Логи» і скопіювати їх;
  • для операції, що впала, — натиснути «Надіслати лог»: короткий опис, що ви робили, плюс повний лог ідуть до розробника;
  • очистити історію повністю («Очистити історію»).

Сповіщення

Про завершення операції повідомляє спливний тост у вікні («Сертифікати створено», «IPA зібрано», «Скриншоти завантажено»…). Якщо вікно Nursery в цей момент неактивне, замість тоста прийде системне сповіщення macOS зі звуком — можна спокійно йти в інший застосунок на час довгої збірки. Дозвіл на сповіщення запитується один раз під час першого запуску.

05

Налаштування

Кнопка «Налаштування» — унизу сайдбара. У шапці вікна: перемикач теми (світла/темна) та «Мова інтерфейсу» — Системний, English, Русский, Українська (після зміни Nursery запропонує перезапуститися).

  • «Акаунт і ліцензія» — статус ключа, дні, що лишилися, «Оновити статус», продовження через Telegram.
  • «Інтеграції» — підключення Notion-токена (розділ 16) і «AI-переклади локалей» — власний API-ключ OpenAI або DeepSeek для перекладу описів (розділ 11).
  • «Мережа» — тумблер «Робота без проксі»: дозволити операції без проксі. Налаштування глобальне, діє на всі застосунки. Обережно: Apple побачить реальну IP пристрою (розділ 8).
  • «Оновлення» — поточна версія і кнопка «Перевірити оновлення».
  • «Розширення для браузера» — кнопка «Скопіювати посилання на розширення» (сторінка «Nursery Cookie Sync» у Chrome Web Store) і коротка інструкція «Як встановити» (розділ 7).
  • «Зворотний зв'язок» — написати розробнику прямо із застосунку.
  • «Показати онбординг» — заново показати вступні слайди.
  • «Скинути підказки» — повернути закриті підказки біля кнопок: вони знову з'являться на своїх кроках.
06

Додавання застосунку

Унизу сайдбара: якщо Notion не підключено — одна кнопка «Додати застосунок» (ручний режим); якщо підключено — дві: «Notion» і «Вручну».

Вручну

  • «Назва» — обов'язково.
  • Bundle ID — наприклад com.example.myapp. Кнопка з чарівною паличкою згенерує його з назви.
  • App Number — необов'язковий порядковий номер для власної нумерації (показується в сайдбарі як #894, за ним працює пошук).
  • Proxy URL — можна задати одразу або пізніше.
  • «Група» — наявна або «+ Нова група…».

З Notion

Вставте «URL сторінки або ID» картки застосунку — Nursery підтягне все, що знайде в картці, і одразу налаштує застосунок:

  • назву, Bundle ID, номер, Issuer ID;
  • App ID — якщо застосунок уже створено в App Store Connect і його ID записано в картці, Nursery одразу позначить крок «Застосунок створено» виконаним і розблокує метадані;
  • API-ключ — файл AuthKey_*.p8 з картки завантажиться автоматично;
  • сертифікати — якщо на сторінці лежить cert.zip, запуститься автоматичний імпорт (у вікні додавання з'явиться рядок статусу «Знайдено cert.zip у Notion — імпортую…»);
  • якщо Bundle ID у картці порожній, Nursery згенерує його й запише назад у Notion.

Структура картки — у розділі 16.

Після створення в ASCBundle ID та Apple ID блокуються — застосунок уже існує в App Store Connect, змінювати їх пізно. Основну локаль після цього можна змінити лише на вкладці «Метадані» — правим кліком по мові → «Зробити основною». Решта властивостей редагується через «Властивості…» будь-якої миті.
07

Вхід в Apple-акаунт

Nursery не питає логін і пароль від Apple ID. Вхід виконується перенесенням cookie-сесії з браузера — одним натисканням у розширенні «Nursery Cookie Sync». Розширення передає cookies лише на локальну адресу вашого ж Mac (порт 5556) і приймає лише домени Apple — назовні нічого не йде.

Встановлення розширення (один раз)

  1. Скопіюйте посилання на розширенняНалаштування → «Розширення для браузера» → «Скопіювати посилання на розширення» (та сама кнопка є в онбордингу). Посилання веде на сторінку «Nursery Cookie Sync» у Chrome Web Store.
  2. Установіть його у свій браузерВідкрийте посилання в браузері, де ведете Apple-акаунт, — звичайному Chrome або антидетекті (Octo й подібні) — і натисніть Add to Chrome. Посилання копіюється, а не відкривається автоматично, якраз тому, що Nursery не знає, в якому браузері й профілі живе ваш акаунт. Розширення працює лише в браузерах на основі Chromium (Chrome, Edge, Brave, Arc, Opera та подібних); Safari та Firefox не підтримуються.

Вхід

Порядок важливий: спочатку «Увійти» в Nursery, потім «Sync Cookies» у браузері. Приймач cookies на порту 5556 працює лише поки відкрито вікно входу — якщо натиснути кнопку розширення без нього, отримаєте «Server unreachable».

  1. Натисніть «Увійти» в NurseryКнопка в шапці застосунку. Відкриється вікно «Вхід через cookies» з підказкою «Відкрийте App Store Connect у браузері та натисніть кнопку розширення «Nursery Cookie Sync».» — з цієї миті Nursery слухає й чекає.
  2. Залогіньтеся на appstoreconnect.apple.comУ браузері, під потрібним акаунтом — як зазвичай, із двофакторкою. Якщо вже залогінені — просто відкрийте вкладку ASC.
  3. Натисніть іконку розширення → «Sync Cookies»У popup буде видно стан: «Apple session found (N cookies)» — можна тиснути; «No Apple session…» — спершу увійдіть на сайт. За успіху — «Synced! <email>», вікно входу в Nursery закриється саме, статус зміниться на «Авторизовано».

Після входу на вкладці «Головна» з'явиться картка «Apple Account» з іменем і Team ID.

Життя сесії

  • Nursery у фоні перевіряє живість сесій приблизно кожні 15 хвилин. Коли Apple завершує сесію, крапка статусу стає жовтою — «Сесія завершилася».
  • Це нормально й очікувано: cookie-сесії Apple короткоживучі. Автоматичного перелогіну немає — повторіть вхід (ті самі «Увійти» → «Sync Cookies»).
  • Протухла сесія не зупиняє роботу: усе, що ходить за API-ключем (скриншоти, завантаження білда, версії, Submit), продовжує працювати — див. таблицю нижче.

Кнопка «Вийти» — дві різні поведінки

  • Сертифікати ще не створено: «Вийти» повністю скидає акаунт у застосунку — видаляються сесія, email, ключі та файли сертифікатів. Можна прив'язати інший Apple ID.
  • Сертифікати вже створено: «Вийти» лише відкликає поточну сесію. Email, сертифікати та ключі зберігаються, акаунт закріплюється за застосунком — змінити Apple ID уже не можна, лише увійти в той самий заново.

Кілька акаунтів

Cookies зберігаються окремо в кожного застосунку — усередині Nursery акаунти ізольовані. Але джерело cookies — браузер, а він тримає одну активну сесію Apple на профіль. Тому:

  • заводячи другий акаунт, спершу вийдіть на appstoreconnect.apple.com із першого й увійдіть під другим — інакше розширення синхронізує не той акаунт;
  • зручніше — окремий профіль браузера під кожен Apple-акаунт: сесії живуть паралельно, і «Sync Cookies» тиснете з потрібного профілю (розширення доведеться встановити в кожен).
  • якщо застосунок уже прив'язано до акаунта, а «Sync Cookies» натиснуто в профілі з іншим акаунтом, Nursery такі cookies не прийме: покаже «Ці cookies — акаунт …, а застосунок прив'язано до …» і залишить вікно входу відкритим — синхронізуйте з потрібного профілю. Змінити акаунт застосунку можна лише через «Вийти» (див. вище).

Що потребує cookie-сесію, а що API-ключ

ОпераціяЩо потрібно
Створення сертифікатів (перший раз)Cookie-сесія (заразом створюється API-ключ)
Створення застосунку в ASCCookie-сесія
Метадані («Завантажити в ASC»)API-ключ і cookie-сесія (частина кроків — App Privacy, платформи, DSA — іде за cookie)
СкриншотиЛише API-ключ
Збірка IPAНічого з цього — локальна операція
Завантаження IPA, прив'язка білда, нова версія, чернетка заявки й надсилання на ревʼюЛише API-ключ
Синк локалей з ASCЛише API-ключ
Game Center і покупки (окреме завантаження), A/B-тести сторінки, зміна основної локаліЛише API-ключ
08

Проксі та робота без проксі

Кожному застосунку (акаунту) можна призначити власний проксі — увесь трафік Nursery до Apple для цього акаунта піде через нього. Задається під час додавання застосунку, у «Властивості…» або на вкладці «Головна»: картка «Проксі» → «Додати» / «Змінити».

Підтримуються SOCKS5 та HTTP, формати запису:

socks5://user:pass@host:port
http://user:pass@host:port
user:pass@host:port      (SOCKS5 за замовчуванням)
host:port:user:pass

Кнопка «Перевірити» робить два запити — напряму та через проксі — і показує обидві IP. Якщо вони збіглися, побачите попередження «Проксі не змінює IP — можливо, не працює». Перевіряйте проксі до запуску операцій.

Як влаштовано захист

  • Звичайні операції (створення застосунку, метадані, скриншоти, завантаження білда) ходять через проксі на рівні самого Nursery — тут усе просто.
  • Збірка IPA — особливий випадок: інструменти Apple (xcodebuild та інші) ігнорують налаштування проксі. Тому на час збірки Nursery через фоновий помічник загортає трафік на рівні системи. Помічник ставиться автоматично; macOS під час першого встановлення попросить дозволити його в Системні налаштування → Основні → «Об'єкти входу та розширення» (Allow in the Background).
  • Якщо помічник вимкнено, а проксі задано, на «Головній» з'явиться банер «Захист проксі вимкнено» з кнопкою «Відкрити налаштування» — вона веде прямо в потрібний розділ.
  • Якщо захист не вдалося увімкнути в момент збірки, Nursery зупиниться й запитає: «Скасувати збірку» (безпечний вибір, за Enter) або «Продовжити без захисту» — тоді трафік збірки піде з реальної IP.

Робота без проксі

Тумблер «Робота без проксі» у налаштуваннях (картка «Мережа») знімає єдину вимогу — «без проксі операції запускати не можна». Усе інше (вхід, сесії, ключі) працює як зазвичай, але запити йдуть із реальної IP пристрою — на «Головній» про це нагадує помаранчевий банер «Роботу без проксі ввімкнено». Без проксі й без цього тумблера операції заблоковані (червоний банер «Проксі не налаштовано»).

09

Сертифікати

Усе керування — на вкладці «Головна», картка «Прогрес», рядок «Сертифікати». Потрібні вхід в акаунт і налаштований проксі (або дозволена робота без проксі).

Створення

Кнопка «Створити» відкриває вікно «Capabilities для Bundle ID»:

  • Список capabilities — позначте потрібні (є пошук). Push Notifications увімкнено за замовчуванням (можна зняти); In-App Purchase позначено «завжди увімк» — його вмикає сам Apple. Game Center — звичайна галка, за замовчуванням вимкнена: увімкніть, якщо в застосунку є досягнення або лідерборди (розділ 11).
  • «Додатковий таргет: віджет або NSE» — галка для другого таргета застосунку: віджета або Notification Service Extension (rich-push — картинки в пушах). Nursery створить для нього окремий Bundle ID і профіль. Якщо вибрано проєкт («Вибрати проєкт…», «Сканувати таргети»), Nursery сам знайде таргет розширення, а якщо в проєкті використовуються App Groups — зареєструє групу й прив'яже її до обох App ID. Без проєкту створюється <bundle>.NotificationService без App Groups. Підтримується один додатковий таргет; після створення сертифікатів галка блокується.

За кнопкою «Створити сертифікати» Nursery виконує ланцюжок: API-ключ ASC (якщо ще немає) → реєстрація Bundle ID → налаштування capabilities → distribution-сертифікат із приватним ключем → provisioning-профіль. Прогрес і лог — у панелі операцій. Якщо застосунок прив'язано до Notion, готовий cert.zip і службові поля (Team ID, Issuer ID) автоматично збережуться в картку.

Розумне перевикористання

Nursery не плодить дублі на акаунті:

  • API-ключ — один на команду (ліміт Apple). Якщо в іншого застосунку того самого акаунта ключ уже є, він просто перевикористовується.
  • Distribution-сертифікат — якщо в акаунті вже є сертифікат, чий приватний ключ лежить в іншого застосунку в Nursery, файли скопіюються, новий не випускатиметься (у лозі «♻️ Перевикористовуємо наявний сертифікат»).
  • Ліміт Apple — 2 сертифікати Apple Distribution. Якщо обидва слоти зайняті чужими (не створеними в Nursery) сертифікатами, а в теці застосунку немає власного, Nursery відкличе усі сертифікати цього типу, щоб звільнити місце, — це видно в лозі. Врахуйте це, якщо тим самим акаунтом підписуєте щось поза Nursery.

Повторний запуск безпечний: коли сертифікати вже створено, «Керування» → «Capabilities» працює в режимі оновлення — змінюються лише capabilities і перевипускається профіль, сертифікат і ключі не чіпаються. Capabilities зі списку Nursery, не позначені у вікні, буде знято в Developer Portal; винятки — In-App Purchase, Game Center і WeatherKit, їх Nursery не знімає ніколи. Capabilities, яких немає в списку Nursery, не чіпаються.

Імпорт

Якщо сертифікати вже є (зроблені колегою або в іншому інструменті) — кнопка «Імпорт». Джерела: сторінка Notion (Nursery сам знайде cert.zip) або вручну — перетягніть файл, теку чи .zip з файлами .cer / .key / .mobileprovision / .p12 / .p8.

  • Поле Issuer ID потрібне лише для завантаження в ASC (метадані, білди); для локальної збірки — не обов'язкове. Його немає в жодному файлі, тому вводиться окремо.
  • Сам лише .p8 (API-ключ) сертифікатами не вважається — для збірки потрібні .cer + .key + .mobileprovision.
  • Із .mobileprovision Nursery сам витягне Team ID і Bundle ID.

Файли в теці сертифікатів

ФайлЩо це
distribution.cerDistribution-сертифікат Apple
<ім'я>.keyПриватний ключ сертифіката — існує лише у вас
distribution.p12Сертифікат + ключ одним файлом (для Keychain; пароль порожній)
<ім'я>.mobileprovisionProvisioning-профіль (+ окремий для додаткового таргета — віджета або NSE, якщо увімкнено)
AuthKey_<KeyID>.p8API-ключ App Store Connect

Меню «Керування»: «Папка» відкриває цю теку у Finder, «Експорт .zip» зберігає все одним архівом <bundleId>-cert.zip — так сертифікати передаються колезі.

Приватний ключ існує в єдиному екземпляріФайл .key створюється локально й нікуди не надсилається. Якщо видалити застосунок із Nursery або втратити теку — відновити ключ неможливо, лише випускати сертифікат заново. Для важливих застосунків зробіть «Експорт .zip» і покладіть архів у надійне місце.
10

Вкладка «Головна»

Домашня вкладка застосунку. Згори може показуватися банер про стан мережі («Проксі не налаштовано», «Роботу без проксі ввімкнено», «Захист проксі вимкнено»). Нижче — картки:

  • «Прогрес» — три ключові кроки зі статусами й кнопками дій:
    • «Сертифікати» — створити / імпортувати / керувати (розділ 9);
    • «Застосунок створено» — кнопка «Створити» реєструє застосунок в App Store Connect: запис із вашим Bundle ID, назвою та основною локаллю, плюс перша версія 1.0. До цього кроку вкладку «Метадані» закрито. Якщо застосунок уже є в App Store Connect (створений вручну, через Xcode чи на іншому Mac), натисніть «Прив'язати наявний…» і вкажіть його Apple ID (App Store Connect → App Information): Nursery перевірить, що Bundle ID збігається, візьме основну локаль і підтягне локалі з ASC. «Створити» для наявного застосунку не спрацює — другий із тим самим Bundle ID Apple не зареєструє;
    • «Метадані заповнено» — статус синхронізації метаданих.
  • «Apple Account» — ім'я і Team ID акаунта, що увійшов.
  • «App Store Connect API» — Issuer ID, Key ID і статус P8-ключа. Ключ створюється автоматично під час випуску сертифікатів (або приходить з імпортом) і використовується для всіх API-операцій: метаданих, скриншотів, завантаження білда.
  • «Проксі» — поточний проксі акаунта, кнопки зміни та перевірки.
11

Метадані

Вкладка відкривається після створення застосунку в ASC. Якщо застосунок додано з Notion, тексти підтягнуться з картки автоматично — але лише в порожні поля, ручні правки не перетираються.

Для оновлень потрібна чернеткаМетадані завантажуються в редаговану версію (статус PREPARE_FOR_SUBMISSION). У нового застосунку вона створюється автоматично. Якщо ж ви оновлюєте живий застосунок — прив'яжіть його на «Головній» («Прив'язати наявний…»), якщо ще не зробили цього, і створіть нову версію кнопкою + в шапці, інакше отримаєте помилку «Немає редагованої версії в App Store Connect».

Локалі

Картка «Локалі»: чипи мов стору — з назвами мов, код локалі видно в підказці під час наведення. Основна локаль позначена бейджем «Основна», решта видаляються хрестиком (якщо в мові вже є тексти — з підтвердженням), нові додаються чипом «Додати локаль»: у вікні є пошук за назвою чи кодом, і можна позначити одразу кілька мов. Перемикання чипа показує форму цієї локалі.

Змінити основну локаль — правий клік по мові → «Зробити основною». До створення застосунку в ASC зміна лише локальна; у створеного застосунку Nursery змінює основну локаль прямо в App Store Connect — для цього потрібні проксі й API-ключ.

Наслідування від основної локаліЯкщо в локалі, крім основної, поля не заповнені — під час синхронізації в неї копіюються дані з основної (підзаголовок, опис, ключові слова, URL, «Що нового»). Копія робиться в момент завантаження, локально порожні поля так і лишаються порожніми. Заповнюйте лише те, що реально перекладено.

Кнопка з круговою стрілкою поряд із заголовком — «Підтягнути локалі з App Store Connect»: додає локалі, які є в ASC, але відсутні локально, разом з їхніми текстами. Наявні локальні дані при цьому не перезаписуються. Потрібен лише API-ключ; працює повторно; та сама кнопка є на вкладці «Скриншоти». Корисно для застосунків, які вже живуть у сторі, і під час переносу на інший Mac.

AI-переклад локалей

Опис, підзаголовок і ключові слова можна перекласти з основної локалі в усі інші — власним API-ключем OpenAI або DeepSeek (запити оплачуються в провайдера). Підключення: Налаштування → «Інтеграції» → «AI-переклади локалей» → «Підключити» — виберіть провайдера й вставте ключ, він зберігається в Keychain. Сам переклад — кнопка зі значком перекладу поряд із заголовком «Локалі» (активна, коли мов більше однієї), вікно «Переклад локалей»:

  • «Що перекладати» — опис, підзаголовок, ключові слова та What's New (опис оновлення). Ключові слова не перекладаються дослівно, а підбираються під пошук в App Store мовою локалі (ASO-адаптація).
  • За замовчуванням перекладається лише відсутнє — порожні поля й копії з основної. Галка «Перекласти все заново» затирає наявні переклади: вмикайте, коли змінили тексти основної.
  • «Перекласти й основну локаль» — для застосунків, де тексти основної написані не її мовою (наприклад, основна — тайська, а тексти англійські).
  • Під час першого перекладу Nursery запам'ятовує тексти основної як еталон і далі перекладає з нього, навіть якщо основну потім переписати; кнопка «Оновити еталон» знімає його заново.

Переклади з'являються в полях локалей — перевірте їх і залийте як зазвичай, кнопкою «Завантажити в ASC».

Поля та ліміти

Форма локалі: «Підзаголовок», «Ключові слова» (через кому, без пробілів — пробіли теж рахуються в ліміт), «URL політики конфіденційності», «Опис», для оновлень — «Що нового» (у версії 1.0 поле приховане — Apple його ігнорує). Лічильники лімітів App Store:

ПолеЛіміт
Назва застосунку30
Підзаголовок30
Ключові слова100
Опис / Що нового4000
URL255

За перевищення лічильник червоніє, і завантаження блокується — під кнопкою «Завантажити в ASC» буде написано, яке поле і в якій локалі не влізло. Назва застосунку одна на всі локалі.

Картки налаштувань

  • «Основна категорія» (обов'язкова) і «Додаткова категорія». У категорії Games з'являються дві необов'язкові підкатегорії — як у самому App Store Connect.
  • «Доступність за регіонами» — плитка «Усі країни» або регіони; стрілка на плитці регіону відкриває вибір окремих країн.
  • «Платформи» — чекбокси «Mac App Store» і «Vision Pro»: чи публікувати iOS-застосунок також на цих платформах.
  • «Відповідність (EU DSA)» — чекбокс «Оголосити акаунт „не трейдером"»: під час завантаження метаданих Nursery виставить trader status акаунта на «не трейдер» (Business → Compliance). Дія на рівні акаунта, повторний запуск нешкідливий; вимкнений чекбокс статус не чіпає взагалі. Вмикайте, лише якщо ви справді не трейдер за EU DSA. Потребує живої cookie-сесії.
  • «Віковий рейтинг» — анкета Apple. Можна завести шаблони й призначити один за замовчуванням; без шаблону застосовується рейтинг 4+. Підсумкову позначку (4+/9+/13+/16+/18+) App Store обчислює з відповідей анкети.
  • «Ціни та доступність» — ціна (за замовчуванням Free; базова територія — США, решту цін Apple рахує сам).
  • «Контакти для огляду» — контакти для команди ревʼю Apple. Ім'я, прізвище та email підставляються з акаунта в порожні поля автоматично; телефон Nursery бере з даних Developer-акаунта, а кнопка «Перегенерувати» створює номер країни акаунта. Номер потрібен у міжнародному форматі (з + і кодом країни) і обов'язково мобільний: невалідний або міський номер підсвічується попередженням під полем — із ним App Review піде без контактів (нотатки й демо-акаунт збережуться). Якщо номер не прийме сам ASC, контакти теж збережуться без нього — у лозі буде підказка вписати їх вручну. Демо-акаунт (логін/пароль) вказуйте, якщо для ревʼю потрібен вхід у застосунок. Там само — «Нотатки для ревʼюера» і «Вкладення»: відео або документи для App Review (перетягніть файли або натисніть «Додати файл...»); під час завантаження метаданих вони замінюють вкладення в ASC.

Завантаження

Кнопка «Завантажити в ASC» надсилає все покроково: copyright (генерується автоматично з імені власника акаунта) і тип релізу → категорії → тексти локалей → ціна → доступність → права на контент → віковий рейтинг → контакти ревʼю → App Privacy → платформи → DSA, а якщо увімкнено — ще Game Center і покупки (див. нижче). Тип релізу ставиться «вручну» — після апруву Apple версію випускаєте ви, а не автомат.

Відповіді-декларації Nursery ставить самПід час завантаження App Privacy заповнюється як «Data Not Collected» (дані не збираються) — відповіді, що вже були в App Store Connect, замінюються; права на контент — «не використовує сторонній контент». Під час прив'язки білда декларація шифрування ставиться як «шифрування не використовується». Якщо в застосунку є аналітика, реклама, збір даних користувачів або нестандартне шифрування — після завантаження виправте ці відповіді в App Store Connect вручну.

Кроки незалежні: якщо частина не пройшла, з'явиться вікно «Метадані завантажено не повністю» зі списком — виправте причину й запустіть синхронізацію ще раз, успішні кроки повторяться безболісно. Для кнопки потрібні і API-ключ, і жива cookie-сесія (див. таблицю в розділі 7) — якщо чогось бракує, причину буде написано під кнопкою.

Game Center і покупки

У «Метаданих» є дві картки — «Game Center» (досягнення й лідерборди) і «Вбудовані покупки» (consumable, non-consumable і non-renewing; підписки з автопродовженням не підтримуються). Увімкніть потрібну галкою й наповніть одним зі способів:

  • JSON — перетягніть файл на картку або імпортуйте в редакторі. Зразок формату — посилання «Завантажити приклад JSON» прямо в картці.
  • Вручну — «Додати» або «Редагувати…» відкриває редактор: список ліворуч, форма праворуч, тексти за локалями, картинка досягнення/лідерборда або скриншот покупки для ревʼю — перетягуванням або вибором файлу. Помилки, які ASC не прийме, блокують збереження; брак картинок чи текстів — лише попередження.

Під час завантаження метаданих досягнення, лідерборди й покупки створюються в ASC, наявні оновлюються; окремо їх можна завантажити кнопками «Завантажити Game Center» і «Завантажити покупки» — для цього достатньо API-ключа. «Прибрати» видаляє конфіг лише з Nursery — в App Store Connect нічого не видаляється. До заявки на ревʼю вони додаються окремо, на вкладці «Публікація» (розділ 14).

Обмеження AppleДля досягнень і лідербордів увімкніть Game Center у capabilities сертифікатів (розділ 9) — інакше картка про це нагадає. Одне досягнення — не більше 100 очок, усі разом — не більше 1000. Покупку без скриншота для ревʼю створити можна, але на ревʼю Apple її не пропустить.
12

Скриншоти

Пристрої

Картка «Пристрої» — позначте, під які екрани завантажувати:

ПристрійЦільовий розмір (портрет)Архів у Notion
iPhone 6.9″1320 × 2868iphone69.zip
iPhone 6.5″1242 × 2688iphone65.zip
iPhone 6.3″1206 × 2622iphone63.zip
iPhone 6.1″1170 × 2532iphone61.zip
iPad 13″2048 × 2732ipad13.zip

Точно влучати в розміри не потрібно — Nursery сам приведе картинки до цільових під час завантаження. Але пропорції краще дотримувати: підгонка виконується розтягуванням під цільовий розмір, картинка з сильно іншим співвідношенням сторін спотвориться. Картинки при цьому перекодовуються, прозорість (alpha) втрачається.

Джерела

Для кожного пристрою скриншоти беруться з одного з двох місць (локальний вибір завжди пріоритетніший за Notion):

  • Notion — архів із відповідним іменем на сторінці застосунку (бейдж у рядку пристрою показує, чи його знайдено);
  • Свої файли — кнопка зі стрілкою в лоток («Вибрати скриншоти (.png/.jpg) або відео App Preview (.mov/.mp4): папку, .zip або файли») або просто перетягніть теку/архів/файли на рядок пристрою. Повернутися до Notion-архіву можна кнопкою «Прибрати локальний архів».

Відео App Preview. Файли .mov/.mp4 у наборі завантажуються як App Preview — без змін, тож вимоги Apple до роздільності й тривалості дотримуйтеся самі. Ліміт Apple — до 10 скриншотів і до 3 відео на пристрій у кожній мові; якщо вибрати більше, Nursery попередить вікном «Забагато файлів» — приберіть зайве й повторіть.

Порядок скриншотівВ App Store вони стають у порядку імен файлів за абеткою. Нумеруйте з провідним нулем: 01.png, 02.png, 03.png… — інакше 10 стане перед 2.

Локалі та завантаження

Картка «Локалі» — у які мови вантажити (кнопки «Усі» / «Зняти всі»). Під час першого завантаження за замовчуванням позначені всі локалі, під час оновлення — жодної (зазвичай оновлювати скриншоти потрібно не всюди). Кнопка запуску підписана за вибором: «Завантажити в усі локалі (N)» або «Завантажити в N локалей» (поки локалі не вибрано — «Завантажити скриншоти»); статус-картка покаже «Скриншоти завантажено», коли все готово.

Повторне завантаження замінює набірЗавантаження скриншотів у локаль видаляє попередні скриншоти цієї локалі й ставить нові — не додає до наявних.

Якщо вибраної локалі ще немає в ASC, скриншоти в неї не завантажаться (у лозі «В ASC немає локалізацій для: … — пропускаю. Спочатку запустіть Метадані.»). Порядок правильний: спершу метадані (створюють локалі), потім скриншоти.

A/B-тести сторінки (Product Page Optimization)

Картка «Куди завантажувати» вибирає ціль: «Основна сторінка» або варіант A/B-тесту з ASC (кнопка ↻ оновлює список). Новий тест — «Створити тест…»: назва (видно лише в ASC), 1–3 варіанти (оригінал лишається контрольною групою) і частка трафіку на тест. У кожного варіанта свої теки й свої локалі: перемкнули ціль — списки пристроїв і мов нижче змінюються; пристрій без своєї теки візьме файл основної сторінки, а якщо немає й його — архів із Notion. Можна завантажити одразу в усі налаштовані цілі. Змінювати скриншоти можна лише в тестів, які не на ревʼю, не запущені й не завершені; сам запуск тесту — вручну в App Store Connect після ревʼю варіантів.

13

Збірка IPA

Для збірки з вихідників потрібен встановлений Xcode (не лише Command Line Tools — їх Nursery розпізнає й попросить поставити повний Xcode і один раз його запустити). Зібрані та імпортовані .ipa зберігаються локально в бібліотеці білдів.

Вихідники

Картка «Вихідники»: перетягніть .xcodeproj / .xcworkspace або виберіть через «Вибрати…». Підтримуються й Flutter-проєкти — вкажіть теку проєкту, Nursery сам знайде ios/Runner.xcworkspace і прожене flutter pub get та flutter build перед збіркою (Flutter має бути встановлено). Якщо шлях не вибрано, а застосунок прив'язано до Notion, Nursery візьме source.zip зі сторінки.

Входити в акаунт у самому Xcode не потрібно: Nursery підписує білд вручну — сертифікатом і профілями зі своєї теки, команду й профіль підставляє сам, акуратно вносячи правки в проєкт лише на час збірки й повертаючи його у вихідний стан після.

Збірка та надсилання

  • «Зібрати IPA» (⌘B) — збирає й підписує. Потрібні створені (або імпортовані) сертифікати.
  • Після збірки з'явиться картка «Готовий до надсилання» з кнопкою «Надіслати в App Store Connect».
  • Готовий .ipa збоку — кнопка «Імпортувати…» або перетягніть файл прямо у вікно.
Збірки йдуть по однійЗахист проксі під час збірки працює на рівні всієї системи, тому дві збірки одночасно неможливі. Якщо запустити другу, вона стане в чергу зі статусом «У черзі» і стартує, коли звільниться перша.

Бібліотека білдів

Картка «Локальні IPA»: усі білди з версією, розміром і датою. У незавантажених — кнопка «Завантажити в App Store Connect», у завантажених — зелена позначка «Завантажено». Контекстне меню: «Показати у Finder», «Видалити». Після завантаження білд іде на обробку до Apple (зазвичай 5–30 хвилин) і з'являється на вкладці «Публікація».

Версія має зростатиНе можна завантажити білд із тим самим CFBundleShortVersionString, що в уже наявної в ASC версії (якщо вона не в статусі чернетки). Підніміть номер версії в проєкті й перезберіть — інакше завантаження зупиниться зі зрозумілим повідомленням.

Якщо збірка впала

Текст помилки в панелі операцій містить хвіст лога xcodebuild — за ним видно причину. Часті випадки:

  • «Відсутні файли сертифіката» — у теці немає .cer/.key/.mobileprovision. Запустіть «Створити сертифікати» (або перевірте, що імпорт пройшов).
  • ValidateDevelopmentAssets — це не про підпис, а про сам проєкт: налаштування Development Assets посилається на теку (зазвичай «Preview Content»), якої у вихідниках немає. Створіть її або приберіть посилання в налаштуваннях таргета Xcode.
  • Command Line Tools замість Xcode — встановіть повний Xcode з App Store і запустіть його один раз.

Повний лог завжди можна скопіювати в панелі операцій («Логи» → «Скопіювати логи») або надіслати розробнику кнопкою «Надіслати лог».

14

Публікація

Вкладка «Публікація» — дзеркало App Store Connect: усі версії застосунку зі статусами зрозумілими словами («Готується до надсилання», «Очікує на ревʼю», «У продажу»…; вихідний статус ASC — у підказці під час наведення), а під статусом — що робити далі. Кнопка «Оновити» перечитує стан із ASC. Колір бейджа: зелений — версія в продажу, червоний — відхилена, знята з ревʼю або білд відхилено, помаранчевий — усе інше (чернетка, ревʼю, обробка).

Фінальні дії виконуються тут — і лише вручну, у три кроки:

  1. Прикріпіть білдУ версії в статусі «Готується до надсилання» натисніть «Прикріпити білд» (або «Змінити», щоб замінити) і виберіть білд. Він з'являється в списку після обробки Apple. Заразом Nursery автоматично проставить декларацію шифрування (Export Compliance) — «шифрування не використовується». Якщо застосунок використовує нестандартне шифрування, виправте відповідь в App Store Connect.
  2. Створіть чернетку заявкиКнопка «Створити чернетку» (активна, коли білд прикріплено) збирає заявку на ревʼю: версія плюс, якщо їх увімкнено в «Метаданих», Game Center і покупки. На ревʼю при цьому нічого не надсилається — версія переходить у статус «У чернетці заявки».
  3. Надішліть на ревʼюНа місці «Створити чернетку» з'явиться «Надіслати». Підтвердження «Надіслати версію X на ревʼю?» — піде все, що лежить у чернетці заявки. Врахуйте: скасувати звідси не можна — зняти версію з ревʼю можна лише на сайті App Store Connect.

Якщо Game Center чи покупки потрібно додати до вже створеної чернетки — кнопка «Додати до заявки: …» угорі вкладки. Вона з'являється, коли їх увімкнено в «Метаданих», і теж нічого не надсилає на ревʼю.

Нова версія наявного застосунку створюється кнопкою + поряд із чипом версії в шапці: Nursery запропонує наступний номер, вам лишиться підтвердити. Потім заповнюйте «Що нового», скриншоти та білд як зазвичай.

Чому Submit не автоматизованоТак задумано: Nursery знімає рутину, але надсилання на ревʼю — незворотне рішення про реліз, і воно лишається за вами.
15

Швидке завантаження

Кнопка «Швидке завантаження» в шапці застосунку проганяє увесь конвеєр одним запуском. Перед стартом — візард із п'яти кроків:

  1. Сертифікати й моваОсновна локаль (із нею створюється застосунок в ASC; пізніше змінити її можна лише в «Метаданих»), додатковий таргет (віджет або NSE), вибір capabilities.
  2. МетаданіТа сама форма, що на вкладці «Метадані».
  3. СкриншотиПристрої, джерела, локалі.
  4. ВихідникиПроєкт для збірки (або source.zip із Notion).
  5. ПідтвердженняСписок «Що буде виконано» і кнопка «Запустити».

Порядок виконання: сертифікати → створення застосунку в ASC → збірка IPA → далі паралельно: завантаження метаданих, завантаження скриншотів і надсилання IPA до ASC. Уже виконані кроки розпізнаються автоматично: на них з'являється банер «Уже зроблено», а у зведенні — позначка, що їх буде пропущено. Між кроками Nursery робить невеликі випадкові паузи.

Перервалися посередині — запустіть зновуЯкщо якийсь крок упав (або ви натиснули «Скасувати завантаження»), уже зроблене зберігається: створений сертифікат, запис в ASC, зібраний білд нікуди не подінуться. Повторне «Швидке завантаження» продовжить із місця й пропустить готові кроки. За часткового збою паралельної фази буде пряма підказка «Запусти повторно — пропустить уже зроблене». Але кнопку видно, лише поки сесія активна й метадані ще не завантажено: якщо метадані встигли завантажитися, а впали скриншоти чи надсилання білда, кнопка зникне — решту доробіть вручну на вкладках «Скриншоти» і «Збірка».

Під час роботи кнопка в шапці перетворюється на «Скасувати завантаження». Поки йдуть сертифікати, створення застосунку чи збірка, інші операції з цим застосунком не запускаються — ці кроки виконуються суворо по одному. Після завершення лишаються ручні кроки на «Публікації» — прив'язка білда, чернетка заявки й надсилання (розділ 14). Захист проксі, нагадаємо, вмикається лише на стадії збірки; паралельна фаза йде через звичайний проксі.

16

Інтеграція з Notion

Notion використовується як сховище ресурсів застосунку: картка = застосунок, з неї Nursery підтягує метадані, вихідники, сертифікати та скриншоти, а службові поля дописує назад. Це зручний спосіб передавати матеріали між менеджером і тим, хто завантажує.

Як оформити картку NotionЯкі властивості та файли має містити картка (Bundle ID, блок Metadata, source.zip, cert.zip, архіви скриншотів) — з прикладами у PDF зі структурою картки Notion.

Підключення

Налаштування → «Інтеграції» → «Підключити». Створіть інтеграцію на notion.so/my-integrations, надайте їй доступ до потрібних сторінок (Share → запросити інтеграцію) і вставте Internal Integration Token (ntn_…). Токен зберігається в Keychain. Свій токен завжди пріоритетніший за токен із ліцензії; якщо токен входить у вашу ліцензію — підключати нічого не потрібно.

«Notion API 404 / object not found»Майже завжди означає, що сторінку не розшарено з інтеграцією. Відкрийте картку в Notion → Share → додайте вашу інтеграцію.

Що Nursery читає і що пише

  • Читає: назву, Bundle ID, App ID, Team ID, Issuer ID, посилання на політику конфіденційності; блок Metadata (рядки Ключ: значення — Subtitle, Description, Keywords; вони підставляються в основну локаль, якщо там ці поля порожні); файли source.zip, cert.zip та архіви скриншотів.
  • Пише назад (у міру роботи, без вашої участі): згенерований Bundle ID, Issuer ID, Team ID, App ID, email акаунта та готовий cert.zip. Статуси версій і публікації в Notion не пишуться.

Тексти з блоку Metadata підтягуються в метадані лише в порожні поля — ваші ручні правки не перетираються.

Правки в Notion не видно?Картка кешується клієнтом Notion, а Nursery читає актуальний стан через API. Якщо здається, що дані «не підтягнулися» або «не записалися», спершу жорстко оновіть сторінку в Notion (⌘R) — найчастіше все вже на місці.
17

Обмін файлами та резервні копії

Nursery принципово не має хмари та синхронізації: усі дані — на вашому Mac. Передача між колегами — явна, файлами:

  • Сертифікати — «Керування» → «Експорт .zip» у відправника, «Імпорт» в отримувача. Або покладіть cert.zip на сторінку Notion — колега імпортує «З Notion» (а під час додавання застосунку з Notion імпорт запуститься сам).
  • Білди — «Показати у Finder» → передайте .ipa → в отримувача «Імпортувати…» або drag&drop у вікно.
  • Вихідники та скриншоти — через файли на сторінці Notion (source.zip, архіви скриншотів).
  • Тексти локалей — окремого файлу обміну немає, але отримувач може підтягнути описи, ключові слова та підзаголовки із ASC кнопкою синку локалей або одразу під час прив'язки застосунку кнопкою «Прив'язати наявний…» на «Головній» (категорії, ціну, рейтинг і контакти синк не переносить).
Резервна копіяТека даних — ~/Library/Application Support/sv.NurseryApp/. Найцінніше в ній — приватні ключі сертифікатів: вони існують лише у вас. Експортуйте cert.zip важливих застосунків або включіть теку в резервне копіювання (Time Machine тощо).
18

Оновлення та підтримка

  • Оновлення приходять автоматично: Nursery перевіряє їх під час запуску й далі кожні 6 годин і показує вікно «Доступна нова версія». Перевірити вручну: Налаштування → «Оновлення» → «Перевірити оновлення». Після встановлення застосунок перезапуститься сам.
  • Помилка операції — у панелі операцій натисніть «Надіслати лог»: опишіть, що робили, повний лог прикріпиться автоматично і піде до розробника.
  • Ідеї та питання — картка «Зворотний зв'язок» у налаштуваннях або Telegram @R_R_E_B.
19

Часті питання

У розширенні «Server unreachable»

Приймач cookies працює лише поки в Nursery відкрито вікно входу. Спершу натисніть «Увійти» в застосунку, потім — «Sync Cookies» у браузері.

Розширення пише «No Apple session»

Ви не залогінені на appstoreconnect.apple.com у цьому браузері (або профілі). Відкрийте сайт, увійдіть, потім тисніть «Sync Cookies».

Синхронізується не той акаунт

Браузер тримає одну активну сесію Apple на профіль. Вийдіть із першого акаунта на сайті й увійдіть під потрібним — або використовуйте окремий профіль браузера під кожен Apple ID (розділ 7). Якщо застосунок уже прив'язано до іншого акаунта, Nursery такі cookies не прийме й покаже, який акаунт прийшов і до якого прив'язано застосунок.

Кнопка неактивна — чому?

В основних кнопок причину написано прямо під ними, в інших — у підказці під час наведення курсора («Потрібен проксі…», «API-ключ не завантажено», «Оберіть хоча б один пристрій» тощо). Це перший крок діагностики майже будь-якої ситуації.

Вкладка «Метадані» розмита і не редагується

Застосунок ще не створено в App Store Connect. Вкладка «Головна» → картка «Прогрес» → рядок «Застосунок створено» → «Створити».

«Немає редагованої версії в App Store Connect»

Метадані завантажуються в чернетку (PREPARE_FOR_SUBMISSION). Для оновлення живого застосунку спершу створіть нову версію кнопкою + в шапці.

Статус «Сесія завершилася»

Cookie-сесія Apple закінчилася — це норма, повторіть вхід через розширення. Операції за API-ключем (скриншоти, завантаження, версії, Submit) працюють і без неї.

Залитий білд не видно на «Публікації»

Apple обробляє білд після завантаження — зазвичай 5–30 хвилин. Натисніть «Оновити» пізніше. Лист від Apple про завершення обробки прийде на пошту акаунта.

Збірка йде з реальної IP, хоча проксі задано

Не піднявся системний захист збірки. Увімкніть NurseryApp у Системних налаштуваннях → «Об'єкти входу та розширення», або не погоджуйтеся на «Продовжити без захисту», коли Nursery про це питає (розділ 8).

Чи потрібен вхід у Xcode?

Ні. Nursery підписує збірку вручну своїми сертифікатами й профілями — акаунт у Xcode і вибір Team не потрібні.

Як перенести застосунок на інший Mac?

Експортуйте сертифікати («Експорт .zip»), передайте .ipa-білди за потреби. На новому Mac додайте застосунок із тим самим Bundle ID, імпортуйте архів, потім на «Головній» натисніть «Прив'язати наявний…» і вкажіть Apple ID застосунку — вкладка «Метадані» відкриється, а локалі з текстами (описи, ключові слова, підзаголовки) підтягнуться з ASC. Локалі, які вже є в Nursery, не перезаписуються. А от категорії, ціну, віковий рейтинг і контакти для рев'ю синк не відновлює — їх заповніть заново. Ліцензію, прив'язану до старого Mac, допоможе перепривʼязати розробник.