If needed, there is a guide depending on what you want to build/launch in the Expo documentation
nodev18+yarnv3- Android Studio / Xcode
- The
Expo Goapplication on your mobile phone
To install yarn, run
npm install --global yarnRun yarn to install dependencies
- Run Expo
yarn start
- Open Expo Go or scan the QR code.
- You can also open the devtool console by typing
din the terminal
If you changed some environment variable, you might need to reset the cache:
npx expo start --reset-cache
- Run web, copy the lan IP e.g
192.168.x.y - Update your
EXPO_PUBLIC_LOCAL_URIin the .env with the related IP - Run the mobile app using this command (note the --reset-cache option, it's necessary for Metro to reload the .env file):
npx expo start --reset-cache
- Install Expo Go
- Launch ShapeShift by scanning the QR code
- Select the
localhostenvironment in the settings - The hotreloading should work as expected
- There is an expo command to run the iOS app:
yarn ios
- If you are struggling launching the simulator, you might want to use the prebuild command which is updating native folders:
yarn prebuild
- There is an expo command to run the iOS app:
yarn android
- Install EAS:
npm install -g eas-cli- Send both apps:
eas build- Update the
versionfield in theapp.jsonfile to the new version - run
npx expo prebuildto build both android and ios bundles and update the versions - and then deploy a build to eas using
eas build
- Make sure you have android studio installed, with an emulator, same for iOS with xcode
- First run
npx expo prebuild - Then
npx expo start - Hit
ioradepending on which emulator you want to run
We can launch workflows to deploy an app without relying on the CI:
npx eas-cli@latest workflow:run .eas/workflows/build-and-deploy.yml
It can be useful if we want the operation team to test a specific version before we merge on main.
EAS supports auto incrementing builds. Every time we submit a build, the patch version will be automatically incremented.
- Update the
appVersionandversionfields of theapp.jsonfile - run
npx expo prebuildto build both android and ios bundles and update the versions - and then deploy a build to eas using
eas build
If we add some native library, we will need to prevent the old applications from receiving the Over-The-Air (OTA) updates:
- The process is the same as updating to a major or minor version, but you also need to update the
runtimeVersion, which is used by Expo to check if theruntimeVersionof the update is the same as the current OTA. If it differs, the application will not accept the OTA to avoid crash issues due to missing native files.
To deliver an OTA for the current version, run:
eas update --channel production --message "[message]"We currently only use the production channel.
Updates are delivered only to devices whose installed app has the same runtimeVersion as the update. Devices with an older runtimeVersion won't receive the OTA.
See the Expo docs on runtimeVersion for details.
The more practical way is to update the runtimeVersion and push this particular build to android testing channels and flightests, but this will require a store update.
In the future, if we see that it would be more practical to have a dedicated channel, it would means that OPS team would need to keep the operations app on their phone, we could do a release channel build and update them as OTAs, then rebuild using the production channel, but as far as I know, iPhones can't install both apps at the same time...
Prepare the keypair of the DAO's wallet managing the app publish/release NFTs (We did mint them following this documentation)
- You need Android Studio installed on your computer, as long as the build tools.
- Verify that the app is configured accordingly by checking the
config.yamlfile and:
npx @solana-mobile/dapp-store-cli validate -k keypair.json -b ~/Library/Android/sdk/build-tools/35.0.0- Download the APK from our Expo dashboard (the build using the solana-dapp configuration profile), add it to the
solanaStoreMediafolder named asshapeshift-vX.X.X-signed.apk - Create the release and submit it using this link.
ShapeShift supports WalletConnect v2 for connecting to dApps. See docs/walletconnect.md for implementation details, testing, and troubleshooting.