Przejdź do głównej zawartości

Wzorce rozwoju Expo

Twój build EAS jest zielony, aplikacja działa w Expo Go na telefonie, a potem ktoś z zespołu dodaje react-native-vision-camera i Expo Go po cichu przestaje ładować aplikację. Połowa Twoich promptów zakłada managed workflow, druga połowa zakłada development build, a AI raz po raz generuje kod dla tego wariantu, który akurat zgadło. Lekarstwem nie jest „używaj AI częściej” - jest nim podanie AI dwóch faktów, które naprawdę określają projekt Expo: na jakim SDK jesteś i czy uruchamiasz Expo Go, czy development build.

Ten przepis pokazuje przepływy pracy z Expo, które przetrwają zderzenie z EAS, weryfikacją w sklepie z aplikacjami i aktualizacjami SDK, prowadzone przez Cursor, Claude Code i Codex.

  • Prompt do szkieletu, który przypina wersję Expo SDK i typ workflow, żeby AI przestało zgadywać
  • Gotowy do wklejenia prompt na chroniony autoryzacją layout zakładek Expo Router, który radzi sobie z wyścigiem przekierowania
  • Prompt do konfiguracji NativeWind, który tworzy typowany motyw, a nie tylko ciągi className
  • Prompt na EAS Build + aktualizacje OTA wpięte w GitHub Actions przez serwer GitHub MCP
  • Mapę „Gdy to się sypie” z trybami awarii, które naprawdę kosztują dzień pracy: aktualizacje SDK, niezgodność z Expo Go, poświadczenia EAS i niedopasowanie środowiska uruchomieniowego przy OTA

Największą dźwignią dla jakości wyniku jest wskazanie wersji SDK i typu workflow na samym początku. Na czerwiec 2026 aktualną linią jest Expo SDK 56 (React Native 0.85, React 19.2, Hermes jako domyślny silnik). Przypnij ją.

Otwórz Cursor w pustym folderze, wejdź w tryb Agent (Cmd/Ctrl + I) i wklej:

Scaffold a new Expo SDK 56 app using npx create-expo-app@latest with the TypeScript template. Add Expo Router (file-based routing), NativeWind v4 for styling, and configure a development build (not Expo Go) because we will add native modules later. Set up eas.json with development, preview, and production profiles.

Tryb Agent uruchamia CLI, edytuje app.json/eas.json i pokazuje diff przed zastosowaniem. Przejrzyj profile w eas.json, zanim je zaakceptujesz.

Routing oparty na plikach to miejsce, gdzie idzie najwięcej czasu w Expo, a przekierowanie bramki autoryzacji to miejsce, gdzie siedzi najwięcej błędów: przekieruj, zanim layout się zamontuje, a dostaniesz ostrzeżenie „navigate before mounting the Root Layout”; przekieruj w renderze, a na jedną klatkę mignie chroniona treść.

AI powinno wyprodukować drzewo takie jak poniżej oraz pasujące pliki layoutu:

app/
_layout.tsx // SessionProvider + Stack.Protected guard
(auth)/
_layout.tsx
login.tsx
(tabs)/
_layout.tsx // Tabs
index.tsx
profile.tsx

Jak ocenić wynik: potwierdź, że utrzymuje splash screen z SplashScreen.preventAutoHideAsync(), dopóki SecureStore się nie rozwiąże, oraz że bramka używa Stack.Protected (SDK 53+), a nie useEffect + router.replace, które powoduje mignięcie przy przekierowaniu. Jeśli widzisz router.replace w ścieżce renderowania, odeślij to z poleceniem „move the guard out of render.”

Pułapka promptów dla NativeWind to ściana className="bg-blue-500" z magicznymi wartościami. Poproś o typowany motyw, żeby kolory pochodziły z jednego miejsca.

Odrzuć pierwszą wersję, jeśli przycisk wpisuje wartości szesnastkowe na sztywno zamiast bg-primary - cały sens polega na tym, że zmiana brandingu to modyfikacja jednego pliku.

Tutaj serwer GitHub MCP zarabia na swoje miejsce. Bez niego AI pisze wiarygodnie wyglądający eas-build.yml, wklejasz go, pushujesz i odkrywasz, że nazwy sekretów są błędne. Z podłączonym serwerem GitHub MCP agent czyta Twoje rzeczywiste repozytorium - istniejące workflow, nazwy sekretów, ochronę gałęzi - i pisze CI, które pasuje.

Konfiguracja jest identyczna we wszystkich trzech narzędziach (to oficjalny zdalny serwer GitHub MCP):

Dodaj do .cursor/mcp.json:

{
"mcpServers": {
"github": {
"url": "https://api.githubcopilot.com/mcp/"
}
}
}

Powiadomienia Expo mają jeden produkcyjny haczyk, który AI rutynowo pomija: musisz wysłać token push do swojego backendu i obsłużyć deep link przy dotknięciu powiadomienia, a nie tylko poprosić o uprawnienie.

Mobile to obszar, gdzie pewność siebie AI najbardziej rozjeżdża się z rzeczywistością. Cztery tryby awarii poniżej to te, które naprawdę kosztują dzień:

  • Zepsucie przy aktualizacji SDK. npx expo install expo@^56 to łatwa część; przechodnie zależności natywne i wtyczki konfiguracyjne już nie. Uruchom npx expo-doctor i wklej jego pełny wynik do AI z poleceniem: „We just upgraded to SDK 56. Here is expo-doctor output. Fix each version mismatch using npx expo install --fix, and flag any third-party package with no SDK 56 support.” Nie pozwól AI ręcznie edytować wersji w package.json - expo install rozwiązuje zgodne zakresy.
  • „Działa w Expo Go, ale nie na development build” (lub odwrotnie). To prawie zawsze moduł, którego nie ma w Expo Go, albo wtyczka konfiguracyjna, która działa tylko podczas prebuild. Powiedz AI, które środowisko zawodzi, i poproś o sprawdzenie, czy moduł wymaga development build oraz wpisu wtyczki konfiguracyjnej w app.json.
  • Poświadczenia i provisioning EAS. Gdy eas build zawodzi na podpisywaniu, wklej log buildu. Zwykli winowajcy to wygasły certyfikat dystrybucyjny Apple lub brakujący klucz push. Poproś AI o zinterpretowanie konkretnego błędu EAS, zamiast regenerować poświadczenia na ślepo - eas credentials jest interaktywne i destrukcyjne przy niewłaściwym użyciu.
  • Niedopasowanie środowiska uruchomieniowego OTA. Jeśli eas update „kończy się sukcesem”, ale urządzenia nigdy go nie pobierają, runtimeVersion aktualizacji nie pasuje do żadnego zainstalowanego buildu. Każ AI porównać wersję środowiska uruchomieniowego aktualizacji z najnowszym buildem ze sklepu, zanim założysz, że pipeline aktualizacji jest zepsuty.