7.2 KiB
OpenPassport App
Requirements
| Requirement | Version | Installation Guide |
|---|---|---|
| nodejs | > v18 | Install nodejs |
| ruby | >= 3.1.0 | Install ruby |
| circom | Latest | Install circom |
| snarkjs | Latest | Install snarkjs |
| watchman | Latest | Install watchman |
Android
| Requirement | Version | Installation Guide |
|---|---|---|
| Java | 17 | Install Java |
| Android Studio (Optional)* | Latest | Install Android Studio |
| Android SDK | Latest | See instructions for Android below |
| Android NDK | 26.1.10909125 | See instructions for Android below |
* To facilitate the installation of the SDK and the NDK, and to pair with development devices with a conventient QR code, you can use Android Studio.
iOS
| Requirement | Version | Installation Guide |
|---|---|---|
| Xcode | Latest | Install Xcode |
| cocoapods | Latest | Install cocoapods |
Installation
All of the commands in this guide are run from the
self/appdirectory
Install dependencies + build
yarn install-app
Android
Using Android Studio
In Android Studio, go to Tools > SDK Manager in the menu
Under SDK Platforms, install the platform with the highest API number
Under SDK Tools, check the Show Package Details checkbox, expand NDK (Side by side), select version 26.1.10909125 and install.
Using sdkmanager via CLI
Create a directory for the Android SDK. For example ~/android_sdk. Define the environment variable ANDROID_HOME to point that directory.
Install sdkmanager under ANDROID_HOME according to the instructions on https://developer.android.com/tools/sdkmanager
List available SDK platforms
$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --list | grep platforms
In the list of platforms, find the latest version and install it. (Replace NN with the latest version number)
$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --install "platforms;android-NN"
Install the NDK
$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --install "ndk;26.1.10909125"
Define the environment variable ANDROID_NDK to $ANDROID_HOME/ndk/26.1.10909125
Install Platform Tools, needed for the adb tool
$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --install platform-tools
Add $ANDROID_HOME/platform-tools to your $PATH variable
Run the app
Android
Pair and connect to the phone
Using Android Studio
In Android Studio, use Device Manager to pair with and connect to your phone.
Using adb
In your phone's developer settings, select Wireless debugging > Pair the device using a pairing code. Using the displayed information, run
adb pair PHONE_IP:PAIRING_PORT PAIRING_CODE
To connect to the device, find the IP number and port (different port than in the pairing step) directly under Wireless debugging, and run
adb connect PHONE_IP:DEVELOPMENT_PORT
Run the app
Create the file android/local.properties specifying the SDK directory, for example:
sdk.dir=/path/to/your/android/sdk
or create it with
echo sdk.dir=$ANDROID_HOME > android/local.properties
Launch the React Native server:
yarn start
Press a to open the app on Android.
To view the Android logs, use the Logcat feature in Android Studio, or use the adb logcat command-line tool.
EDIT: to test the app on android, see this issue temporarily
iOS
⚠️ To run the app on iOS, you will need a paying Apple Developer account. Free accounts can't run apps that use NFC reading.
Contact us if you need it to contribute.
Open the ios project on Xcode and add your provisioning profile in Targets > OpenPassport > Signing and Capabilities
Then, install pods:
cd ios
pod install
And run the app in Xcode.
react-native-haptic-feedback v2.3.3
To create a successful build, "Target Membership" for the AudioToolbox.framework needs to be updated.
Pods Project > Frameworks > iOS > AudioToolbox.framework
Then click on the "+" button in the "Target Membership" box and add RNReactNativeHapticFeedback
Modify the circuits
If you want to modify the circuits, you'll have to adapt a few things.
First, go to the circuit folder of the monorepo, modify the circuits and build them.
Then, upload the zipped zkeys and dat files at publicly available urls and replace the urls in app/src/utils/zkeyDownload.ts.
Adapt the input generation in common/src/utils/generateInputs.ts, and adapt and redeploy the contracts.
Android
Make sure that ANDROID_NDK is defined as per the instructions above. Then build the android native module:
./scripts/build_android_module.sh
iOS
Find your development team id and run:
export DEVELOPMENT_TEAM="<your-development-team-id>"
./scripts/build_ios_module.sh
Export a new release
Android
Export as apk
cd android
./gradlew assembleRelease
The built apk it located at android/app/build/outputs/apk/release/app-release.apk
Publish on the Play Store
As explained here, first setup android/app/my-upload-key.keystore and the private vars in ~/.gradle/gradle.properties, then run:
npx react-native build-android --mode=release
This builds android/app/build/outputs/bundle/release/app-release.aab.
Then to test the release on an android phone, delete the previous version of the app and run:
yarn android --mode release
Don't forget to bump versionCode in android/app/build.gradle.
iOS
In Xcode, go to Product>Archive then follow the flow.
Don't forget to bump the build number.
FAQ
If you get something like this:
'std::__1::system_error: open: /openpassport/app: Operation not permitted'
You might want to try this:
watchman watch-del-all
watchman shutdown-server