Workstation setup
The app uses native modules (Google sign-in, SQLite, secure store, audio), so Expo Go does not work. You build and run a development client on an emulator, simulator or device. Android works on Windows or macOS; iOS needs a Mac.
Everyone
| Tool | Version | From |
|---|---|---|
| Node.js | 26 (team standard; React Native 0.88 needs ^22.13 || ^24.3 || >=26) | nvm |
| EAS CLI | 13.2.0 or newer (eas.json cli.version) | npm install -g eas-cli, then eas login with an account on the EMAW project |
| Expo CLI | bundled (npx expo) | |
.env | the four EXPO_PUBLIC_GOOGLE_* client ids (committed in the repo) |
Android (Windows or macOS)
| Tool | Notes |
|---|---|
| Android Studio | Install the SDK Platform for API 36 and 37 (compile 37, target 36, min 24), the emulator, and an AVD (Pixel, API 36) |
| Android NDK 27.1.12297006 | SDK Manager → SDK Tools → show package details |
| CMake | SDK Manager → SDK Tools |
| JDK 17 or newer | Android Studio's bundled JBR 21 is fine; set JAVA_HOME if Gradle cannot find it |
| Gradle heap | 4 GB; the repo's plugins/withGradleJvmArgs.js writes org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m on prebuild so it survives expo prebuild --clean |
android/local.properties (generated, gitignored) points at sdk.dir and cmake.dir.
choco install androidstudio
# then in Android Studio: SDK Manager → install the items above; Device Manager → create an AVD
Google sign-in on Android
Android needs no client id in the app; Google matches the package name + SHA-1 of the signing certificate. Register the debug keystore's SHA-1 for local builds and each EAS build credential's SHA-1 as separate Android OAuth clients. Get the debug SHA-1 with:
keytool -list -v -keystore %USERPROFILE%\.android\debug.keystore -alias androiddebugkey -storepass android -keypass android
Runbook: docs/GOOGLE_SIGN_IN_SETUP.md.
iOS (macOS only)
| Tool | Notes |
|---|---|
| Xcode | current, with the iOS simulator runtime |
| CocoaPods | sudo gem install cocoapods or brew install cocoapods |
| Apple Developer team membership | for device builds and submissions |
The ios/ folder is generated by npx expo prebuild (gitignored). The iOS Google client id is injected by app.config.js, which also adds the reversed-client-id URL scheme.
Optional
- A physical device with USB debugging (Android) or registered in the Apple developer portal (iOS).
- Android Studio's Logcat or
npx react-native log-android; Xcode console for iOS.
Check
node -v # 26.x
eas --version # >= 13.2
eas whoami
adb devices # emulator or device listed
Then continue with Local development.