Managing your App Distribution using Firebase
Tags: firebase, mobile, ios, android
Published: 2019-12-10 15:54:10

![Banner-FirebaseAppDistribution](https://user-images.githubusercontent.com/13706140/67194533-f052eb00-f414-11e9-8eee-fdc015a5d9b9.png)

Now before I actually start blabbering about all the praises of the newly released Firebase App Distribution, I would like to give you all some context here. 
App Distribution..., well we develop apps to be distributed right? Apart from those side projects which are looming around in some folder buried deep inside a stack or other folders, I assume rest all the apps are meant to be distributed, right? So let's talk about it.  
Distribution comes in phases, you don't just build an app and make it live to the public? At least I hope not! Your app goes through various other users before it actually reaches its intended audience. Now these can be your fellow developers from your own team, or from QA, or these can be your early beta testers, or users from your Client's team identified for UAT. 
As you can see I am talking about distributing the apps before it is actually published on Appstore or PlayStore. We call it Pre-release distributions. In this article, I would be covering the distribution of both Android and iOS apps using one single unified platform, **Firebase App Distribution**.

The focus of this article would be to highlight the available options other than firebase, the ones which we were using until now, how I used to manage the distributions in my Team, the difficulties we faced and how we can avoid all of that by switching to Firebase App Distribution. If you are still interested, which I am sure you would be, let's get started...

## Distributing Android App Vs an iOS App
Now this is a section where iOS people would wanna know how Android apps are shared and Android devs would wanna know a little something of iOS. 

To distribute Android apps, you create a key-store file right from Android studio and generate a signed APK using that key-store. 
Now you host this APK file anywhere on the web and any user with the link would be able to download and install this app. 

Reaction of iOS Developers right now... WWhhaaaaattt???? That's it? And their reaction is valid, let's go through the steps to distribute iOS apps.  
You would first need to get the UDIDs (Unique Device Identifier) of all the users on whose device the app is going to be installed. Then you add these UDIDs on your Apple Developer Portal, create a provisioning profile and generate an IPA using this Profile. 

Now unlike Android you cannot just host this IPA anywhere, well you can, but the users cannot install that IPA on their devices. First you would have to create an over the air install Manifest file where you specify the URL where the IPA is hosted. You then need to host this Manifest file on the internet and then your users would be able to install the IPA. Note that only those users would be able to install the app whose UDIDs were added in the provisioning profile you used to generate the IPA.

Well this was the standard way to just get you that link which you can share with the User's & distribute your app. Now for a project with very few pre-release distributions, you can manage like this (Even though I wouldn't recommend it). But when you constantly develop loads of apps and would need to keep a track of all them along with their distributions, you need some system in place. So let's have a look at various other **Free Platforms** which we can leverage to distribute our apps. 


## App Distribution Platforms & Their Shortcomings

**Default Options : Google Play Internal Test Platform & iOS TestFlight**

The major drawback of these default options is the setup required. Since they are the platform default options, the setup required is very close to the actual publishing of your app. Usually at this stage we want something simple like just upload your file, get the link and share. 

With respect to TestFlight, the Builds have to go through an approval process before being available to the users, thats something huge which developers would like to avoid specifically at this stage.

Apart from the above points, from a Team's perspective, Managing both your Android and iOS apps require looking over these 2 platforms which is again not so good. 

[Read more about Google Internal Play Testing](https://support.google.com/googleplay/android-developer/answer/3131213?hl=en) 

[Read more about iOS TestFlight](https://testflight.apple.com/)


**Sharing APK / IPA files using Cloud File Sharing Platforms**

These platforms can be Google Drive, Dropbox etc. You just have to upload the respective files over their, generate the share link and distribute the link across your users to download and install the app. 

Android will work perfectly fine in this scenario, but iOS IPA cannot be installed directly. The user should have access to a Macbook to install the shared IPA on their device using Xcode or iTunes. 

Apart from this, there is no User/Tester Management, nothing of the sorts to keep track of your versions and share links. That's some additional work that your team would have to do manually to keep track of all the versions distributed and their URLs. 


**Diawi**

Diawi overcomes the iOS distribution issue of requiring a Macbook to install the IPA by generating a over the air installation Manifest file by itself. You need to upload your iOS IPA or Android APK and it gives you a share link. 
Your users would be able to install both Android and iOS apps directly from the generated link.   
Looks good? There's a limit on File Upload size - 75 MB and the link is valid for a maximum of 3 Days. Now I guess it doesn't look that good. 

Again, apart from this there is no User/Tester Management. The same Cons discussed above for Cloud sharing platform apply here. 

[Read more about Diawi](https://www.diawi.com/features-services)


**AppBox**

This one's just for iOS, I have included this since it overcomes the number of days & upload size limit that we had in Diawi. It basically connects with your Dropbox account, uploads your file on your account and generates a installable URL which you can share with your Users. 

Again, there is no User/Tester Management. The same Cons discussed above for Cloud sharing platform apply here. 

[Read more about AppBox](https://getappbox.com/features/)

**How I used to manage & maintain the distribution in my team**

Since there was no unified platform that worked well for both Android and iOS, I used a couple of them and maintained a list of versions and their URLs in an OneNote Notebook which was shared amongst the team.  
- We used Dropbox to upload APKs and get the sharable link.  
- We used AppBox to generate Installable Links for iOS Apps.  

Once we get these links, we maintained a Notebook in OneNote where there was a list of all projects and URLs for the latest Android and iOS apps and the last updated date. If Anyone had to share a particular app to any user, they can access the shared notebook and find the URL and just share those downloadable URLs. 

As you can see, there was a lot of manual overhead in maintaining this Notebook plus usage of multiple platforms for generating APK and IPA files.

![A4I01](https://user-images.githubusercontent.com/13706140/67196533-a23fe680-f418-11e9-979f-23220d29f96c.png)



## **Firebase App Distribution**

We talked enough about the problems in not just distributing the apps, but managing them ones they are distributed, maintaining a list of versions, their URLs, your testers, your Clients etc. etc. The list just doesn't end.

Firebase is known for its developer-friendly tools from Analytics, Cloud Messaging to Crashlytics. Here it comes again as our Saviour with the latest Firebase App Distribution. 
Let's first see what they themselves say about this feature - 

[Watch The Intro to Firebase App Distribution here](https://youtu.be/SiPOaV-5j9o?list=PLl-K7zZEsYLmOF_07IayrTntevxtbUxDL)


> **Cross-platform**   
Manage both your iOS and Android pre-release distributions from the same place.

> **Fast distributions**   
Get early releases into your testers' hands quickly, with fast onboarding, no SDK to install, and instant app delivery.

> **Fits into your workflow**   
Distribute builds using the Firebase console, the Firebase Command Line Interface (CLI) tool, or Gradle (Android). Automate distribution by integrating the CLI into CI jobs.

> **Tester management**   
Manage your testing teams by organizing them into groups. Easily add new testers with email invitations that walk them through the onboarding process. See the status of each tester for specific versions of your app: view who has accepted a testing invitation and downloaded the app.

> **Works with Crashlytics**   
When combined with Crashlytics, get insights into the stability of your test distributions.

> **Gain valuable pre-release insights**   
App Distribution gives you a centralized dashboard to view insights on pre-release versions of your app. Testers are able to provide you with timely feedback on usability and pairing App Distribution with Crashlytics gives you real-time crash reporting for your app.

![A04I02](https://user-images.githubusercontent.com/13706140/67198508-bab20000-f41c-11e9-871c-96dddf2f3f79.png)


I would leave explaining the setup of Firebase out of this article since Firebase itself does a good job with its detailed [documentation.](https://firebase.google.com/docs/app-distribution) Instead, I would walk you through the steps in brief -  

- Sign in to Firebase using your Google Account.  
- Create your Project. 
- Add your Android and iOS Apps. 
- Add Firebase SDK to your iOS / Android App [This would help in Analytics].
- Go to App Distribution and add your Users/Testers.
- You can also group your testers based on Teams like QA / Clients etc.
- Upload your IPA / APK and publish it.
- Your Users would get a nice professional-looking email with steps to download your app. 
- Don't have emails of all your testers / Users? Don't worry, Firebase got you covered. Generate an app invite link and share it across with anyone.
- They would have to sign in via their Google account and then the download would initiate.

## Where Does Firebase App Distribution Stand Out Amongst others?
- Its **Free!!!**
- No limitation on App Upload size
- Manage both your Android and iOS apps using a single console.  
- Manage all your testers / Users from a single platform.
- Get to know how many of your users have accepted the invite and how many of them have downloaded the app.
- Maintain various versions of your App distribution.
- Access Control over the download link. Consider a scenario where you have shared a link with your testers and your Clients and now for some reason, you don't want your Clients to be able to download the app. With Firebase app distribution you can disable this access to particular Users using the Firebase Console. 
- Ability to get the stability of your App Distributions when combined with Firebase Crashlytics.

**Register Tester / Client Devices by getting their UDIDs [iOS]**  
If anyone has worked with a varied set of Clients you would have noticed that not all Client's / Users are tech savvy. To just get their UDIDs, we have to walk them through "n" number of steps. Well, Firebase App Distribution comes to the rescue here again - 
> When testers accept an invitation to test a build not signed with an Enterprise profile, they are asked for permission to share their device's UDID with you. If they agree, App Distribution collects the UDID from the device and notifies you by email of the newly-shared UDID.  
When you receive one of these emails, update your provisioning profile with the UDID and distribute a new build to your testers.


## Combine Firebase App Distribution with CI/CD
With almost everyone moving towards CI/CD you would be wondering how do we leverage Firebase App Distribution in our CI/CD workflow. Well hopefully these guides may help you get started - 

[Firebase App Distribution with Codemagic](https://blog.codemagic.io/firebase-app-distribution-with-codemagic/)

[Firebase App Distribution, Fastlane, Docker, Bitbucket Pipelines, Telegram, and all that jazz](https://proandroiddev.com/firebase-app-distribution-fastlane-docker-bitbucket-pipelines-telegram-and-all-that-jazz-2dcb770da7dd)
  
---

*This article was originally published on [InstaMobile](https://www.instamobile.io/mobile-development/firebase-app-distribution/)*
  
*If you enjoyed reading this article and learnt something, share it amongst your developer friends and colleagues and spread the love!*   
*If you have anything to discuss regarding App Distribution or any other topic related to Mobile Apps, Development, Designing, Engineering... Drop a comment below or DM me on [Twitter](https://twitter.com/nQaze) :)*  

*If you find this interesting, chances are you’ll find my twitter feed too! I keep sharing articles and stuff related to development, design and productivity on a daily basis. So hop on, follow me on [Twitter](https://twitter.com/nQaze) and enjoy the learning ride!*

*Till next Article...*