Continuous Deployment in Mobile App Development
Continuous integration and continuous delivery (CI/CD) has become a natural process for web-based applications over the last several years. Companies can now deploy product updates or bug fixes to the production system multiple times a day. With the help of web deployment tools and a solid deployment infrastructure, this task just became far easier and more reliable. But does this translate to native mobile apps? Is it possible to release a new mobile app in a timely manner given the app store submission process used by certain app stores?
The answer to both is yes. In this article, I will describe the possible options for native mobile apps.
Invest in Mobile Infrastructure
Continuous integration and continuous delivery does not come free – be it for web apps or native mobile apps. Companies need to invest both time and money into their mobile app infrastructure to be able to ship a new version of the native mobile app on demand. Given the software and tooling available, this can be accomplished rather easily.
For example, open-source software like Jenkins (as your continuous integration system) and fastlane (as your build-and-sign software) can provide a lean and powerful foundation for your infrastructure. From there, you can easily set up a mobile app distribution channel via services like Testflight, AppCenter or Firebase to help you test devices during the development and testing phases.
Invest in Automation
Test automation is tightly connected to continuous integration and continuous delivery. If a build-pipeline is in place, the next logical step is to invest time and money to establish a test automation pipeline.
The automated checks will help the team receive faster feedback on code base changes on the different layers of the mobile app architecture. Furthermore, a team can quickly deploy new app versions to internal or external testers and spend less effort on manual testing.
Depending on the mobile app, teams can implement the automated checks on different layers. There might be unit tests, integration tests, API tests and end-to-end UI tests. Every team needs to find the right mix of tests to support faster development and to release new app versions with more confidence.
App Store Deployment Options
Once the infrastructure -- including test automation -- is in place, it is critical for the native mobile app development team to fully understand the differences between the Apple App Store and Google Play Store deployment options – because there are several.
The biggest difference to note is the app review process. While every app on the Apple App Store needs approval from the Apple Review Team, apps in the Google Play Store can be uploaded immediately and replace the current production app within hours.
Next to consider is how native apps can be rolled out to real users or testers. In both app stores, companies have the option to use phased releases (iOS, Android). In this process, the latest app version is released in buckets to the customers. This enables the development team to monitor the release progress for any possible problems, and stop the rollout should an issue arise. Should you prefer a different approach, the Google Play Store also offers alpha and beta release options.
Understanding the release and testing options available to you is critical to selecting the right deployment option. Given the mobile development and release tools available and the deployment options offered by each app store, you have two options:
Internal Continuous Deployment
In this case, deployment software is configured so that everyone from your team or company receives instant updates on the latest app versions once the tests have passed and a new app build is provided by the distribution software. Depending on the company size, the app will be used by hundreds or thousands of colleagues that can and should provide feedback about the current state of the app. This is doable without any involvement by Apple or Google, giving your development team full control.
External Continuous Deployment
With this option, your team can either use its own mobile distribution infrastructure or extend the ones used by Apple and Google. Choosing the former requires that you invite existing customers to your distribution system to deliver your new app build – which can be streamlined by software like Testflight, AppCenter or Firebase – or tap into a community of crowdsourced testers, where testers’ own devices can be added to the distribution list. This is the ideal method, as you can deploy to real customers and testers without use of the App Store submission process.
For an Android app, you can make use of the Google Play Store distribution infrastructure which provides both alpha and beta testing channels. This allows you to publish in the alpha channel for up to 100 internal or external customers or testers, based on their email addresses. The beta channel does not set a limit on the number of testers you can engage and lets you decide whether to make it publicly available or by invite only. Both alpha and beta channels can be configured for continuous deployment. For iOS apps, there is no such way to establish an alpha or beta release of your apps. Apple is providing a phased rollout that can be used to slowly release a new version to your customers and to track the usage and feedback from users.
Once your external deployment and customer feedback are satisfactory, the mobile development team can submit the new app version to the app stores. Then the team can decide whether they want to use a phased rollout or not.
So which deployment is right for your organization?
Continuous deployment of mobile apps doesn’t come free. There is no single solution that fits to everybody. A CI/ CD pipeline is something unique for each company and requires time and money to set up.
As a first starting point you should check if you have the required skills and technical setup in your team to introduce a continuous deployment process.
If the knowledge and the technical environment are both ready for CI/CD it’s time for you and your team to decide which of the mentioned approaches fit best to you.
Make sure to find answers to some of the following questions, to find the right deployment method:
- Do you have the required skills in your company to setup a deployment pipeline?
- Do you have an existing deployment infrastructure that you can re-use?
- Are you able to connect your internal systems with external providers?
- To whom you want to deploy alpha and beta builds?