Przejdź do głównej zawartości

Tworzenie aplikacji mobilnych z Cursor

Twój zespół musi dostarczyć aplikację mobilną działającą zarówno na iOS, jak i Android. Projektanci przekazali Ci makiety w Figma, backend API już istnieje, a deadline jest za sześć tygodni. Wybrałeś React Native, ponieważ Twój zespół zna TypeScript, ale nikt nie ma głębokiego doświadczenia z natywnymi modułami. Pierwszy ekran zajął trzy dni, bo połowa czasu poszła na debugowanie problemów z Metro bundler, quirki ze stylowaniem specyficznym dla platformy i konfigurację biblioteki nawigacji. W tym tempie nie dotrzymasz deadline’u.

Cursor zmienia równanie dla rozwoju mobilnego, ponieważ rozumie Twoją strukturę projektu, bibliotekę komponentów i ograniczenia platformy jednocześnie. Zamiast przełączać kontekst między Stack Overflow, dokumentacją React Native i przewodnikami specyficznymi dla platformy, pozostajesz w edytorze i pozwalasz Agent obsłużyć cross-platformową złożoność.

  • Konfigurację reguł projektu, która sprawia, że Cursor jest świadomy różnic między iOS a Android
  • Prompty do generowania ekranów, przepływów nawigacji i komponentów specyficznych dla platformy
  • Workflow do łączenia React Native z istniejącymi backend API
  • Techniki debugowania problemów specyficznych dla mobile (Metro, natywne moduły, uprawnienia)
  • Strategie obsługi ścieżek kodu specyficznych dla platformy w trybie Agent

Projekty mobilne mają więcej kontekstu niż projekty webowe. Potrzebujesz, żeby Cursor rozumiał nie tylko Twój kod TypeScript, ale także Twoją natywną konfigurację (pliki projektu Xcode, konfiguracje build Gradle), strukturę nawigacji i nadpisania specyficzne dla platformy.

Zacznij od .cursorignore, który utrzymuje skupiony indeks:

.cursorignore
ios/Pods/
android/.gradle/
android/build/
android/app/build/
node_modules/
.expo/
*.lock

Katalogi natywnych zależności są ogromne i rzadko pomocne dla kontekstu AI. Wykluczenie ich przyspiesza indeksowanie i utrzymuje Agent skupionego na Twoim kodzie aplikacji.

Następnie utwórz reguły projektu, które kodują Twoją architekturę mobilną:

.cursor/rules/mobile.md
# React Native Project
## Stack
- React Native 0.84 (New Architecture, domyślna od 0.76 i jedyny runtime od 0.82)
- TypeScript strict mode
- React Navigation 7 (native stack)
- Zustand dla zarządzania stanem
- React Query dla wywołań API
- Nativewind (Tailwind CSS dla React Native)
## Konwencje platformy
- Pliki specyficzne dla platformy używają rozszerzeń .ios.tsx / .android.tsx
- Komponenty współdzielone idą do src/components/
- Ekrany idą do src/screens/ z jednym plikiem na ekran
- Nawigacja zdefiniowana w src/navigation/
- Warstwa API w src/api/ używająca hooków React Query
## Stylowanie
- Używaj Nativewind className do stylowania, nie StyleSheet.create
- Wszystkie odstępy używają jednostki bazowej 4px (p-1 = 4px, p-2 = 8px)
- Używaj SafeAreaView na poziomie ekranu, nie komponentu
- Testuj zarówno na iPhone SE (mały), jak i iPhone 15 Pro Max (duży)
## Ważne
- To jest React Native, nie React DOM. Nigdy nie używaj elementów HTML ani web CSS.
- Zawsze obsługuj zachowania zarówno iOS, jak i Android
- Testuj unikanie klawiatury na formularzach
- Używaj Platform.select() dla wartości specyficznych dla platformy
- Obrazy muszą zawierać warianty @2x i @3x

Najczęstszym zadaniem w rozwoju mobilnym jest przekształcenie projektu w ekran. Cursor świetnie sobie z tym radzi, gdy podasz mu odpowiedni kontekst.

Kluczem do dobrego generowania ekranów jest odwoływanie się do istniejących komponentów. Gdy wskażesz Agent na Button.tsx i Input.tsx, używa Twojego faktycznego API komponentu (props, warianty, style) zamiast wymyślać własne.

Gdy ekran musi zachowywać się inaczej na iOS i Android, bądź wyraźny:

@src/screens/ProfileScreen.tsx
The profile screen needs these platform-specific adjustments:
iOS:
- Use a large title navigation header (headerLargeTitle: true)
- Date picker should use the inline iOS style
- Haptic feedback on save button press
Android:
- Use a standard material header
- Date picker should use the Android dialog style
- Use the system back gesture, not a custom back button
Use Platform.select() for simple values. For complex differences,
create ProfileScreen.ios.tsx and ProfileScreen.android.tsx if needed.

Aplikacje mobilne są konsumentami API. Cursor może wygenerować całą Twoją warstwę integracji API, jeśli podasz mu kontrakt backendu.

Nawigacja jest jedną z najbardziej podatnych na błędy części rozwoju React Native. Deep linking, struktury zakładek i stosy uwierzytelnione vs nieuwierzytelnione mają wszystkie subtelne wymagania konfiguracyjne.

Rozwój mobilny ma unikalną klasę bugów, które nie istnieją w rozwoju webowym: crashe Metro bundler, awarie linkowania natywnych modułów, problemy z uprawnieniami platformy i bugi renderowania specyficzne dla urządzenia. Tryb Ask w Cursor jest Twoim pierwszym narzędziem do tych problemów.

Tryb Ask przeprowadzi Cię przez zwykłe podejrzane: przestarzały cache Metro (npx react-native start --reset-cache), brakującą konfigurację babel dla pakietu lub niezgodność wersji między pakietami React Navigation.

Agent może przeanalizować Twój Podfile i zidentyfikować brakujące instalacje pod, nieprawidłowe fazy build lub problemy z linkowaniem frameworka specyficzne dla nowej architektury.

Bugi układu mobilnego są notorycznie trudne do debugowania, ponieważ nie możesz inspekcować elementów tak, jak w przeglądarce. Opisz wizualny problem Cursor:

Aplikacje mobilne muszą działać bez niezawodnej łączności sieciowej. To jest problem przekrojowy, w którym Cursor może pomóc wpleść go przez Twój istniejący kod:

Agent generuje kod specyficzny dla web w projekcie React Native. Dzieje się to, gdy Twoje reguły nie są aktywne lub gdy AI myli React DOM z React Native. Najczęstszy objaw: generowanie <div> zamiast <View>, lub używanie właściwości CSS jak box-shadow, które nie istnieją w React Native. Twoje reguły projektu powinny wyraźnie stwierdzać “To jest React Native. Nigdy nie używaj elementów HTML ani CSS specyficznego dla web.”

Pliki specyficzne dla platformy nie są wykrywane przez Metro. Jeśli Agent tworzy Component.ios.tsx, ale Metro wciąż ładuje bazowy Component.tsx, plik bazowy ma priorytet. Rozdzielczość platformy React Native wymaga albo plików specyficznych dla platformy bez pliku bazowego, albo pliku bazowego, który re-eksportuje ze specyficznych dla platformy.

Wygenerowany kod natywnego modułu się nie kompiluje. Agent może pisać mostki Objective-C i moduły Kotlin, ale konfiguracja build jest często błędna. Dla problemów z natywnymi modułami, dostarcz swój Podfile (iOS) lub build.gradle (Android) jako kontekst, aby Agent generował kompatybilne konfiguracje.

Typy React Navigation są nieprawidłowe. Typowanie nawigacji w React Navigation jest złożone. Jeśli Agent generuje ekrany z nieprawidłowymi parametrami route, odwołaj się wyraźnie do pliku src/navigation/types.ts. AI musi zobaczyć Twój typ RootStackParamList, aby wygenerować prawidłowe propsy nawigacji.

Style wyglądają inaczej na iOS i Android. Renderowanie cieni, wagi czcionek i padding zachowują się inaczej na różnych platformach. Gdy generujesz ekrany, powiedz Agent: “Użyj Platform.select dla cieni, ponieważ iOS używa shadowColor/shadowOffset, a Android używa elevation.”