Security News
pnpm 10.0.0 Blocks Lifecycle Scripts by Default
pnpm 10 blocks lifecycle scripts by default to improve security, addressing supply chain attack risks but sparking debate over compatibility and workflow changes.
Exptool was originally created to help automate standalone expo app builds, but exp recently implemented the necessary features required to fulfill this goal.
Exptool is no longer needed to automate expo standalone builds. Take a look at this blog post if you're looking to automate your standalone builds without exptool.
Install via npm (or yarn):
$ npm install -g exptool
$ exptool --help
Usage: exptool [options] [command]
Expo toolset to help with automation
Options:
-V, --version output the version number
-h, --help output usage information
Commands:
check:status [project-dir] Checks the build status for a given project. Will exit with non-zero status code if the project is already building
wait:build [options] [project-dir] Wait for active build to complete
download:artifact [options] [project-dir] Downloads the most recent artifact for a given project
url:artifact [project-dir] Prints the latest url artifact for a given project
url:expo [options] [project-dir] Prints the expo url for a given project and [optional] release channel
android:package [project-dir] Prints the android package name for a given project (reads from app.json)
inc:build [project-dir] Increments the ios.buildNumber and android.versionCode in app.json
Note: The following example is a shortened version of a longer blog post walkthrough.
The following is a sequence of bash commands that, when executed in sequence, will automate your expo iOS and Android standalone app builds and deployments.
You can run these commands on your local machine, or ideally, translate these commands to your continuous-integration/continuous-deployment service. These commands are written to be ran in the same directory as your expo project.
This is meant to be a guide, so customize it to fit your automation needs!
fastlane deliver
command will only work on macOS.# Install dependencies.
npm install
# [Optional] Login to expo using username & password.
# You may or may not need to do this depending on your setup.
# Note the $EXPO_USERNAME and $EXPO_PASSWORD env variables.
exp login -u $EXPO_USERNAME -p $EXPO_PASSWORD --non-interactive
# Publish `production` release
exp publish --release-channel production --non-interactive
# Makes sure that there are no active standalone apps being built at this time.
# Will exit with a non-zero status code if there is an active standalone app already being built.
exptool check:status
# Start building standalone android build using `production` release channel.
exp build:android --release-channel production --non-interactive
# Wait for the build to finish, checking its status every 2 mins (timeout is 20 mins).
# Will exit 0 (success) once the build has successfully been built.
# Android builds take a little longer in my experience, hence the longer interval and timeout.
exptool wait:build --interval 120 --timeout 1200
# Download the artifact to current directory as `app.apk`
exptool download:artifact
# [Optional/Advanced] Use fastlane to upload your current standalone android build.
# Customize this to fit your needs. Take note of env variables.
# Check out https://docs.fastlane.tools for more info.
fastlane supply --package_name "$(exptool android:package)" --apk "app.apk" --json_key_data "$JSON_KEY_DATA" --skip_upload_metadata --skip_upload_images --skip_upload_screenshots
# This section is extremely similar to android steps above,
# take a look there if you have any questions.
exptool check:status
exp build:ios --release-channel production --non-interactive
exptool wait:build # using default interval & timeout
exptool download:artifact
# [Optional/Advanced] Use fastlane to upload your current standalone iOS build to iTunes Connect.
# set $FASTLANE_PASSWORD=<your-itunes-connect-password> if you want to skip password prompt.
# Take note of env variables.
# Check out https://docs.fastlane.tools for more info.
fastlane deliver --verbose --ipa "app.ipa" --username "$ITC_EMAIL" --skip_screenshots --skip_metadata
# [Optional] You may or may not need to do this depending on your setup.
exp logout
Something missing? Have a question? Create a pull request or open an issue.
FAQs
Expo cli toolset to help automate iOS and Android builds and deployments
The npm package exptool receives a total of 2 weekly downloads. As such, exptool popularity was classified as not popular.
We found that exptool demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
pnpm 10 blocks lifecycle scripts by default to improve security, addressing supply chain attack risks but sparking debate over compatibility and workflow changes.
Product
Socket now supports uv.lock files to ensure consistent, secure dependency resolution for Python projects and enhance supply chain security.
Research
Security News
Socket researchers have discovered multiple malicious npm packages targeting Solana private keys, abusing Gmail to exfiltrate the data and drain Solana wallets.