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

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

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

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

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

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

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

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

03

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

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

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

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

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

04

Интерфейс

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

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

Табы выбранного приложения

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

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

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

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

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

Уведомления

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

05

Настройки

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

  • «Аккаунт и лицензия» — статус ключа, оставшиеся дни, «Обновить статус», продление через Telegram.
  • «Интеграции» — подключение Notion-токена (раздел 16).
  • «Сеть» — тумблер «Direct Mode»: разрешить операции без прокси. Настройка глобальная, действует на все приложения. Осторожно: Apple увидит реальный IP устройства (раздел 8).
  • «Обновления» — текущая версия и кнопка «Проверить обновления».
  • «Браузерное расширение» — скачать «Nursery Cookie Sync» и инструкция по установке (раздел 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 положит папку Nursery-Cookie-Sync в ~/Downloads и покажет её в Finder.
  2. Подключите её в ChromeОткройте chrome://extensions → включите Developer ModeLoad unpacked → выберите скачанную папку.
Не удаляйте и не перемещайте папкуChrome загружает распакованное расширение прямо из неё. Удалите или перенесёте папку — расширение отвалится, придётся подключать заново.

Вход

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

  1. Нажмите «Войти» в NurseryКнопка в шапке приложения. Откроется окно «Вход через cookies» со статусом «Ожидание cookies…» — с этого момента 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» жмёте из нужного профиля (расширение придётся подключить в каждом).

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

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

Прокси и Direct Mode

Каждому приложению (аккаунту) можно назначить собственный прокси — весь трафик 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.

Direct Mode

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

09

Сертификаты

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

Создание

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

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

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

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

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

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

Повторный запуск безопасен: когда сертификаты уже созданы, «Управление» → «Capabilities» работает в режиме обновления — меняются только capabilities и перевыпускается профиль, сертификат и ключи не трогаются. Capabilities, включённые вами вручную в Developer Portal, 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-профиль (+ отдельный для Notification Service Extension, если включён)
AuthKey_<KeyID>.p8API-ключ App Store Connect

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

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

Таб «Главная»

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

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

Метаданные

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

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

Локали

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

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

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

Поля и лимиты

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

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

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

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

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

Заливка

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

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

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 сам приведёт картинки к целевым при заливке. Но пропорции лучше соблюдать: подгонка выполняется растяжением под целевой размер, картинка с сильно другим соотношением сторон исказится. Всё перекодируется в JPEG, прозрачность (alpha) при этом теряется.

Источники

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

  • Notion — архив с соответствующим именем на странице приложения (бейдж в строке устройства показывает, найден ли он);
  • Свои файлы — кнопка со стрелкой в лоток («Выбрать свои скриншоты: папку, .zip или изображения») или просто перетащите папку/архив/картинки на строку устройства. Вернуться к Notion-архиву можно кнопкой «Убрать локальный архив».
Порядок скриншотовВ App Store они встают в порядке имён файлов по алфавиту. Нумеруйте с ведущим нулём: 01.png, 02.png, 03.png… — иначе 10 встанет перед 2.

Локали и заливка

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

Повторная заливка заменяет наборЗагрузка скриншотов в локаль удаляет прежние скрины этой локали и ставит новые — не добавляет к существующим. И ещё: Nursery не ограничивает число картинок, а App Store принимает максимум 10 на устройство — лишние Apple отклонит уже на своей стороне. Держите в наборе не больше десяти.

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

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»: все билды с версией, размером и датой. У незагруженных — кнопка «Загрузить в ASC», у загруженных — зелёная пометка «Загружено». Контекстное меню: «Показать в Finder», «Удалить». После заливки билд уходит на обработку к Apple (обычно 10–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. Цвет бейджа подсказывает состояние: зелёный — версия в сторе (READY_FOR_SALE), красный — отклонена или невалидный бинарь, оранжевый — черновик, на ревью или в обработке.

Два финальных действия выполняются здесь — и только вручную:

  1. Прикрепите билдУ версии в статусе PREPARE_FOR_SUBMISSION нажмите «Прикрепить билд» (или «Изменить», чтобы заменить) и выберите билд. Он появляется в списке после обработки Apple. Заодно Nursery автоматически проставит декларацию шифрования (Export Compliance) — отдельно этим заниматься не нужно.
  2. Отправьте на ревьюКнопка «Submit» активна, только когда билд привязан. Подтверждение «Отправить версию X на ревью?». Учтите: откатить отправку через API нельзя — только Reject вручную в ASC.

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

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

Быстрый залив

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

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

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

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

Во время работы кнопка в шапке превращается в «Отменить залив», а ручные операции по этому приложению на время блокируются. По завершении остаются два ручных действия — привязка билда и Submit (раздел 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, Category); файлы 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 проверяет их при каждом запуске и показывает окно «Доступна новая версия». Проверить вручную: Настройки → «Обновления»«Проверить обновления». После установки приложение перезапустится само.
  • Ошибка операции — в панели операций нажмите «Отправить лог»: опишите, что делали, полный лог прикрепится автоматически и уйдёт разработчику.
  • Идеи и вопросы — карточка «Обратная связь» в настройках или Telegram @appmakeios.
19

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Экспортируйте сертификаты («Экспорт .zip»), передайте .ipa-билды при необходимости, на новом Mac добавьте приложение с тем же Bundle ID и импортируйте архив. Тексты локалей (описания, ключевые слова, подзаголовки) можно подтянуть из ASC кнопкой синка локалей. А вот категории, цену, возрастной рейтинг и контакты для ревью синк не восстанавливает — их заполните заново. Лицензию, привязанную к старому 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 running macOS (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. 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: @appmakeios. 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.

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 and a Bundle ID are enough — 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 enable Direct Mode)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: capabilities, 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 "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.

In the bottom-right corner of the window sits the "First steps" card — a five-item checklist whose checkmarks tick themselves as you make progress. When everything is done, it disappears (or hide it with the "Hide hint" button).

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 (gray), operation in progress.
  • 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, categories, price, rating — section 11
"Screenshots"⌘3Devices, sources, upload — section 12
"Build"⌘4Source, building the IPA, build library — section 13
"Publication"⌘5Versions in ASC, attaching the build, Submit — 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).
  • "Network" — the "Direct Mode" 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" — download "Nursery Cookie Sync" and installation instructions (section 7).
  • "Feedback" — message the developer straight from the app.
  • "Show onboarding" — show the intro slides and the "First steps" checklist again.
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 (toast "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, Apple ID, and primary locale are locked — the app already exists in App Store Connect and it's too late to change them. 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. Download the extension folderSettings → "Browser extension""Download extension". Nursery puts the Nursery-Cookie-Sync folder in ~/Downloads and reveals it in Finder.
  2. Load it in ChromeOpen chrome://extensions → enable Developer ModeLoad unpacked → select the downloaded folder.
Don't delete or move the folderChrome loads the unpacked extension straight from it. Delete or move the folder and the extension falls off — you'll have to load it again.

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 status "Waiting for cookies…" — 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 load the extension into each one).

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 ("Sync with 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, SubmitAPI key only
Syncing locales from ASCAPI key only
08

Proxy and Direct Mode

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 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.

Direct Mode

The "Direct Mode" 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 "Direct mode enabled" banner on Home reminds you of this. Without a proxy and without Direct Mode, 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 Direct Mode) 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 and Game Center are marked "always on" — Apple enables them itself.
  • "Notification Service Extension" — the toggle adds an extra <bundle>.NotificationService target for rich push notifications (images in pushes): Nursery creates a separate Bundle ID and profile for it. After the certificates are created, the toggle 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 3 distribution certificates. If all slots are taken by other (not created in Nursery) certificates, Nursery will revoke a third-party one 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 you enabled manually in the Developer Portal are not turned off by Nursery.

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 Notification Service Extension, 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", "Direct mode enabled", "Proxy protection 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;
    • "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 — first 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 all store languages. The primary locale is marked with a "Primary" badge, the others are removed with an ×, and new ones are added via the "Add locale" chip. Switching a chip shows that locale's form.

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.

Fields and limits

The locale form: "Subtitle", "Keywords" (comma-separated), "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 button's tooltip 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".
  • "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+/12+/17+) 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; for the phone, Nursery first tries to take it from the Developer account data, and the "Regenerate" button creates a valid US-format number. If ASC rejected the number, the contacts are saved without a phone — the log will hint that you should enter it manually. Provide a demo account (Username/Password) if review needs to sign in to the app.

Upload

The "Sync with 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. The release type is set to "manual" — after Apple approves it, you release the version, not an automaton.

The steps are independent: if some didn't go through, a "Metadata not fully 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 tooltip will tell you.

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. Everything is re-encoded to JPEG, and transparency (alpha) is lost in the process.

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 ("Choose your own screenshots: folder, .zip, or images") or just drag a folder/archive/images onto the device row. You can return to the Notion archive with the "Remove local archive" button.
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" / "Nobody" buttons). On the first upload all locales are checked by default; on an update — none (usually a screenshot update isn't needed everywhere). The "Upload screenshots" button starts the process; 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. Also: Nursery doesn't limit the number of images, but the App Store accepts at most 10 per device — the extras Apple will reject on its side. Keep no more than ten in a set.

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

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 submit" 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 ASC" button; uploaded ones have a green "Uploaded" mark. Context menu: "Show in Finder", "Delete". After upload the build goes to Apple for processing (usually 10–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. The "Refresh" button re-reads the state from ASC. The badge color hints at the state: green — version live in the store (READY_FOR_SALE), red — rejected or an invalid binary, orange — draft, in review, or processing.

Two final actions happen here — and only manually:

  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) — you don't need to deal with it separately.
  2. Submit for reviewThe "Submit" button is active only when a build is attached. Confirmation: "Submit version X for review?". Note: you can't roll back a submission via the API — only a manual Reject in ASC.

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. CertificatesThe primary locale (fixed forever), the Notification Service Extension toggle, 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 — just 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: "Run again — it will skip what's already done".

While it's running, the header button turns into "Cancel upload", and manual operations on this app are temporarily blocked. When it finishes, two manual actions remain — attaching the build and Submit (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, Category); 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 (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 on every launch 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 @appmakeios.
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).

A button is disabled — why?

Hover over it: every disabled button has a tooltip with the exact reason ("Sign in via cookies first", "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 10–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"), transfer the .ipa builds if needed, on the new Mac add the app with the same Bundle ID and import the archive. Locale texts (descriptions, keywords, subtitles) can be pulled from ASC with the sync-locales button. 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 із macOS (застосунок нативний, не web-обгортка).
  • Xcode — лише якщо збираєте IPA з вихідників. Для всього іншого (метадані, скриншоти, завантаження готового .ipa) Xcode не потрібен.
  • Браузер на базі Chromium (Chrome, Edge, Brave, Arc тощо) — для розширення «Nursery Cookie Sync». Safari та Firefox не підтримуються.
Усе зберігається локальноДані застосунків — сертифікати, ключі, білди, метадані — лежать лише на вашому Mac у ~/Library/Application Support/sv.NurseryApp/. Жодної хмари: чим ділитися й з ким — вирішуєте ви (див. розділ 17).
02

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

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

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

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

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

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

03

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

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

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

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

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

04

Інтерфейс

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

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

Таби вибраного застосунку

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

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

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

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

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

Сповіщення

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

05

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

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

  • «Акаунт і ліцензія» — статус ключа, дні, що лишилися, «Оновити статус», продовження через Telegram.
  • «Інтеграції» — підключення Notion-токена (розділ 16).
  • «Мережа» — тумблер «Direct Mode»: дозволити операції без проксі. Налаштування глобальне, діє на всі застосунки. Обережно: Apple побачить реальну IP пристрою (розділ 8).
  • «Оновлення» — поточна версія і кнопка «Перевірити оновлення».
  • «Розширення для браузера» — завантажити «Nursery Cookie Sync» та інструкція зі встановлення (розділ 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 покладе теку Nursery-Cookie-Sync у ~/Downloads і покаже її у Finder.
  2. Підключіть її в ChromeВідкрийте chrome://extensions → увімкніть Developer ModeLoad unpacked → виберіть завантажену теку.
Не видаляйте й не переміщуйте текуChrome завантажує розпаковане розширення прямо з неї. Видалите або перенесете теку — розширення відвалиться, доведеться підключати заново.

Вхід

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

  1. Натисніть «Увійти» в NurseryКнопка в шапці застосунку. Відкриється вікно «Вхід через cookies» зі статусом «Очікування cookies…» — з цієї миті 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» тиснете з потрібного профілю (розширення доведеться підключити в кожному).

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

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

Проксі та Direct Mode

Кожному застосунку (акаунту) можна призначити власний проксі — увесь трафік 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.

Direct Mode

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

09

Сертифікати

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

Створення

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

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

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

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

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

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

Повторний запуск безпечний: коли сертифікати вже створено, «Керування» → «Capabilities» працює в режимі оновлення — змінюються лише capabilities і перевипускається профіль, сертифікат і ключі не чіпаються. Capabilities, увімкнені вами вручну в Developer Portal, 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-профіль (+ окремий для Notification Service Extension, якщо увімкнено)
AuthKey_<KeyID>.p8API-ключ App Store Connect

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

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

Таб «Головна»

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

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

Метадані

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

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

Локалі

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

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

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

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

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

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

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

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

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

Заливка

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

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

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 сам приведе картинки до цільових під час заливки. Але пропорції краще дотримувати: підгонка виконується розтягуванням під цільовий розмір, картинка з сильно іншим співвідношенням сторін спотвориться. Усе перекодовується в JPEG, прозорість (alpha) при цьому втрачається.

Джерела

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

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

Локалі та заливка

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

Повторна заливка замінює набірЗавантаження скриншотів у локаль видаляє попередні скрини цієї локалі й ставить нові — не додає до наявних. І ще: Nursery не обмежує число картинок, а App Store приймає максимум 10 на пристрій — зайві Apple відхилить уже на своєму боці. Тримайте в наборі не більше десяти.

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

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»: усі білди з версією, розміром і датою. У незавантажених — кнопка «Завантажити в ASC», у завантажених — зелена позначка «Завантажено». Контекстне меню: «Показати у Finder», «Видалити». Після заливки білд іде на обробку до Apple (зазвичай 10–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. Колір бейджа підказує стан: зелений — версія в сторі (READY_FOR_SALE), червоний — відхилена або невалідний бінар, помаранчевий — чернетка, на ревʼю або в обробці.

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

  1. Прикріпіть білдУ версії в статусі PREPARE_FOR_SUBMISSION натисніть «Прикріпити білд» (або «Змінити», щоб замінити) і виберіть білд. Він з'являється в списку після обробки Apple. Заразом Nursery автоматично проставить декларацію шифрування (Export Compliance) — окремо цим займатися не потрібно.
  2. Надішліть на ревʼюКнопка «Submit» активна, лише коли білд прив'язано. Підтвердження «Надіслати версію X на ревʼю?». Врахуйте: відкотити надсилання через API не можна — лише Reject вручну в ASC.

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

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

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

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

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

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

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

Під час роботи кнопка в шапці перетворюється на «Скасувати завантаження», а ручні операції з цим застосунком на час блокуються. Після завершення лишаються дві ручні дії — прив'язка білда і Submit (розділ 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, Category); файли 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 перевіряє їх під час кожного запуску й показує вікно «Доступна нова версія». Перевірити вручну: Налаштування → «Оновлення»«Перевірити оновлення». Після встановлення застосунок перезапуститься сам.
  • Помилка операції — у панелі операцій натисніть «Надіслати лог»: опишіть, що робили, повний лог прикріпиться автоматично і піде до розробника.
  • Ідеї та питання — картка «Зворотний зв'язок» у налаштуваннях або Telegram @appmakeios.
19

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

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

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

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

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

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

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

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

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

Таб «Метадані» розмитий і не редагується

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

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

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

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

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

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

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

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

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

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

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

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

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