Przejdź do głównej zawartości

Agent AI dobrze radzi sobie z React Native, gdy zna przypięte wersje bibliotek, a każda zmiana przechodzi bramki niewymagające ludzkiego czytelnika: sprawdzenie typów, lint, Jest z React Native Testing Library, flow Maestro na urządzeniu i build release. Z tymi bramkami agent może przejąć dane offline, wydajność list i uwierzytelnianie biometryczne.

Ta strona jest dla programistów i liderów technicznych, którzy wypuszczają aplikację React Native do App Store i Google Play. Twój FlatList zacina się na średniej klasy Androidzie, gdy lista przekroczy kilkaset wierszy. Build release ulega awarii na module natywnym, którego build deweloperski nigdy nie załadował. Ekran offline z zeszłotygodniowego demo gubi zapisy, gdy sieć się zrywa. Nic z tego nie widać w symulatorze na laptopie, a wszystko to jest pracą zależną od konkretnych bibliotek, którą agent wykonuje dobrze, gdy wie, o którą bibliotekę i wersję chodzi.

Dopiero zaczynasz konfigurować agenta do pracy mobilnej? Zacznij od przeglądu rozwoju aplikacji mobilnych, który opisuje wybór stosu, instalację jego skilli i weryfikację na symulatorach.

  • Tabelę wersji i blok instrukcji projektu, które powstrzymują agenta przed pisaniem API ze starszej wersji głównej
  • Prompt do szkieletu, który daje aplikację Expo z testami i bramkami od pierwszego dnia
  • Prompt offline-first dla react-native-mmkv v4 i TanStack Query, z mutacjami, które przetrwają zabicie aplikacji
  • Prompt do FlashList v2 i polecenie dla Androida, które dowodzi, że zacinanie zniknęło
  • Prompt do bramki biometrycznej, która przełącza na kod zamiast blokować użytkownika
  • Tabelę weryfikacji: która bramka czego dowodzi i kto zatwierdza zmianę
  • Mapę awarii, których nigdy nie widać w symulatorze, z krokami naprawy

Agenci mieszają API z kilku wersji głównych, bo ich dane treningowe obejmują je wszystkie. Podaj wersje w prompcie albo w instrukcjach projektu. Tabela pokazuje, co npm serwował 26.09.2026.

PakietWersja 26.09.2026Co zmienia się dla agenta
react-native0.87.1 (Expo SDK 57 przypina 0.86.3)Nowa Architektura jest jedyną architekturą: 0.82 usunęło możliwość jej wyłączenia (changelog React Native)
expo57.0.25Pakiety natywne instaluj przez npx expo install, nigdy przez ręczną edycję wersji
@shopify/flash-list2.3.2 (SDK 57 przypina 2.0.2)v2 działa tylko na Nowej Architekturze i nie przyjmuje szacunków rozmiaru
react-native-mmkv4.3.2v4 to Nitro Module: createMMKV() i storage.remove(), a nie new MMKV() i storage.delete()
@tanstack/react-query5.104.0Utrwalanie przez @tanstack/react-query-persist-client i @tanstack/query-sync-storage-persister
@testing-library/react-native14.0.1v14 porzuca React 18, zmienia render i renderHook na asynchroniczne i wymaga pakietu test-renderer jako peer dependency
jest-expo57.0.5Preset Jest, który Expo dokumentuje dla testów jednostkowych; mockuje natywną stronę Expo SDK

Nową aplikację zaczynaj na Expo. Domyślny szablon create-expo-app to TypeScript z Expo Router. Szczegóły SDK, EAS i aktualizacji over-the-air opisuje strona wzorce rozwoju Expo; ta strona obejmuje pracę z React Native, która wygląda tak samo z Expo i bez niego.

Daj agentowi kontekst React Native przed pierwszym promptem

Dział zatytułowany „Daj agentowi kontekst React Native przed pierwszym promptem”

Trzy rzeczy zmieniają wynik agenta bardziej niż jakiekolwiek sformułowanie promptu: powyższa tabela wersji, lista bramek, które agent musi uruchomić, oraz skille dziedzinowe lub serwery MCP, dzięki którym sprawdzi swoją pracę na urządzeniu.

Instrukcje projektu. Wstaw ten blok do CLAUDE.md dla Claude Code, do AGENTS.md dla Codeksa i do reguły projektu w Cursorze. Treść jest identyczna we wszystkich trzech narzędziach.

## React Native rules
- Expo SDK 57, React Native 0.86 (New Architecture only). Add native packages with `npx expo install`.
- react-native-mmkv v4: `createMMKV()`, `storage.remove()`. FlashList v2: no `estimatedItemSize`.
- Tests: Jest via `jest-expo` + @testing-library/react-native v14 with `test-renderer` (`await render(...)`). Not Vitest.
## Before you say a task is done
1. `npx tsc --noEmit`
2. `npx expo lint`
3. `npx jest --ci`
4. `npx expo install --check`
5. For UI changes: run the matching Maestro flow in `.maestro/` and paste the result.

Skille. Expo publikuje oficjalne skille w expo/skills (2612 gwiazdek na GitHubie 26.09.2026); instalację dla każdego narzędzia opisuje strona o Expo. Callstack, firma konsultingowa specjalizująca się w React Native (skille społecznościowe, nie od Meta), publikuje produkcyjne skille, takie jak react-native-best-practices i upgrading-react-native, w callstackincubator/agent-skills. CLI skills (1.7.0), działające z wieloma agentami, instaluje je tak samo dla Claude Code, Codeksa i Cursora:

Okno terminala
npx skills@latest add callstackincubator/agent-skills --skill react-native-best-practices

Skille ładują się tylko wtedy, gdy zadanie ich potrzebuje, więc kosztują mało kontekstu. Zobacz instalowanie skilli i zarządzanie nimi.

Serwery MCP. CLI Maestro ma wbudowany serwer MCP (maestro mcp), dzięki któremu agent w trakcie pracy stuka, przewija i sprawdza asercje na żywym emulatorze, symulatorze albo urządzeniu z Androidem. Buildy i symulatory iOS obsługuje MobileBuildMCP (dawniej XcodeBuildMCP), opisany na stronie MCP serwerów deweloperskich. Każdy serwer MCP dodaje swoją listę narzędzi do każdej sesji, więc podłączaj Maestro tylko w repozytorium aplikacji.

Okno terminala
# after installing the Maestro CLI (Java 17+)
claude mcp add maestro -- maestro mcp

README Maestro (pobrane 26.09.2026) dokumentuje maestro mcp; powyższe linie dla poszczególnych klientów używają standardowej składni stdio każdego narzędzia. Jeśli twój klient potrzebuje dodatkowych opcji, sprawdź dokumentację konfiguracji MCP w Maestro.

Postaw szkielet aplikacji React Native z bramkami od pierwszego dnia

Dział zatytułowany „Postaw szkielet aplikacji React Native z bramkami od pierwszego dnia”

Poproś o środowisko testowe (harness) i bramki już w prompcie do szkieletu. Aplikacja, która startuje bez nich, nigdy ich nie dostaje, a każda późniejsza zmiana agenta jest wtedy nieweryfikowalna.

Prompt jest taki sam w każdym narzędziu; różni się tylko sposób wywołania. Zapisz powyższy prompt jako scaffold-prompt.txt i uruchom z nim agenta.

Okno terminala
claude "$(cat scaffold-prompt.txt)"

Od wersji 2.1.283 (oba kanały wydań, stan na 2026-10-12) sesje interaktywne startują w trybie auto, w którym każdą akcję ocenia klasyfikator; sesje z ustawionym disableAutoMode, modele, których tryb auto nie obsługuje, oraz claude -p (z wyjątkiem zewnętrznych dostawców i wyłączonej telemetrii, gdzie od v2.1.285 startuje w trybie auto) startują w trybie Manual i pytają przed każdym poleceniem powłoki. W obu przypadkach instalacje npx są oczekiwane, a zapis poza projektem nie.

Czysty React Native bez Expo (tzw. bare workflow, npx @react-native-community/cli@latest init) wybieraj tylko wtedy, gdy potrzebujesz kodu natywnego, którego nie wyrażą config plugins. Wtedy to ty utrzymujesz projekty ios/ i android/, a opisane niżej awarie dryfu natywnego stają się twoje.

Zbuduj warstwę danych offline-first, która przetrwa zabicie aplikacji

Dział zatytułowany „Zbuduj warstwę danych offline-first, która przetrwa zabicie aplikacji”

„Dodaj obsługę offline” daje wrapper na AsyncStorage, który gubi zakolejkowane zapisy. Nazwij silnik przechowywania, warstwę cache i wymaganie trwałości.

Kod spinający persister nie powinien być dłuższy niż ten poniżej. Jeśli agent pisze więcej, prawdopodobnie wymyśla persister od nowa:

import { createMMKV } from 'react-native-mmkv';
import { createSyncStoragePersister } from '@tanstack/query-sync-storage-persister';
const storage = createMMKV({ id: 'query-cache' });
export const persister = createSyncStoragePersister({
storage: {
getItem: (key) => storage.getString(key) ?? null,
setItem: (key, value) => storage.set(key, value),
removeItem: (key) => {
storage.remove(key);
},
},
});

Agent najczęściej myli się w kwestii trwałości: co się stanie, gdy aplikacja zostanie zabita w trakcie synchronizacji i otwarta ponownie offline? Bez setMutationDefaults przywrócona mutacja nie ma funkcji do wywołania i po cichu nigdy się nie odtworzy. Test 1 z promptu pada dokładnie na tym błędzie i właśnie dlatego jest w prompcie. Jeśli potrzebujesz dwukierunkowej synchronizacji relacyjnej zamiast odtwarzanego cache’u, to decyzja o silniku synchronizacji (na przykład WatermelonDB); zanim poprosisz o nią agenta, potwierdź, że wybrana wersja wspiera Nową Architekturę.

Zamiana najczęściej przewijanej listy na @shopify/flash-list ponownie wykorzystuje (recykluje) widoki wierszy zamiast montować osobny widok dla każdego wiersza. Wersja 2 zmieniła zasady: nie przyjmuje szacunków rozmiaru i działa tylko na Nowej Architekturze. Jak wcześniej, prowadzi osobną pulę recyklingu dla każdej wartości getItemType; v2 polega na niej bardziej, bo sama mierzy wiersze. Agent wytrenowany na v1 dodaje estimatedItemSize, którego v2 już nie potrzebuje.

Zielony test dowodzi, że lista się renderuje, a nie że jest płynna. Aby udowodnić poprawę wydajności, zmierz build release na prawdziwym urządzeniu z Androidem ze średniej półki przed zmianą i po niej:

Okno terminala
npx expo run:android --variant release
adb shell dumpsys gfxinfo com.example.app reset
# scroll the list for 20 seconds, then:
adb shell dumpsys gfxinfo com.example.app | grep -i "janky frames"

Zastąp com.example.app identyfikatorem swojej aplikacji. Wklej obie liczby do pull requesta. Jeśli wiersze różnych typów nie mają getItemType, v2 wstawia widok wysokiej karty w miejsce niskiego wiersza i widzisz miganie albo złe wysokości: to wersja v2 dawnego zacinania przy złym szacunku.

Dodaj bramkę biometryczną, która nie blokuje użytkowników

Dział zatytułowany „Dodaj bramkę biometryczną, która nie blokuje użytkowników”

Face ID działa w symulatorze z włączonym Enrolled. Na prawdziwym telefonie bez zarejestrowanej biometrii albo po zbyt wielu nieudanych próbach naiwna bramka blokuje użytkownika. authenticateAsync z expo-local-authentication może się nie powieść, bo użytkownik anuluje, biometria nie jest zarejestrowana, brakuje sprzętu, użytkownik jest zablokowany albo monit wygasa.

Testy jednostkowe dowodzą rozgałęzień. Potem sprawdź każdą platformę raz na fizycznym urządzeniu, bo symulator nie odtwarza blokady.

Zbuduj funkcję od początku do końca w krokach do przeglądu

Dział zatytułowany „Zbuduj funkcję od początku do końca w krokach do przeglądu”

Gdy budujesz funkcję od zera, prowadź agenta przez uporządkowane kroki zamiast jednego wielkiego promptu. Każdy krok kończy się bramką, więc akceptujesz go na podstawie dowodów i nigdy nie czytasz całego diffu na końcu.

  1. Ekran i typy. „Create a ProjectList route with a typed useProjects() TanStack Query hook that returns mock data.” Bramka: npm run typecheck przechodzi.

  2. Prawdziwe dane i każdy stan. „Replace the mock with a fetch to /api/projects. Add a loading skeleton, an empty state, and an error state with a Retry button that calls refetch().” Bramka: testy RNTL dla ładowania, wierszy, stanu pustego ([]) i ponowienia, uruchomione przez npm test.

  3. Wydajność. Wklej prompt do FlashList. Bramka: liczby janky frames z gfxinfo przed zmianą i po niej, na buildzie release.

  4. Zachowanie na urządzeniu. „Write .maestro/project-list.yaml that opens the list, scrolls to the end, and asserts the last row. Add an Android-only flow that runs setAirplaneMode: enabled, pulls to refresh, and asserts the error state and Retry.” Bramka: maestro test .maestro/ przechodzi. Polecenia trybu samolotowego w Maestro działają tylko na Androidzie, bo symulatory iOS go nie obsługują.

Jak zweryfikować wynik agenta w React Native bez czytania każdej linii?

Dział zatytułowany „Jak zweryfikować wynik agenta w React Native bez czytania każdej linii?”

Każda bramka odpowiada na jedno pytanie. Każ agentowi uruchomić wszystkie i dołączyć wynik do pull requesta: to ten sam pakiet dowodów, którego używa reszta serwisu.

BramkaPolecenieCzego dowodzi
Typynpx tsc --noEmitNie wślizgnęło się API ze złej wersji głównej (new MMKV() tu pada)
Lintnpx expo lintReguły hooków i nieużywany kod
Testy jednostkowe i komponentównpx jest --ciRozgałęzienia: odtwarzanie offline, ścieżki awaryjne biometrii, stany puste i błędu
Zgodność zależnościnpx expo install --checkŻaden pakiet natywny nie odjechał od wersji przypiętej przez SDK
Zachowanie na urządzeniumaestro test .maestro/Nawigacja, gesty i stany offline w prawdziwym środowisku uruchomieniowym
Build releasenpx expo run:ios --configuration Release, npx expo run:android --variant releaseŚcieżka kodu, którą uruchamiają użytkownicy, z __DEV__ ustawionym na false
Wydajnośćadb shell dumpsys gfxinfo <application-id>Janky frames przed zmianą i po niej, na nazwanym urządzeniu

Kto zatwierdza. Programista, który zlecił zadanie, odpowiada za kryteria akceptacji i flow Maestro. Zmiana istniejącego flow lub testu wymaga zatwierdzenia przez drugą osobę, bo agent, który edytuje test, żeby przeszedł, usunął dowód; zobacz chroń wyrocznię. Macierze urządzeń i farmy urządzeń opisuje strona testowanie aplikacji mobilnych.

Debuguj błędy widoczne tylko w release za pomocą React Native DevTools

Dział zatytułowany „Debuguj błędy widoczne tylko w release za pomocą React Native DevTools”

React Native DevTools to domyślny debugger dla aplikacji na Hermes; w React Native 0.76 zastąpił przepływ z Chrome DevTools. Naciśnij j w terminalu, w którym działa Metro lub Expo. Flipper nie jest odpowiedzią: jego README podaje v0.239.0 jako ostatnie wydanie ze wsparciem React Native. Reactotron (reactotron-react-native 5.3.1 na npm) to popularny dodatek do trwałych logów sieci i stanu.

Wysyłaj buildy React Native do TestFlight i Google Play

Dział zatytułowany „Wysyłaj buildy React Native do TestFlight i Google Play”

Na Expo natywną kompilację, dane uwierzytelniające i upload do sklepów obsługują EAS Build i EAS Submit; pipeline sterowany fingerprintem i etapowane aktualizacje over-the-air opisuje strona wzorce rozwoju Expo. W projekcie bez Expo sam podłączasz Fastlane do CI, a agent napisze dużo YAML-a. Ogranicz go:

Zanim scalisz workflow, porównaj go z wzorcami pipeline’ów CI/CD. Nigdy nie pozwól agentowi uruchomić produkcyjnego uploadu, żeby przetestować workflow.

Co psuje się w React Native, czego symulator nigdy nie pokaże?

Dział zatytułowany „Co psuje się w React Native, czego symulator nigdy nie pokaże?”

Czy ten artykuł Ci pomógł?

Jedno kliknięcie, bez logowania.

wcale bardzo