AppForShareGet a token

Upload from CI

Expo EAS

EAS builds on Expo servers. Ask for an internal distribution build, wait for it, download the file EAS made and upload it to AppForShare. Testers get your install page, channels and tester groups.

1. Add your token

Create an API token under Dashboard, Settings, API tokens (Pro and Team). In your CI, store EXPO_TOKEN (from expo.dev, Access tokens) and APPFORSHARE_TOKEN as secrets. The CLI reads it from the APPFORSHARE_TOKEN environment variable.

2. eas.json profile

Internal distribution makes an APK for Android and an ad hoc build for iOS.

{
  "build": {
    "preview": {
      "distribution": "internal",
      "android": { "buildType": "apk" }
    }
  }
}

3. GitHub Actions job

eas build --json --wait prints the finished build, including artifacts.buildUrl.

- uses: actions/setup-node@v4
  with:
    node-version: 22
- run: npm ci
- name: Build on EAS
  run: npx --yes eas-cli build --platform android --profile preview --non-interactive --wait --json > eas.json
  env:
    EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }}
- name: Share with testers
  run: |
    curl -sL "$(jq -r '.[0].artifacts.buildUrl' eas.json)" -o app.apk
    npx --yes appforshare upload app.apk --notes "${{ github.event.head_commit.message }}" --channel beta
  env:
    APPFORSHARE_TOKEN: ${{ secrets.APPFORSHARE_TOKEN }}

Good to know

  • For iOS use --platform ios and save the file as app.ipa. Ad hoc builds only install on registered iPhones; AppForShare can collect UDIDs from testers and register them on your Apple account.
  • Add --channel beta to keep one stable link for testers, and --fail-on blocked to stop the pipeline when the store readiness check finds a blocker (exit code 2; the build stays uploaded).
  • The command prints the install link. Add --json for url, slug, version and channel as JSON. All options are on Upload from CI.

Questions

Why not just send the EAS link?
You can. AppForShare adds a branded install page with a QR code, channels with a link that never changes, install analytics, tester groups, a store readiness check and a test plan per build.
Can I build an .aab with EAS and still share it?
Yes. Upload the .aab and AppForShare turns it into one APK for testers.

Other CI systems

GitHub Actions and FastlaneCircleCIGitLab CIBitbucket PipelinesJenkinsAzure PipelinesXcode CloudCodemagicBitrise