Docs
Upload builds from CI
Every build your pipeline makes can land on AppForShare with release notes, and your testers get the link right away. The store readiness result comes back too, so a build that would be rejected can stop the pipeline. Uploads from CI are part of Pro and Team. Create a token under Dashboard, Settings.
Any CI or your terminal
Needs Node 18 or newer. The command prints the install link.
export APPFORSHARE_TOKEN=afs_your_token
npx appforshare upload build/MyApp.ipa --notes "Fixes the login crash"GitHub Actions
Store the token as a repository secret named APPFORSHARE_TOKEN. The step outputs url, slug and readiness.
- name: Share build
id: afs
uses: appforshare/appforshare-action@v1
with:
file: app/build/outputs/apk/release/app-release.apk
token: ${{ secrets.APPFORSHARE_TOKEN }}
release-notes: ${{ github.event.head_commit.message }}
fail-on: blocked
- run: echo "Install link: ${{ steps.afs.outputs.url }}"GitLab CI
Add APPFORSHARE_TOKEN as a masked CI/CD variable.
share:
image: node:22
script:
- npx --yes appforshare upload build/MyApp.ipa --json > appforshare.json
artifacts:
paths: [appforshare.json]Fastlane
Add the plugin once with fastlane add_plugin appforshare. Without file it takes the build from gym or gradle.
lane :beta do
gym(export_method: "ad-hoc")
appforshare(release_notes: "Fixes the login crash", fail_on: "blocked")
puts lane_context[SharedValues::APPFORSHARE_URL]
endBeta and Live channels
A channel has one link and QR code that never change and always open the newest build put into it. The channel is created the first time you use its name. The GitHub Action takes channel and outputs channel-url; Fastlane takes channel: and sets APPFORSHARE_CHANNEL_URL. If your iPhone testers use TestFlight, give the channel its public link: iPhones then go to TestFlight and Android phones get the APK (off removes it). Pro and Team.
npx appforshare upload app-release.apk --channel beta
npx appforshare latest --channel beta
npx appforshare promote 12345 --channel live
npx appforshare testflight https://testflight.apple.com/join/AbCd1234 --channel beta --app com.example.appMore commands
The same token reads and tidies the builds of its account. link pauses an install link, stops it after a date (end of that day, UTC) or caps its installs, Pro and Team; off removes a date or limit. Add --json to any command for machine output.
npx appforshare link 12345 --pause
npx appforshare link 12345 --resume --stop 2026-12-31 --max-installs 50
npx appforshare builds --platform ios --limit 5
npx appforshare latest --app com.example.app
npx appforshare info Stw0Ae
npx appforshare delete Stw0Ae --yes
npx appforshare feedback Stw0Ae --status open
npx appforshare whoamiOptions
--notesor--notes-file: release notes for testers--channel beta: put the build into a channel and print its stable link too--json: prints url, slug, name, version, expiry and channel as JSON--fail-on blockedor--fail-on review: exit with code 2 when the store readiness check finds that level. The build stays uploaded and its link works.--no-wait: return as soon as the upload is queued- Big builds go up in 32 MB chunks and resume after a dropped connection.
- Files:
.ipa,.apkor.aab. An .aab is turned into one APK for testers, signed with your account's test key or your own upload key (how it works).