--- layout: default title: Mobile App Development parent: Development grand_parent: Miscellaneous nav_order: 9 --- # React Native Expo ## MacOS: Install watchman ``` brew install watchman ``` Run iOS on Simulator: ``` npx expo run:ios ``` Install OpenJDK for Android dev: ``` brew install openjdk@17 # Add to path sudo ln -sfn /opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-17.jdk # Test if Java works on CLI java --version ``` Make sure NDK is installed: 1. Open Android Studio. 2. Go to: `Preferences > Appearance & Behavior > System Settings > Android SDK > SDK Tools tab`. 3. Check NDK (Side by side). 4. Click Apply or OK to install it. If getting `node` errors in Android studio, close and re-open Android Studio from CLI via: ``` open -a "Android Studio" ``` ## Unit tests TODO: improve documentation further. The iOS project contains unit tests that test the `VaultStore` native Swift implementation. The `VaultStore` logic is responsible for handling vault encryption/decryption, contains the SQLite client and acts as a proxy for all local queries etc. In order to test this query logic behavior the tests contain a static encrypted client vault (SQLite database) that is provided to the tests. This static encrypted database can be (re)generated by running the `src/Tests/AliasVault.E2ETests/Tests/Extensions/TestVaultGeneratorTests.cs` in the .NET solution. This E2E test generates a deterministic vault and saves it to a local temporary file. This file can then be used as the input for these unittests.