Explain the React Native project structure (`ios/`, `android/`, `App.tsx`, `package.json`, `metro.config.js`).
A bare React Native project (CLI or Expo prebuild) ships three top-level folders plus a handful of config files at the root.
Top-level layout:
App.tsx— entry component (your root React tree).
index.js— registers the root component withAppRegistry.
package.json— dependencies, scripts (start,ios,android).
metro.config.js— Metro bundler configuration (asset extensions, transformers, resolver).
babel.config.js— Babel presets/plugins (Reanimated plugin lives here).
app.json— app display name, slug, Expo / EAS config.
tsconfig.json— TypeScript compiler options.
ios/folder — native iOS project:
YourApp.xcworkspace/YourApp.xcodeproj— open this in Xcode.
YourApp/AppDelegate.swift(or.mm) — native entry point.
YourApp/Info.plist— permissions, URL schemes, bundle ID.
Podfile— CocoaPods dependencies;Pods/is generated, don't edit.
android/folder — native Android project:
app/build.gradle— module-level Gradle config (versions, ABIs, signing).
app/src/main/AndroidManifest.xml— permissions, intent filters, activities.
app/src/main/java/.../MainActivity.kt+MainApplication.kt— native entry points.
gradle.properties— feature flags (newArchEnabled=true,hermesEnabled=true).
Don't list every file — show that you know which ones you'd actually edit and which are 'compiled output.' Editable: App.tsx, package.json, app.json, metro.config.js, babel.config.js, and platform-specific config inside ios/ (Info.plist, AppDelegate) and android/ (build.gradle, AndroidManifest.xml). Avoid the trap of treating ios/Pods/ or android/build/ as 'your code' — those are generated.