Подготовьте приложение к магазинам с помощью ИИ-агента для программирования
Агент читает приложение, которое перед ним, — SDK, разрешения, bundle id — и по найденному готовит черновик каждой страницы для соответствия требованиям. Вы читаете черновики и публикуете их. Агент этого сделать не может.
Прежде чем начать
Вам нужны Claude Code и аккаунт AppFoyer. Бесплатного тарифа достаточно: создайте аккаунт. Ключ создавать не нужно — при первом подключении агент попросит вас одобрить его в браузере.
ИИ-агента нет вообще? Шесть полей в браузере дают те же пять страниц без плагина.
Не пользуетесь Claude Code? Плагину он нужен, а страницам политики конфиденциальности и условий — нет: в их редакторах в дашборде есть промпт, заполненный данными вашего приложения, который вы запускаете в любом ассистенте и вставляете ответ обратно. Он приведён целиком в руководстве по политике конфиденциальности и руководстве по условиям использования.
Установка
claude
/plugin marketplace add appfoyer/claude-plugin
/plugin install appfoyer@appfoyer Для начала аккаунт не нужен: агент читает сборку, показывает, что нашёл, и задаёт вопросы на вашем компьютере, а подключиться просит только тогда, когда есть что сохранить. При первом обращении к AppFoyer в браузере откроется страница одобрения: войдите или создайте бесплатный аккаунт, проверьте название и адрес, куда вернётся браузер, и одобрите. Claude Code хранит подключение и сам его продлевает; ничего не копируется и ничего не сохраняется в вашей оболочке. Если браузер не открылся, выполните /mcp, выберите appfoyer и нажмите Authenticate. В десктопном приложении Claude Code подключитесь один раз этим способом из терминала, а затем начните там новую сессию: уже запущенная сессия не видит нового подключения. Отключите его на странице Agent в дашборде, и следующий вызов сразу завершится ошибкой. Claude Code не обновляет сторонний маркетплейс сам: в /plugin → Marketplaces → appfoyer выберите Enable auto-update, чтобы получать новые версии.
На этой машине нет браузера — удалённый сервер, контейнер, запуск из скрипта? Используйте вместо этого API-ключ: создайте его в Agent → API key — for CI and headless use, установите плагин, как описано выше, ради сценария работы и добавьте сервер ещё раз с ключом в заголовке:
export APPFOYER_API_KEY=cpk_…
claude mcp add --transport http appfoyer-key https://app.appfoyer.com/mcp --header "Authorization: Bearer $APPFOYER_API_KEY" Плагин берёт ключ только из этой переменной окружения — skill его никогда не видит, и он передаётся только в заголовке Authorization, который заполняет Claude Code.
Другой MCP-клиент — claude.ai, Claude Desktop, Cursor, VS Code — может подключиться к https://app.appfoyer.com/mcp так же, через ту же страницу одобрения. Он получит инструменты; пошаговый сценарий, который читает ваши файлы сборки, поставляется с плагином для Claude Code.
Что сказать
Запускайте это внутри репозитория вашего приложения, а не в пустой папке:
| Скажите | Что происходит |
|---|---|
Make this app store-ready | Сканирует файлы сборки, уточняет факты, которые не смог вывести сам, готовит черновик каждой страницы и возвращает ссылку на проверку. |
Is this app store-ready? | Аудит по чек-листу соответствия требованиям, только чтение. Ничего не записывает. |
Wire the store-ready links into the app | После публикации: предлагает ссылки на политику конфиденциальности и поддержку внутри приложения в виде diff, который вы проверяете. |
Add the AppFoyer drift check | Предлагает GitHub workflow, который отмечает pull request, добавляющие SDK или разрешение, которые страницы, возможно, не описывают. Как это работает. |
Примеры
Говорите своими словами; вот случаи, с которыми справляется skill.
Одно приложение, первый запуск
> Make this app store-ready - Перечисляет, что нашёл в файлах сборки, — SDK, разрешения, bundle id — с файлом и строкой для каждого.
- Спрашивает только то, чего не смог найти: название компании, email поддержки, юрисдикцию, ссылки на магазины. Не больше двух раундов.
- Создаёт приложение, загружает значок из репозитория и готовит черновики всех пяти страниц.
- Заканчивает ссылкой на проверку. Ничего не становится публичным, пока вы не опубликуете там.
Повторный запуск после изменения
> Make this app store-ready - Находит существующее приложение по его application id и сравнивает новые факты с сохранёнными.
- Переписывает черновики только тех страниц, которых касается изменение, например политики конфиденциальности после нового SDK аналитики.
- Не трогает значок и адрес, если вы не попросите.
Несколько flavor, названных в промпте
> Make com.acme.weather.free and com.acme.weather.pro store-ready - Создаёт два приложения и ничего не спрашивает о выборе.
- Читает собственную папку, название и зависимости каждого flavor. Рекламный SDK, который использует только бесплатный flavor, не попадает в политику конфиденциальности flavor pro.
- Возвращает ссылку на проверку и таблицу URL для консолей по каждому flavor.
Несколько flavor, не названных в промпте
> Make this app store-ready - Перечисляет flavor с их application id, все заранее выбраны, а вы решаете, какие из них получат сайт.
- Типы сборки, такие как debug и staging, перечисляются как исключённые и не предлагаются.
Измерения бренд × окружение
> Make every brand store-ready - Перечисляет комбинации (brandAProd, brandBProd), а не отдельные flavor.
- Предлагает только производственное окружение. dev и qa никогда не попадают в магазин.
- Берёт название приложения из Gradle (resValue, manifestPlaceholders) или из перенесённых source sets, если сборка задаёт его там.
- Если не может понять, окружения это или бренды, спрашивает.
Собственный адрес (Pro и Advanced)
> Make this app store-ready - Составляет адрес из английского названия приложения, например weather-now.
- Если он занят или слишком похож на название бренда, пробует следующий — weather-now-app, acme-weather — не больше пяти раз, затем спрашивает вас.
- На бесплатном тарифе оставляет адрес app-… и сообщает, что собственный адрес доступен на Pro.
- Адрес app-… продолжает отдавать тот же сайт.
Смена адреса, который уже используется
> Change the address to weather-radar - Сначала спрашивает. Старый собственный адрес освобождается сразу, и страница в магазине, где он всё ещё указан, перестаёт работать.
- Меняет его только после вашего согласия.
Обновление значка
> Update the app icon - Находит значок приложения: значок Play 512, самое большое изображение mipmap или маркетинговое изображение AppIcon для iOS — в первую очередь собственный значок flavor.
- Если он больше 512 КБ, уменьшает копию во временной папке. Ваш репозиторий не затрагивается.
- Сообщает, какой файл загрузил. У опубликованного приложения новый значок сразу становится видимым.
Приложение с рекламой
> Make this app store-ready. AdMob publisher id pub-0000000000000000 - Пишет app-ads.txt из строк, которые вы даёте. Publisher id нет в вашем коде, поэтому агент никогда его не угадывает.
- Напоминает указать сайт как сайт разработчика на странице приложения в магазине.
- AdMob подтвердил файлы app-ads.txt на наших адресах; дайте ему до 24 часов на обход.
Синхронизация страниц со сборкой
> Add the AppFoyer drift check - Каждый запуск “make this app store-ready” записывает appfoyer.json в корень репозитория: SDK, типы данных и разрешения, на основе которых написаны страницы. Его пишет тот же сканер, что запускает проверка, и никогда — вручную.
- Этот промпт показывает GitHub workflow для бесплатного appfoyer/check-action и, если вы согласны, записывает .github/workflows/appfoyer.yml. Уже существующий файл он никогда не перезаписывает.
- С этого момента каждый pull request перечисляет, что он добавил или убрал с момента написания страниц, с файлом и строкой. Повторный запуск плагина обновляет черновики и appfoyer.json.
- За вас ничего не коммитится. В руководстве по синхронизации политики конфиденциальности есть подробности и настройка для других CI-систем.
Проверка без изменений
> Is this app store-ready? - Прогоняет чек-лист для каждого подходящего приложения и сообщает, чего не хватает. Ничего не записывает.
- Flavor, для которого ещё нет приложения, отмечается как отсутствующий.
Добавление ссылок в приложение
> Wire the store-ready links into the app - Нужны опубликованные страницы.
- Предлагает diff для ссылок на политику конфиденциальности и поддержку в экране настроек или строках. Применяет его, только когда вы согласны, и никогда не коммитит.
Что покидает ваш компьютер
Только выведенные факты:
- название приложения, платформа и bundle id или application id;
- названия SDK и разрешений, найденных в ваших файлах сборки;
- подтверждённые вами ответы — название компании, email поддержки, юрисдикция, URL в магазинах;
- текст страниц, который готовит агент; он хранится в вашем аккаунте как черновик;
- собственный значок приложения, отправленный один раз по одноразовой ссылке для загрузки.
Никаких других файлов, никогда исходный код, никогда секреты или ключи, найденные в репозитории. Агент отправляет то, что политика конфиденциальности и так обязана указать.
Один файл записывается в ваш репозиторий и остаётся там: appfoyer.json — запись о том, на основе чего написаны страницы, создаваемая сканером, встроенным в плагин. Он никуда не отправляется. Агент никогда не коммитит ни его, ни что-либо ещё — это делаете вы.
Чего агент сделать не может
Подключается ли плагин через браузер или с API-ключом, у него учётные данные агента — поэтому публикация ему недоступна вовсе. Это обеспечивается на сервере, а не вежливой просьбой к агенту:
- Инструмента для публикации нет. Агент пишет черновики; ваши опубликованные страницы не меняются.
- У двух вещей нет черновика: у значка и у собственного адреса. У опубликованного приложения они сразу меняют живой сайт, и агент сообщает, когда установил их. Заменить уже используемый собственный адрес без вашего согласия он не может.
- REST-маршрут, который публикует страницу, сразу отклоняет учётные данные агента — только сессия.
- Каждая страница при публикации по-прежнему проходит ту же проверку содержимого, что и правка, сделанная вручную.
- Каждый вызов агента записывается в журнал аудита аккаунта вместе с подключением или ключом, который его сделал.
Поэтому худшее, что может случиться при скомпрометированном подключении или ключе, — черновики, которые придётся отбросить, неправильный значок или новый адрес, а не страница, опубликованная от вашего имени.
Какие инструменты он получает
Плагин подключается к MCP-эндпоинту, который предоставляет ровно эти инструменты:
| Инструмент | Что делает | |
|---|---|---|
list_apps | Чтение | Все приложения аккаунта со slug, публичным URL и признаком, опубликовано ли что-нибудь. |
get_app | Чтение | Одно приложение: настройки, сохранённые факты о сборе данных и для каждой страницы — опубликованный текст, состояние публикации и ожидающий черновик. |
create_app | Запись | Создаёт приложение со страницами из шаблонов. Ничего не публично. |
create_apps | Запись | Создаёт до десяти приложений за один вызов, по одному на product flavor. Каждое начинает неопубликованным. |
update_app | Запись | Меняет настройки, сохранённые факты о сборе данных или список SDK. Никогда не правит текст страниц. |
set_page | Запись | Записывает черновик одной страницы. Опубликованная страница не затрагивается. |
set_ad_lines | Запись | Заменяет app-ads.txt. Используется, только если есть рекламный SDK и вы указали publisher id. |
get_checklist | Чтение | Чек-лист готовности к магазинам, вычисленный на сервере, плюс какие страницы ещё имеют неопубликованные черновики. |
get_store_forms | Чтение | Черновики ответов для формы Data safety в Google Play и сведений App Privacy в Apple — по фактам и списку SDK. Вводите их в консоль вы сами. |
request_publish | Запись | Сообщает, что черновики готовы, и возвращает URL для проверки. Ничего не публикует. |
set_icon | Запись | Возвращает одноразовый URL для загрузки значка приложения. Применяется сразу — у значка нет черновика. |
check_slug | Чтение | Проверяет собственный адрес (Pro и Advanced) по тем же правилам, что и дашборд. |
set_slug | Запись | Занимает собственный адрес. Применяется сразу. Отказывается заменять уже имеющийся адрес без вашего согласия. |
Если что-то пошло не так
| Симптом | Причина |
|---|---|
| Инструменты показывают "needs authentication" | Подключение так и не было одобрено или было отключено. Выполните /mcp, выберите appfoyer и нажмите Authenticate. |
| Страница одобрения сообщает, что запрос нельзя использовать | Срок действия ссылки истёк, или её открыли дважды. Начните заново из редактора; ничего не было подключено. |
unauthorized при использовании API-ключа | Ключ отозван в дашборде или принадлежит другому аккаунту. Создайте новый и снова экспортируйте его. |
| Публикация возвращает ошибку квоты | Лимит опубликованных приложений по тарифу исчерпан. Приложение и его черновики сохраняются — снимите с публикации другое приложение или перейдите на более высокий тариф, затем опубликуйте с экрана проверки. |
| Черновик возвращается отклонённым или задержанным | Проверка содержимого что-то обнаружила. В причинах перечислено, что совпало и как это исправить; отредактируйте и отправьте снова. Ничего публичного не изменилось. |
Одно, чего это не меняет
Черновики — это шаблоны, дополненные по вашему коду, а не юридическая консультация. То, что агент написал их быстро, не делает их верными — прочитайте написанное перед публикацией, особенно список того, что собирает ваше приложение. Магазин считает ответственным именно вас.
Вопросы: support@appfoyer.com.