A React Native app framework built for shipping to the stores: camera, splash screen, privacy consent, QR scanning, FaceID, gesture passwords, a component library, shared helpers, RNConsole, pull-to-refresh, a packaging CLI, WeChat sharing, a compatible JSBridge and rematch.
pnpm install
pnpm start # Metro
pnpm ios # run on the iOS simulator
pnpm android # run on Android
pnpm lint # eslint
pnpm tslint # tsc --noEmit
pnpm test # jest (pure-logic unit tests)
pnpm format # prettier + eslint --fixScreens the app passes through on launch: the native splash screen → FrontInfoCarousel
(the one-time feature tour shown after install) → HomeTab → Home.
Global cache keys — rename them to suit your product:
| Key | Meaning |
|---|---|
isPopSecret |
Whether the privacy notice has been shown. Not per-user; shown once. |
frontInfo |
Whether the feature tour has been shown. Not per-user; shown once. |
userGesturePasswordObj |
The user's gesture password. Only one is kept, so effectively not per-user. |
isFaceId |
Whether FaceID is currently permitted. Used only on the FaceID screen; noFaceId means no permission, and need not be cleared on logout. |
lastActiveTime |
When the app last went inactive, used to decide whether re-authentication is needed on resume. |
Android Studio needs the API level 31 SDK platform (compileSdkVersion is 31, minSdkVersion
is 24) and JDK 11 — see facebook/react-native#33731.
- Everything marked
TODOin the comments depends on your product. - The package name and bundle ID (see below).
- The privacy notice, and the privacy usage descriptions in the iOS/Android configuration.
- The app icon, splash screen and feature-tour images.
Doing this by hand misses things. Use react-native-rename:
pnpm add -g react-native-rename
npx react-native-rename "rnProduction" -b com.rn.productionA few places it does not reach:
android/app/src/main/AndroidManifest.xml— the package name in theapplicationnode.- iOS — rename and set the version in Xcode, then:
cd ios
pod deintegrate
pod installChanging native code needs a rebuild — a React Native reload is not enough.
- WeChat sharing is registered globally in
App.tsx; iOS Xcode setup. - Splash screen for iOS and Android: react-native-splash-screen.
- Android shadows: react-native-shadow, which depends on react-native-svg.
- WebView: getting started and reference.
If you see a
No permission handler detectederror: make sure that you have at least one permission handler set up. In some cases the Xcode cache needs to be cleared (Xcode → Product → Clean Build Folder).
See CONTRIBUTING.md.