Skip to content
This repository was archived by the owner on Feb 23, 2021. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
96 commits
Select commit Hold shift + click to select a range
4efd03a
Initial commit of bare project
tanx Jun 21, 2019
4735357
Add required expo unimodules
tanx Jun 21, 2019
2171253
Install react-navigation, react-native-gesture-handler, react-native-svg
tanx Jun 21, 2019
739c094
Patch after react-native link react-native-gesture-handler
tanx Jun 21, 2019
a881a5f
Patch after react-native link react-native-svg
tanx Jun 21, 2019
10c27c4
Add Pods dir to gitignore
tanx Jun 17, 2019
8b2ffcf
Wire up expo unimodules in qrcode-scanner
tanx May 10, 2019
9781320
Wire up expo unimodules in index-mobile
tanx May 10, 2019
2f64bf1
Wire up expo unimodules in font-loader-mobile
tanx Jun 7, 2019
0df9d28
Wire up expo unimodules in notification-wrapper
tanx Jun 7, 2019
b63df9e
Use expo-random in auth-mobile.js to gather entropy from native api
tanx Jun 7, 2019
0c62e9c
Wire up src in mobile-bare app
tanx Jun 17, 2019
fad5f85
Install other npm dependencies
tanx Jun 21, 2019
84f6e08
Configure expo-font to load .ttf files
tanx Jun 17, 2019
268472b
Add Podfile.lock for mobile-bare project
tanx Jun 21, 2019
04bef0c
Add patches to Xcode project after pod install
tanx Jun 21, 2019
dd8b775
Add generated BasePackageList.java after calling npm run android
tanx Jun 21, 2019
6b8d282
Remove stories dir from rn-cli.config.js
tanx Jun 21, 2019
0899f4d
Fix Intl not being found on Android
tanx Jun 21, 2019
dc15207
Add lnd react native module for iOS
tanx Jun 21, 2019
f8620da
Revert "[REVERT_ME] stub native apis during development"
tanx Nov 26, 2018
41fc159
Wire up Lndmobile.framework in xcode
tanx Jun 21, 2019
906c01e
Remove unused LightningAppTest files in Xcode project
tanx Jun 21, 2019
3535d80
Disable bitcode for Lndmobile.framework
tanx Jun 21, 2019
cfdfcad
Add lnd react native module for Android
tanx Jun 21, 2019
d1d98b9
Fix status bar on Android
tanx Jun 21, 2019
0256e6c
Remove unneeded permissions from Android
tanx Jun 21, 2019
f21fbb9
Generate adaptive app icon for Android
tanx Jun 21, 2019
0e1a690
Update Android applicationId
tanx Jun 21, 2019
4b9e459
Allow FaceID on iOS
tanx Jun 21, 2019
249c8b6
Set iOS app icon
tanx Jun 21, 2019
750bfcc
Set iOS splash screen
tanx Jun 21, 2019
8dbafbf
Rename mobile app to Testnet by default
tanx Jun 21, 2019
231df18
Set target sdk version for Android to 28
tanx Jun 24, 2019
7ccb44a
Generate separate APKs for each cpu architecture
tanx Jun 24, 2019
adf2269
Fix TextInput padding on Android in new react native version
tanx Jun 24, 2019
0ec4af6
Add react-native-keychain npm dependency
tanx Jun 24, 2019
0abab1a
Patch from react-native link react-native-keychain
tanx Jun 24, 2019
a006b9b
Patch Podfile.lock after pod install of react-native-keychain
tanx Jun 24, 2019
a2b1e49
Remove unused LightningAppTests target from PodFile
tanx Jun 24, 2019
e1c7e21
Add react-native-keychain to rn-cli.config.js
tanx Jun 26, 2019
a486859
Migrate from expo-secure-store to react-native-keychain
tanx Jun 26, 2019
50239bc
Inject expo-random into auth-mobile instead of import
tanx Jun 26, 2019
3aa97a9
Add unit tests for auth._secureRandomPassword()
tanx Jun 26, 2019
c3e1408
Add unit tests for react-native-keychain integration
tanx Jun 26, 2019
58c6d58
Add unit tests for secure-store -> keychain migration
tanx Jun 26, 2019
bea8d51
Remove keychain -> secure-store migration
tanx Jun 26, 2019
6e95ec1
Add version prefix to new keychain items
tanx Jun 26, 2019
332c0e3
Set non-empty user (required on android keystore)
tanx Jun 27, 2019
9358cec
Bump Android version/build numbers
tanx Jun 27, 2019
b34bb70
Bump iOS version/build numbers
tanx Jun 27, 2019
cafeb5a
Update mobile-bare gitignore
tanx Jun 27, 2019
6dbc2bf
Wire up lightning: uri handler on iOS
tanx Jul 1, 2019
77d449d
Wire up lightning: uri handler on Android
tanx Jul 1, 2019
d41defb
Set nolisten=1 in bare build lnd.conf
tanx Jul 1, 2019
6156803
Add react-native-camera npm dependency
tanx Jul 1, 2019
4b0349d
Patch from react-native link react-native-camera
tanx Jul 1, 2019
0a35c21
Add react-native-camera to Podfile
tanx Jul 1, 2019
0c1d713
Patch Podfile.lock after pod install of react-native-camera
tanx Jul 1, 2019
6c66425
Add empty line at end of Podfile
tanx Jul 2, 2019
274224c
Add react-native-camera to rn-cli.config.js
tanx Jul 2, 2019
912abaf
Remove expo-secure-store and expo-barcode-scanner from rn-cli.config.js
tanx Jul 2, 2019
0d355f2
Remove expo-barcode-scanner and expo-secure-store from package.json
tanx Jul 2, 2019
50fa510
Remove unused expo modules from Podfile.lock
tanx Jul 2, 2019
4db7839
Integrate react-native-camera in qrcode-scanner.js
tanx Jul 2, 2019
176b1ce
Set missingDimensionStrategy for react-native-camera in build.gradle
tanx Jul 2, 2019
3ec4462
Remove unused expo modules from BasePackageList.java
tanx Jul 2, 2019
4fd6d42
Remove jest tests
tanx Jul 2, 2019
61ff304
Remove jest from package.json
tanx Jul 2, 2019
0f9a27f
Add documentation for development and releasing
tanx Jul 2, 2019
5cbe0ac
Add missing docs for mobile build
tanx Jul 4, 2019
e2479e9
Add react-native-fs npm dependency
tanx Jul 5, 2019
04acf4b
Patch after react-native link react-native-fs
tanx Jul 5, 2019
857bcf3
Patch Podfile.lock after pod install of react-native-fs
tanx Jul 5, 2019
337740e
Add react-native.fs to rn-cli.config.js
tanx Jul 8, 2019
54c8932
Add optional Help button to pin-entry component
tanx Jul 8, 2019
d916186
Add support for StopDaemon to lnd mobile
tanx Jul 8, 2019
fcb0005
Implement WIP restore-mobile.js by wiping lnd data dir
tanx Jul 8, 2019
21d6f8b
Implement auth-mobile askForHelp()
tanx Jul 8, 2019
cda6a20
Wire up auth.askForHelp()
tanx Jul 8, 2019
f08ab1d
Wire up restore-mobile.js in index-mobile.js
tanx Jul 8, 2019
79df540
Delete only wallet.db
tanx Jul 9, 2019
c73335b
Add back navigation to nav-mobile.js
tanx Jul 10, 2019
63845b8
Use back navigation in wallet.initPrevRestorePage() to go back to pin…
tanx Jul 10, 2019
9acde0b
Integrate wallet.db file delete directly in wallet action
tanx Jul 10, 2019
362e1f9
Add unit tests for auth.askForHelp()
tanx Jul 10, 2019
ca54e4f
Fix auth-mobile unit tests to use keychain instead of secure-store
tanx Jul 10, 2019
1ee415f
Add grpc-mobile unit test for StopDaemon
tanx Jul 10, 2019
0cfc6e5
Add unit tests for wallet.deleteDB()
tanx Jul 10, 2019
a17565c
Set screen orientation to portrait
tanx Jul 12, 2019
e2ac2cd
Go back to restore wallet screen for invalid seed.
tanx Jul 12, 2019
8795fd0
Set screenOrientation portrait in Android main activity
tanx Jul 12, 2019
0fcde4a
Remove expo project under /mobile
tanx Jul 15, 2019
4f32643
Move files from mobile-bare -> mobile
tanx Jul 15, 2019
af805d5
Add .iml files for Android Studio project
tanx Jul 15, 2019
ac516f3
Set targetSdkVersion back to 27 to be able to debug app in developmen…
tanx Jul 15, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions mobile/.babelrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"presets": ["module:metro-react-native-babel-preset"]
}
6 changes: 6 additions & 0 deletions mobile/.buckconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

[android]
target = Google Inc.:Google APIs:23

[maven_repositories]
central = https://repo1.maven.org/maven2
4 changes: 0 additions & 4 deletions mobile/.expo-shared/assets.json

This file was deleted.

1 change: 1 addition & 0 deletions mobile/.gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
*.pbxproj -text
65 changes: 36 additions & 29 deletions mobile/.gitignore
Original file line number Diff line number Diff line change
@@ -1,27 +1,9 @@
# See https://help.github.com/ignore-files/ for more about ignoring files.

# expo
.expo/*

# dependencies
node_modules/**/*
ios/Pods/**/*

# misc
.env.local
.env.development.local
.env.test.local
.env.production.local

npm-debug.*
yarn-debug.log*
yarn-error.log*
*.jks
*.p12
*.key
*.mobileprovision
# OSX
#
.DS_Store

# Xcode
#
build/
*.pbxuser
!default.pbxuser
Expand All @@ -38,18 +20,43 @@ DerivedData
*.hmap
*.ipa
*.xcuserstate
ios/lightning.xcworkspace/xcshareddata
project.xcworkspace
ios/Pods
ios/lightningApp.xcworkspace/xcshareddata
ios/lightning/Lndmobile.framework
ios/lightning/Supporting/EXShell.json
ios/lightning/Supporting/EXShell.plist.bak

# Android/IJ
# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.aab
*.apk
android/Lndmobile/Lndmobile.aar
android/app/src/main/assets/shell-app.bundle
android/app/src/main/assets/shell-app-manifest.json
android/app/prodKernel/
android/app/release/

# node.js
#
node_modules/
npm-debug.log
yarn-error.log

# BUCK
buck-out/
\.buckd/
*.keystore

# fastlane
#
# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
# screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/

*/fastlane/report.xml
*/fastlane/Preview.html
*/fastlane/screenshots

# Bundle artifact
*.jsbundle
2 changes: 1 addition & 1 deletion mobile/.watchmanconfig
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{}
{}
11 changes: 6 additions & 5 deletions mobile/App.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import 'node-libs-react-native/globals';
import { Platform } from 'react-native';

// Polyfill ECMAScript Internationalization API on Android
// See: https://github.com/facebook/react-native/issues/19410
if (Platform.OS === 'android') {
require('intl');
require('intl/locale-data/jsonp/en-US');
}
import 'intl';
import 'intl/locale-data/jsonp/en-US';

import { StyleSheet } from 'react-native';
import * as Font from 'expo-font';
StyleSheet.setStyleAttributePreprocessor('fontFamily', Font.processFontFamily);

import App from '../src/view/main-mobile';

Expand Down
239 changes: 52 additions & 187 deletions mobile/README.md
Original file line number Diff line number Diff line change
@@ -1,218 +1,83 @@
This project was bootstrapped with [Create React Native App](https://github.com/react-community/create-react-native-app).
Lightning mobile app
==========

Below you'll find information about performing common tasks. The most recent version of this guide is available [here](https://github.com/react-community/create-react-native-app/blob/master/react-native-scripts/template/README.md).
## Getting started

## Table of Contents
This project was bootstrapped using [Expo CLI as a bare project](https://blog.expo.io/you-can-now-use-expo-apis-in-any-react-native-app-7c3a93041331). You should only need `react-native-cli` for development not `expo-cli`. See the [React Native CLI Getting Started Guide](https://facebook.github.io/react-native/docs/getting-started.html)

* [Updating to New Releases](#updating-to-new-releases)
* [Available Scripts](#available-scripts)
* [npm start](#npm-start)
* [npm test](#npm-test)
* [npm run ios](#npm-run-ios)
* [npm run android](#npm-run-android)
* [npm run eject](#npm-run-eject)
* [Writing and Running Tests](#writing-and-running-tests)
* [Environment Variables](#environment-variables)
* [Configuring Packager IP Address](#configuring-packager-ip-address)
* [Customizing App Display Name and Icon](#customizing-app-display-name-and-icon)
* [Sharing and Deployment](#sharing-and-deployment)
* [Publishing to Expo's React Native Community](#publishing-to-expos-react-native-community)
* [Building an Expo "standalone" app](#building-an-expo-standalone-app)
* [Ejecting from Create React Native App](#ejecting-from-create-react-native-app)
* [Build Dependencies (Xcode & Android Studio)](#build-dependencies-xcode-android-studio)
* [Should I Use ExpoKit?](#should-i-use-expokit)
* [Troubleshooting](#troubleshooting)
* [Networking](#networking)
* [iOS Simulator won't open](#ios-simulator-wont-open)
* [QR Code does not scan](#qr-code-does-not-scan)
## Building lnd

## Updating to New Releases
### Build dependencies

You should only need to update the global installation of `create-react-native-app` very rarely, ideally never.
* node 10 LTS (brew install node@10)
* react-native-cli (npm install -g react-native-cli)
* watchman (brew install watchman)
* Xcode
* cocoapods 1.7.2 (brew install cocoapods)
* go 1.11.6 (brew install go@1.11)
* [gomobile](https://github.com/golang/go/wiki/Mobile)
* [lnd mobile build tools](https://github.com/lightninglabs/lnd/tree/mobile-autopilot-100)
* [Java](https://www.oracle.com/technetwork/java/javase/downloads/index.html)
* [Android Studio](https://developer.android.com/studio)
* [Android NDK](https://developer.android.com/ndk/guides)

Updating the `react-native-scripts` dependency of your app should be as simple as bumping the version number in `package.json` and reinstalling your project's dependencies.
### Building

Upgrading to a new version of React Native requires updating the `react-native`, `react`, and `expo` package versions, and setting the correct `sdkVersion` in `app.json`. See the [versioning guide](https://github.com/react-community/create-react-native-app/blob/master/VERSIONS.md) for up-to-date information about package version compatibility.

## Available Scripts

If Yarn was installed when the project was initialized, then dependencies will have been installed via Yarn, and you should probably use it to run these commands as well. Unlike dependency installation, command running syntax is identical for Yarn and NPM at the time of this writing.

### `npm start`

Runs your app in development mode.

Open it in the [Expo app](https://expo.io) on your phone to view it. It will reload if you save edits to your files, and you will see build errors and logs in the terminal.

Sometimes you may need to reset or clear the React Native packager's cache. To do so, you can pass the `--reset-cache` flag to the start script:

```
npm start --reset-cache
# or
yarn start --reset-cache
```

#### `npm test`

Runs the [jest](https://github.com/facebook/jest) test runner on your tests.

#### `npm run ios`

Like `npm start`, but also attempts to open your app in the iOS Simulator if you're on a Mac and have it installed.

#### `npm run android`

Like `npm start`, but also attempts to open your app on a connected Android device or emulator. Requires an installation of Android build tools (see [React Native docs](https://facebook.github.io/react-native/docs/getting-started.html) for detailed setup). We also recommend installing Genymotion as your Android emulator. Once you've finished setting up the native build environment, there are two options for making the right copy of `adb` available to Create React Native App:

##### Using Android Studio's `adb`

1. Make sure that you can run adb from your terminal.
2. Open Genymotion and navigate to `Settings -> ADB`. Select “Use custom Android SDK tools” and update with your [Android SDK directory](https://stackoverflow.com/questions/25176594/android-sdk-location).

##### Using Genymotion's `adb`

1. Find Genymotion’s copy of adb. On macOS for example, this is normally `/Applications/Genymotion.app/Contents/MacOS/tools/`.
2. Add the Genymotion tools directory to your path (instructions for [Mac](http://osxdaily.com/2014/08/14/add-new-path-to-path-command-line/), [Linux](http://www.computerhope.com/issues/ch001647.htm), and [Windows](https://www.howtogeek.com/118594/how-to-edit-your-system-path-for-easy-command-line-access/)).
3. Make sure that you can run adb from your terminal.

#### `npm run eject`

This will start the process of "ejecting" from Create React Native App's build scripts. You'll be asked a couple of questions about how you'd like to build your project.

**Warning:** Running eject is a permanent action (aside from whatever version control system you use). An ejected app will require you to have an [Xcode and/or Android Studio environment](https://facebook.github.io/react-native/docs/getting-started.html) set up.

## Customizing App Display Name and Icon

You can edit `app.json` to include [configuration keys](https://docs.expo.io/versions/latest/guides/configuration.html) under the `expo` key.

To change your app's display name, set the `expo.name` key in `app.json` to an appropriate string.

To set an app icon, set the `expo.icon` key in `app.json` to be either a local path or a URL. It's recommended that you use a 512x512 png file with transparency.

## Writing and Running Tests

This project is set up to use [jest](https://facebook.github.io/jest/) for tests. You can configure whatever testing strategy you like, but jest works out of the box. Create test files in directories called `__tests__` or with the `.test` extension to have the files loaded by jest. See the [the template project](https://github.com/react-community/create-react-native-app/blob/master/react-native-scripts/template/App.test.js) for an example test. The [jest documentation](https://facebook.github.io/jest/docs/en/getting-started.html) is also a wonderful resource, as is the [React Native testing tutorial](https://facebook.github.io/jest/docs/en/tutorial-react-native.html).

## Environment Variables

You can configure some of Create React Native App's behavior using environment variables.

### Configuring Packager IP Address

When starting your project, you'll see something like this for your project URL:

```
exp://192.168.0.2:19000
```

The "manifest" at that URL tells the Expo app how to retrieve and load your app's JavaScript bundle, so even if you load it in the app via a URL like `exp://localhost:19000`, the Expo client app will still try to retrieve your app at the IP address that the start script provides.

In some cases, this is less than ideal. This might be the case if you need to run your project inside of a virtual machine and you have to access the packager via a different IP address than the one which prints by default. In order to override the IP address or hostname that is detected by Create React Native App, you can specify your own hostname via the `REACT_NATIVE_PACKAGER_HOSTNAME` environment variable:

Mac and Linux:

```
REACT_NATIVE_PACKAGER_HOSTNAME='my-custom-ip-address-or-hostname' npm start
```

Windows:
```
set REACT_NATIVE_PACKAGER_HOSTNAME='my-custom-ip-address-or-hostname'
npm start
go get golang.org/x/mobile/cmd/gomobile
cd lnd
make clean
gomobile init
make mobile
```

The above example would cause the development server to listen on `exp://my-custom-ip-address-or-hostname:19000`.
Next copy the lnd mobile binaries to this project

## Sharing and Deployment
1. `lnd/mobile/build/ios/Lndmobile.framework` -> `ios/lightning`
2. `lnd/mobile/build/android/Lndmobile.aar` -> `android/Lndmobile`

Create React Native App does a lot of work to make app setup and development simple and straightforward, but it's very difficult to do the same for deploying to Apple's App Store or Google's Play Store without relying on a hosted service.
## Running the app

### Publishing to Expo's React Native Community

Expo provides free hosting for the JS-only apps created by CRNA, allowing you to share your app through the Expo client app. This requires registration for an Expo account.

Install the `exp` command-line tool, and run the publish command:
### Install the dependencies

```
$ npm i -g exp
$ exp publish
npm install (first in git `/` and then in `/mobile`)
cd ios
pod install
cd ..
```

### Building an Expo "standalone" app

You can also use a service like [Expo's standalone builds](https://docs.expo.io/versions/latest/guides/building-standalone-apps.html) if you want to get an IPA/APK for distribution without having to build the native code yourself.

### Ejecting from Create React Native App

If you want to build and deploy your app yourself, you'll need to eject from CRNA and use Xcode and Android Studio.

This is usually as simple as running `npm run eject` in your project, which will walk you through the process. Make sure to install `react-native-cli` and follow the [native code getting started guide for React Native](https://facebook.github.io/react-native/docs/getting-started.html).

#### Should I Use ExpoKit?

If you have made use of Expo APIs while working on your project, then those API calls will stop working if you eject to a regular React Native project. If you want to continue using those APIs, you can eject to "React Native + ExpoKit" which will still allow you to build your own native code and continue using the Expo APIs. See the [ejecting guide](https://github.com/react-community/create-react-native-app/blob/master/EJECTING.md) for more details about this option.

## Troubleshooting

### Networking

If you're unable to load your app on your phone due to a network timeout or a refused connection, a good first step is to verify that your phone and computer are on the same network and that they can reach each other. Create React Native App needs access to ports 19000 and 19001 so ensure that your network and firewall settings allow access from your device to your computer on both of these ports.

Try opening a web browser on your phone and opening the URL that the packager script prints, replacing `exp://` with `http://`. So, for example, if underneath the QR code in your terminal you see:
### Start the app in the simulator

```
exp://192.168.0.1:19000
npm run ios
npm run android
```

Try opening Safari or Chrome on your phone and loading
### Debugging the app in Xcode or Android Studio

```
http://192.168.0.1:19000
```

and
Start the metro development server

```
http://192.168.0.1:19001
npm start
```

If this works, but you're still unable to load your app by scanning the QR code, please open an issue on the [Create React Native App repository](https://github.com/react-community/create-react-native-app) with details about these steps and any other error messages you may have received.

If you're not able to load the `http` URL in your phone's web browser, try using the tethering/mobile hotspot feature on your phone (beware of data usage, though), connecting your computer to that WiFi network, and restarting the packager. If you are using a VPN you may need to disable it.

### iOS Simulator won't open

If you're on a Mac, there are a few errors that users sometimes see when attempting to `npm run ios`:

* "non-zero exit code: 107"
* "You may need to install Xcode" but it is already installed
* and others

There are a few steps you may want to take to troubleshoot these kinds of errors:

1. Make sure Xcode is installed and open it to accept the license agreement if it prompts you. You can install it from the Mac App Store.
2. Open Xcode's Preferences, the Locations tab, and make sure that the `Command Line Tools` menu option is set to something. Sometimes when the CLI tools are first installed by Homebrew this option is left blank, which can prevent Apple utilities from finding the simulator. Make sure to re-run `npm/yarn run ios` after doing so.
3. If that doesn't work, open the Simulator, and under the app menu select `Reset Contents and Settings...`. After that has finished, quit the Simulator, and re-run `npm/yarn run ios`.

### QR Code does not scan

If you're not able to scan the QR code, make sure your phone's camera is focusing correctly, and also make sure that the contrast on the two colors in your terminal is high enough. For example, WebStorm's default themes may [not have enough contrast](https://github.com/react-community/create-react-native-app/issues/49) for terminal QR codes to be scannable with the system barcode scanners that the Expo app uses.

If this causes problems for you, you may want to try changing your terminal's color theme to have more contrast, or running Create React Native App from a different terminal. You can also manually enter the URL printed by the packager script in the Expo app's search bar to load it manually.
Then just open `ios/LightningApp.xcworkspace` from the finder on your mac. Or open the project in the `android` directory in Android Studio.

# Building lnd
## Releasing

## Build dependencies
### iOS

* node 10 LTS
* expo-cli (npm install -g expo-cli)
* cocoapods 1.5.3
* go 1.11.6
1. Open `ios/LightningApp.xcworkspace` from the finder on your mac
2. From xcode set the active scheme to `Release`
3. Set the build target as `Generic iOS device`
4. Bump the version and build number in the project
5. Build the Archive in the menu under `Product -> Archive`

https://github.com/golang/go/wiki/Mobile
https://github.com/lightninglabs/lnd/tree/mobile-build-tool
`make mobile` is the golden command
### Android

ideally this should be the only setup you would need:
`go get golang.org/x/mobile/cmd/gomobile`
`gomobile init # it might take a few minutes`
1. Open Android Studio
2. open the project in the `android` directory
3. Bump the `versionName` and `versionCode` under `app/build.gradle`
4. From the menu `Build -> Clean Project`
5. From the menu `Build -> Generate Signed Bundle / APK`
Loading