Machine Migration Checklist
This page records the path-sensitive and machine-sensitive checks required to move Android and iOS development or release work to another machine.
Files and settings to verify
local.properties
Android Studio or Gradle usually regenerates this file per machine. The important value is:
sdk.dir=/absolute/path/to/Android/sdk
Check these locations:
apps/mobile/android/local.propertiesapps/pos-terminal/android/local.properties
Do not commit machine-specific SDK paths unless the team intentionally wants them tracked.
Shell environment
Verify these environment variables when Gradle cannot find Java or the Android SDK:
JAVA_HOMEANDROID_HOMEANDROID_SDK_ROOT
Node through nvm
Both React Native apps require Node >=22.11.0. The React Native 0.87.1
upgrade and physical-device smoke test were completed with Node 26.7.0 and
Yarn 1.22.22. On a machine that uses nvm:
nvm install 26.7.0
nvm use 26.7.0
node --version
yarn --version
Run the root yarn install --frozen-lockfile only after selecting the Node
version so native scripts and the postinstall patch run under the same runtime.
Hardcoded path assumptions
Repository scripts should prefer relative paths. The current apps/mobile/package.json APK install script is relative and should be safe to move across machines.
Still check machine-local path assumptions in:
- shell aliases
- CI/CD scripts
- Android Studio local settings
- untracked helper scripts on a developer machine
Migration steps
- Clone the repo to the new machine.
- Install Node, Yarn, Java, Android SDK, the required NDK, Xcode, CocoaPods, and CMake.
- Select a compatible Node version with nvm, then run
yarn install --frozen-lockfilefrom the monorepo root. - Open Android Studio once so SDK components and
local.propertiescan be created or refreshed. - Verify
JAVA_HOME,ANDROID_HOME, andANDROID_SDK_ROOT. - Verify release keystore location and signing properties.
- Run
yarn mobile:androidfor a dev build. - Run
yarn mobile:apkoryarn mobile:aabfor release packaging.
iOS setup checks
For mobile iOS work, start from:
cd apps/mobile/ios
pod install
Before running pod install or xcodebuild on a new machine, verify:
- Xcode has completed first launch and required components are installed.
- Simulator runtime is installed from Xcode Settings.
cmake --versionworks.- The machine can reach GitHub, because some pods are downloaded from GitHub.
yarn installwas run at the repo root so rootpostinstallpatches are applied.
If xcodebuild reports first-launch or missing plugin issues, run:
xcodebuild -runFirstLaunch
The mobile iOS Podfile contains repo-specific recovery fixes:
- It disables RNFirebase 26 SPM integration so the pods remain compatible with the project's static linkage.
- It recreates
gRPC-Core.modulemapsymlinks underPods/Headers/Private/grpcandPods/Headers/Public/grpc. - It removes
-weak_framework "FirebaseFirestoreInternal"from generated app xcconfigs to avoid link failures.
The root postinstall script runs scripts/patch-react-native-dependencies.js, which patches react-native-date-picker to use the optimized ProGuard configuration required by Android Gradle Plugin 9.
Simulator smoke test:
cd apps/mobile/ios
xcodebuild -workspace BsrPosPlus.xcworkspace -scheme BsrPosPlus -configuration Debug -sdk iphonesimulator CODE_SIGNING_ALLOWED=NO build
Known repo-specific notes
- Mobile release packaging is already wired through workspace scripts at the repo root.
- Root scripts include
terminal:android:8082,terminal:apk, andterminal:aabfor terminal development and release packaging. apps/pos-terminal/android/app/build.gradlehas additionalafterEvaluatedependencies forreact-native-workletsandreact-native-reanimated, so CMake or prefab issues on a new machine are likely to show up there first.apps/mobile/android/app/google-services.jsonandapps/pos-terminal/android/app/google-services.jsonexist in the repo, so Firebase config is not purely machine-local.apps/mobile/ios/Podfileincludes iOS pod recovery hooks for gRPC and FirebaseFirestoreInternal link issues.- Root
package.jsonhas apostinstallscript that patchesreact-native-date-pickerafter dependency install.
First checks when a build fails
JAVA_HOMEpoints to a real JDK.sdk.dirpoints to the installed Android SDK.- The required SDK platform, build-tools, and NDK are installed.
- The release keystore path exists and signing secrets are loaded.
- Any absolute path in machine-local scripts or aliases still matches the new machine.
- For iOS, Xcode first launch is complete, simulator runtime is installed, CMake exists, GitHub is reachable,
pod installhas completed, and rootyarn installhas run the postinstall patch.