Przygotuj aplikację do sklepu z agenta kodującego
Twój agent czyta aplikację, którą ma przed sobą — SDK, uprawnienia, bundle id — i na podstawie tego, co znajdzie, przygotowuje wersję roboczą każdej strony zgodności. Ty czytasz wersje robocze i je publikujesz. Agent nie może tego zrobić.
Zanim zaczniesz
Potrzebujesz Claude Code i konta AppFoyer. Wystarczy plan darmowy: załóż konto. Nie trzeba tworzyć żadnego klucza — przy pierwszym połączeniu agent poprosi Cię o zatwierdzenie w przeglądarce.
W ogóle nie masz agenta kodującego? Sześć pól w przeglądarce daje te same pięć stron bez wtyczki.
Nie używasz Claude Code? Wtyczka go wymaga, ale strony polityki prywatności i regulaminu już nie: ich edytory w panelu mają prompt uzupełniony danymi Twojej aplikacji, który uruchamiasz w dowolnym asystencie i wklejasz odpowiedź — w całości wydrukowany w poradniku o polityce prywatności i poradniku o regulaminie.
Instalacja
claude
/plugin marketplace add appfoyer/claude-plugin
/plugin install appfoyer@appfoyer Na start nie potrzebujesz konta: agent czyta Twój build, pokazuje, co znalazł, i zadaje pytania na Twoim komputerze, a o połączenie prosi dopiero wtedy, gdy jest coś do zapisania. Przy pierwszym wywołaniu AppFoyer Twoja przeglądarka otwiera stronę zatwierdzenia: zaloguj się lub załóż darmowe konto, sprawdź nazwę i adres, na który wróci przeglądarka, i zatwierdź. Claude Code przechowuje połączenie i samo je odnawia; nic nie jest kopiowane, nic nie jest zapisywane w Twojej powłoce. Jeśli przeglądarka się nie otworzy, uruchom /mcp, wybierz appfoyer i kliknij Authenticate. W aplikacji desktopowej Claude Code połącz się raz w ten sposób z terminala, a potem rozpocznij tam nową sesję: sesja, która już działała, nie widzi nowego połączenia. Rozłącz je na stronie Agent w panelu, a następne wywołanie od razu się nie powiedzie. Claude Code nie odświeża samo marketplace’u innej firmy: w /plugin → Marketplaces → appfoyer wybierz Enable auto-update, żeby dostawać nowe wersje.
Na tej maszynie nie ma przeglądarki — zdalny serwer, kontener, uruchomienie ze skryptu? Użyj zamiast tego klucza API: utwórz go w Agent → API key — for CI and headless use, zainstaluj wtyczkę jak wyżej, żeby mieć cały przepływ pracy, i dodaj serwer jeszcze raz z kluczem w nagłówku:
export APPFOYER_API_KEY=cpk_…
claude mcp add --transport http appfoyer-key https://app.appfoyer.com/mcp --header "Authorization: Bearer $APPFOYER_API_KEY" Wtyczka odczytuje klucz wyłącznie z tej zmiennej środowiskowej — skill nigdy go nie widzi, a klucz trafia tylko do nagłówka Authorization, który wypełnia Claude Code.
Inny klient MCP — claude.ai, Claude Desktop, Cursor, VS Code — może połączyć się z https://app.appfoyer.com/mcp w ten sam sposób, przez tę samą stronę zatwierdzenia. Dostaje narzędzia; przepływ pracy krok po kroku, który czyta Twoje pliki builda, jest dostarczany z wtyczką Claude Code.
Co powiedzieć
Uruchamiaj to w repozytorium aplikacji, a nie w pustym katalogu:
| Powiedz | Co się dzieje |
|---|---|
Make this app store-ready | Skanuje pliki builda, potwierdza fakty, których nie mógł ustalić, przygotowuje wersję roboczą każdej strony i zwraca link do przeglądu. |
Is this app store-ready? | Audyt tylko do odczytu według listy kontrolnej zgodności. Niczego nie zapisuje. |
Wire the store-ready links into the app | Po publikacji: proponuje linki do polityki prywatności i wsparcia w aplikacji jako diff do Twojej oceny. |
Add the AppFoyer drift check | Proponuje workflow GitHub, który oznacza pull requesty dodające SDK lub uprawnienie, których strony mogą nie opisywać. Jak to działa. |
Przykłady
Mów własnymi słowami; to są przypadki, które obsługuje skill.
Jedna aplikacja, pierwsze uruchomienie
> Make this app store-ready - Wymienia, co znalazł w plikach builda — SDK, uprawnienia, bundle id — każde z plikiem i wierszem.
- Pyta tylko o to, czego nie mógł znaleźć: nazwę firmy, e-mail wsparcia, jurysdykcję, linki do sklepów. Najwyżej w dwóch rundach.
- Tworzy aplikację, przesyła ikonę z repozytorium i przygotowuje wersje robocze wszystkich pięciu stron.
- Kończy linkiem do przeglądu. Nic nie jest publiczne, dopóki tam nie opublikujesz.
Uruchom ponownie po zmianie
> Make this app store-ready - Znajduje istniejącą aplikację po jej application id i porównuje nowe fakty z zapisanymi.
- Ponownie przygotowuje tylko te strony, których dotyczy zmiana, np. politykę prywatności po dodaniu nowego SDK analityki.
- Nie rusza ikony ani adresu, chyba że o to poprosisz.
Kilka flavorów, wymienionych w prompcie
> Make com.acme.weather.free and com.acme.weather.pro store-ready - Tworzy dwie aplikacje i o nic nie pyta w sprawie wyboru.
- Czyta własny folder, nazwę i zależności każdego flavora. SDK reklamowe używane tylko przez flavor free nie trafia do polityki prywatności flavora pro.
- Zwraca link do przeglądu i tabelę adresów URL do konsoli dla każdego flavora.
Kilka flavorów, niewymienionych
> Make this app store-ready - Wymienia flavory z ich application id, wszystkie wstępnie zaznaczone, a Ty wybierasz, które dostaną stronę.
- Typy buildów, takie jak debug i staging, są wymienione jako wykluczone, a nie proponowane.
Wymiary marka × środowisko
> Make every brand store-ready - Wymienia kombinacje (brandAProd, brandBProd), a nie pojedyncze flavory.
- Proponuje tylko środowisko produkcyjne. dev i qa nigdy nie trafiają do sklepu.
- Odczytuje nazwę aplikacji z Gradle (resValue, manifestPlaceholders) lub z przeniesionych source setów, jeśli build ją tam umieszcza.
- Jeśli nie potrafi stwierdzić, czy wymiar to środowiska czy marki, pyta.
Własny adres (Pro i Advanced)
> Make this app store-ready - Tworzy adres z angielskiej nazwy aplikacji, na przykład weather-now.
- Jeśli jest zajęty lub zbyt podobny do nazwy marki, próbuje kolejnego — weather-now-app, acme-weather — najwyżej pięć razy, a potem pyta Ciebie.
- W planie darmowym zostawia adres app-… i informuje, że własny adres jest dostępny w Pro.
- Adres app-… nadal serwuje tę samą stronę.
Zmiana adresu, którego już używasz
> Change the address to weather-radar - Najpierw pyta. Stary własny adres zostaje natychmiast zwolniony, a strona aplikacji w sklepie, która nadal go podaje, przestaje działać.
- Zmienia go dopiero, gdy się zgodzisz.
Aktualizacja ikony
> Update the app icon - Znajduje ikonę launchera: ikonę Play 512, największy obraz mipmap lub obraz marketingowy AppIcon z iOS — najpierw własną ikonę flavora.
- Jeśli ma ponad 512 KB, zmniejsza kopię w folderze tymczasowym. Twoje repozytorium pozostaje nietknięte.
- Informuje, który plik przesłał. W opublikowanej aplikacji nowa ikona jest widoczna od razu.
Aplikacja z reklamami
> Make this app store-ready. AdMob publisher id pub-0000000000000000 - Zapisuje app-ads.txt z podanych przez Ciebie wierszy. Identyfikatora wydawcy nie ma w Twoim kodzie, więc nigdy go nie zgaduje.
- Przypomina, żeby ustawić stronę jako witrynę dewelopera na stronie aplikacji w sklepie.
- AdMob zweryfikował pliki app-ads.txt pod naszymi adresami; daj mu do 24 godzin na ich pobranie.
Utrzymuj strony w zgodzie z buildem
> Add the AppFoyer drift check - Każde uruchomienie „make this app store-ready” zapisuje appfoyer.json w katalogu głównym repozytorium: SDK, typy danych i uprawnienia, na podstawie których powstały strony. Zapisuje go ten sam skaner, którego używa kontrola, nigdy ręcznie.
- Ten prompt pokazuje workflow GitHub dla darmowego appfoyer/check-action i zapisuje .github/workflows/appfoyer.yml, gdy się zgodzisz. Nigdy nie nadpisuje istniejącego.
- Od tej chwili każdy pull request wymienia, co dodał lub usunął od napisania stron, z plikiem i wierszem. Ponowne uruchomienie wtyczki aktualizuje wersje robocze i appfoyer.json.
- Nic nie jest commitowane za Ciebie. Szczegóły i konfigurację dla innych systemów CI znajdziesz w poradniku o utrzymywaniu polityki prywatności w zgodzie z buildem.
Sprawdzenie bez zmieniania czegokolwiek
> Is this app store-ready? - Uruchamia listę kontrolną dla każdej pasującej aplikacji i zgłasza, czego brakuje. Niczego nie zapisuje.
- Flavor, który nie ma jeszcze aplikacji, jest zgłaszany jako brakujący.
Dodanie linków do aplikacji
> Wire the store-ready links into the app - Wymaga opublikowanych stron.
- Proponuje diff z linkami do polityki prywatności i wsparcia na ekranie ustawień lub w zasobach tekstowych. Stosuje go tylko po Twojej zgodzie i nigdy nie commituje.
Co opuszcza Twój komputer
Tylko wywnioskowane fakty:
- nazwa aplikacji, platforma oraz bundle id lub application id;
- nazwy SDK i uprawnień znalezionych w Twoich plikach builda;
- potwierdzone przez Ciebie odpowiedzi — nazwa firmy, e-mail wsparcia, jurysdykcja, adresy URL sklepów;
- tekst stron przygotowany przez agenta, zapisany na Twoim koncie jako wersja robocza;
- własna ikona aplikacji, wysłana raz przez jednorazowy link do przesyłania.
Żaden inny plik, nigdy kod źródłowy, nigdy sekrety ani klucze znalezione w repozytorium. To, co wysyła agent, i tak musi znaleźć się w polityce prywatności.
Jeden plik jest zapisywany w Twoim repozytorium i tam pozostaje: appfoyer.json, zapis tego, na podstawie czego powstały strony, tworzony przez skaner dołączony do wtyczki. Nie jest nigdzie wysyłany. Agent nigdy go nie commituje, ani niczego innego — robisz to Ty.
Czego agent nie może zrobić
Niezależnie od tego, czy łączy się przez przeglądarkę, czy kluczem API, wtyczka ma poświadczenie agenta — więc publikowanie jest dla niej w ogóle niedostępne. Wymusza to serwer, a nie uprzejma prośba skierowana do agenta:
- Nie ma narzędzia do publikowania. Agent zapisuje wersje robocze; Twoje opublikowane strony się nie zmieniają.
- Dwie rzeczy nie mają wersji roboczej: ikona i własny adres. W opublikowanej aplikacji zmieniają opublikowaną stronę od razu, a agent informuje, kiedy je ustawił. Nie może zastąpić własnego adresu, którego już używasz, bez Twojej zgody.
- Ścieżka REST, która publikuje stronę, odrzuca poświadczenia agenta bez wyjątku — tylko sesja.
- Każda strona nadal przechodzi przy publikacji tę samą kontrolę treści co edycja wpisana ręcznie.
- Każde wywołanie agenta jest zapisywane w dzienniku audytu konta wraz z połączeniem lub kluczem, który je wykonał.
W najgorszym razie przejęte połączenie lub klucz oznacza więc wersje robocze do odrzucenia, złą ikonę lub nowy adres — a nie stronę opublikowaną w Twoim imieniu.
Narzędzia, które dostaje
Wtyczka łączy się z punktem końcowym MCP, który udostępnia dokładnie te narzędzia:
| Narzędzie | Co robi | |
|---|---|---|
list_apps | Odczyt | Każda aplikacja na koncie z jej slugiem, publicznym adresem URL i informacją, czy cokolwiek jest opublikowane. |
get_app | Odczyt | Jedna aplikacja: ustawienia, zapisane fakty o zbieraniu danych oraz opublikowany tekst każdej strony, stan publikacji i oczekująca wersja robocza. |
create_app | Zapis | Tworzy aplikację ze stronami z szablonów. Nic nie jest publiczne. |
create_apps | Zapis | Tworzy do dziesięciu aplikacji w jednym wywołaniu, po jednej na każdy flavor produktu. Każda zaczyna jako nieopublikowana. |
update_app | Zapis | Zmienia ustawienia, zapisane fakty o zbieraniu danych lub listę SDK. Nigdy nie edytuje tekstu stron. |
set_page | Zapis | Zapisuje wersję roboczą jednej strony. Opublikowana strona pozostaje nietknięta. |
set_ad_lines | Zapis | Zastępuje app-ads.txt. Używane tylko wtedy, gdy jest SDK reklamowe i podano identyfikatory wydawcy. |
get_checklist | Odczyt | Lista kontrolna gotowości do sklepu obliczona przez serwer oraz informacja, które strony mają jeszcze nieopublikowane wersje robocze. |
get_store_forms | Odczyt | Wersje robocze odpowiedzi do formularza Data safety w Google Play i szczegółów App Privacy u Apple, na podstawie faktów i listy SDK. Wpisujesz je w konsoli samodzielnie. |
request_publish | Zapis | Informuje, że przygotowanie wersji roboczych jest zakończone, i zwraca adres URL przeglądu. Niczego nie publikuje. |
set_icon | Zapis | Zwraca jednorazowy adres URL do przesłania ikony aplikacji. Widoczna od razu — ikona nie ma wersji roboczej. |
check_slug | Odczyt | Sprawdza własny adres (Pro i Advanced) według tych samych zasad co panel. |
set_slug | Zapis | Zajmuje własny adres. Widoczny od razu. Odmawia zastąpienia adresu, który już masz, bez Twojej zgody. |
Gdy coś pójdzie nie tak
| Objaw | Przyczyna |
|---|---|
| Narzędzia pokazują „needs authentication” | Połączenie nigdy nie zostało zatwierdzone albo zostało rozłączone. Uruchom /mcp, wybierz appfoyer i kliknij Authenticate. |
| Strona zatwierdzenia informuje, że żądania nie można użyć | Link wygasł albo został otwarty dwukrotnie. Zacznij od nowa w edytorze; nic nie zostało połączone. |
unauthorized przy kluczu API | Klucz został unieważniony w panelu albo należy do innego konta. Utwórz nowy i ponownie go wyeksportuj. |
| Publikacja zwraca błąd limitu | Limit opublikowanych aplikacji w planie jest wykorzystany. Aplikacja i jej wersje robocze zostają zachowane — wycofaj publikację innej aplikacji lub zmień plan na wyższy, a potem opublikuj z ekranu przeglądu. |
| Wersja robocza wraca odrzucona lub wstrzymana | Kontrola treści coś wykryła. Lista powodów podaje, co zostało dopasowane i jak to poprawić; edytuj i wyślij ponownie. Nic publicznego się nie zmieniło. |
Jedna rzecz, której to nie zmienia
Wersje robocze to szablony uzupełnione na podstawie Twojego kodu, a nie porada prawna. To, że agent pisze je szybko, nie czyni ich prawdziwymi — przeczytaj, co napisał, zanim opublikujesz, zwłaszcza listę tego, co zbiera Twoja aplikacja. To Ciebie sklep uznaje za odpowiedzialnego.
Pytania: support@appfoyer.com.