Skip to main content

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​

ToolVersionFrom
Node.js26 (team standard; React Native 0.88 needs ^22.13 || ^24.3 || >=26)nvm
EAS CLI13.2.0 or newer (eas.json cli.version)npm install -g eas-cli, then eas login with an account on the EMAW project
Expo CLIbundled (npx expo)
.envthe four EXPO_PUBLIC_GOOGLE_* client ids (committed in the repo)

Android (Windows or macOS)​

ToolNotes
Android StudioInstall 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.12297006SDK Manager → SDK Tools → show package details
CMakeSDK Manager → SDK Tools
JDK 17 or newerAndroid Studio's bundled JBR 21 is fine; set JAVA_HOME if Gradle cannot find it
Gradle heap4 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)​

ToolNotes
Xcodecurrent, with the iOS simulator runtime
CocoaPodssudo gem install cocoapods or brew install cocoapods
Apple Developer team membershipfor 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.