Docs
Move from Firebase App Distribution
Most of a move is two lists and one pipeline step: the UDIDs of your iPhone testers, the tester list itself, and the command that sends each build. This guide covers those, then the parts around them: invite links, in-app feedback, Crashlytics and the App Testing agent. Your testers stop needing a Google account on the way.
Step 1, Every plan
Upload one build of each app
Sign up and upload the newest .ipa and the newest .apk or .aab of the app. Each app becomes a project with its own install link and QR code. Make a token under Dashboard, Settings, API tokens for the CI steps below (Pro and Team).
Step 2, Every plan with an account
Bring your iPhone UDIDs
In the Firebase console open App Distribution, the Testers & Groups tab, select All testers and press Export Apple UDIDs. On AppForShare open Devices, press Import and pick that file. Up to 1,000 devices go in per import, and each line that is not an iPhone or iPad UDID is listed with the reason.
Your testers do not have to send their UDIDs again. To register them on Apple from AppForShare, connect App Store Connect (Pro and Team). New testers send their iPhone through the project's onboarding link, and on Team, Hands free registers it, remakes the ad hoc profile and starts the build for you.
iOS device registrationnpx appforshare devices import firebase-udids.txt npx appforshare devices export --out devices.txt # Apple's format, for register_devicesStep 3, Team
Bring your testers and groups
Put the testers you see in the Firebase console into a spreadsheet with an email column, a name column (or first and last name) and a groups column, with a semicolon between several groups, and save it as CSV. Import it on the Testers page. Groups that do not exist yet are made. Invites are off by default, so you can check the list before anyone gets an email; with invites on, up to 200 new testers are invited per import.
Then give each group its projects, or make the projects private so only invited testers can open them.
Tester groups and statusemail,first name,last name,groups [email protected],Sara,Khan,Client QA [email protected],Omar,Ali,Internal;Client QA npx appforshare testers import testers.csv --notifyStep 4, Pro and Team (groups and testers: Team)
Swap the Firebase CLI step
appforshare upload takes the same ideas: release notes, groups and testers. When the build is ready, the groups get the project and everyone named gets an email with the install link. Add --channel beta for one link that always opens the newest build, and --fail-on blocked to stop the pipeline when the store readiness check finds a blocker. Tester options need CLI 1.9.0.
All CLI commands# Before firebase appdistribution:distribute app-release.apk \ --app 1:1234567890:android:abc123 --groups "qa-team" --release-notes "Fixes the login crash" # After export APPFORSHARE_TOKEN=afs_your_token npx appforshare upload app-release.apk --groups "qa-team" --notes "Fixes the login crash" --channel betaStep 5, Pro and Team
Swap the fastlane action
Replace firebase_app_distribution with appforshare. Without file it takes the build from gym or gradle. appforshare also takes groups: and testers: (plugin 1.2.0 and later), and appforshare_udids writes the devices file for register_devices the way get_udids does in the Firebase plugin.
# Before firebase_app_distribution(app: "1:1234567890:ios:abc123", groups: "qa-team", release_notes: "Fixes the login crash") # After (fastlane add_plugin appforshare, APPFORSHARE_TOKEN set) appforshare(release_notes: "Fixes the login crash", groups: "qa-team", channel: "beta")Step 6, Pro and Team
Swap the Gradle plugin
The AppForShare Gradle plugin gives every variant appforshareUpload<Variant> for the APK and appforshareUpload<Variant>Bundle for the .aab. An .aab works for apps that were never published on Google Play: it becomes one universal APK, with no Play link. Available soon on the Gradle Plugin Portal; until then, run the CLI after assembleRelease.
// Before: id("com.google.firebase.appdistribution") and ./gradlew appDistributionUploadRelease // After plugins { id("com.android.application") id("io.appforshare.upload") version "1.0.0" } appforshare { releaseNotes = "Fixes the login crash" groups = listOf("qa-team") } // APPFORSHARE_TOKEN=afs_... ./gradlew appforshareUploadReleaseStep 7, Team
Replace invite links with join links
A join link does what a Firebase invite link does, without the Google sign in: testers enter an email, confirm it from their inbox and land in the project or a tester group. Limit it to your email domain, cap the joins or pause it, from the project's Testing tab.
Join linksStep 8, Every plan with an account
Replace the in-app feedback SDK
Firebase's in-app feedback is an Android SDK in beta with a Google sign in. Remove it and open the project's in-app feedback link from the same debug menu or shake handler instead, on iOS and Android. The tester gets the feedback form for the build they run, with the screen filled in and screenshots. The new build alerts SDK has an equivalent too: the update check, a few lines that read the channel's newest build (Pro and Team).
In-app feedback linkhttps://appforshare.io/feedback/<token>?platform=android&version=2.5&build=121&screen=CheckoutStep 9, Pro and Team for the link
Keep Crashlytics
Crashlytics stays in your app and keeps working. Paste its address as the project's crash dashboard link on the Testing tab, with {version} or {build} where the version goes. Builds, feedback reports, the owner email and Linear or Jira issues then link to the crashes of that build. AppForShare does not collect crash data itself.
Step 10, Pro and Team
Keep the App Testing agent, if you use it
AppForShare writes a test plan for each build from what changed in it. Download it as App Testing agent test cases and run them with firebase apptesting:execute --test-dir, as you do today. The agent runs Android builds only and is in preview.
AI test plannpx appforshare test-plan 12345 --format firebase --out tests/app-testing.yaml firebase apptesting:execute --app=<your Firebase Android app id> --test-dir=tests app-release.apk
Questions
- Can I run both while I switch?
- Yes. Upload each build to both from CI for a while; nothing on AppForShare depends on Firebase, and Crashlytics keeps working in the app.
- Do my testers need to do anything?
- Android testers open the new install link or scan the QR code. iPhone testers whose UDIDs you imported install the next build made with a profile that includes them. Nobody needs a Google or AppForShare account.
- Is there a Firebase integration that syncs testers?
- No. The move uses files you export from Firebase and import here, once. After that the lists live in AppForShare.
- Which plan do I need?
- UDID import, the in-app feedback link and install links work on every plan with an account. CI uploads, channels, the crash link and test plan export are on Pro and Team. Tester import, groups from CI and join links are on Team.
Weighing the two first? Read AppForShare vs Firebase App Distribution. For raw HTTP calls, see the CI API reference.