Continuous Integration (CI) is a development practice where incremental code changes from multiple contributors are regularly reconciled and merged back into a shared codebase. After each merge is performed, the application is built and tested to ensure ongoing integrity of the codebase.
By integrating and testing small changes as frequently as possible, teams can increase visibility into all of the work happening in parallel, which makes it easier to spot and fix bugs early on and ultimately reduces overall development time and cost. This kind of stability improvement and efficiency gain is especially significant for mobile app teams, because binaries take time to ship and get approved and deployment cannot be continuous.
Successful companies need to iterate quickly and their mobile apps must continuously adapt to the needs of — and feedback from — their users. So, it’s no wonder that CI has become a critical part of the modern mobile development workflow.
In recent years, automated CI tools have radically transformed how teams of all sizes perform CI. These tools have made it possible to, for example, automatically run tests against new commits, assign action items to appropriate actors, or cherry-pick specific commits for integration, reducing the need for human intervention and speeding up the overall process.
Often, CI is combined with Continuous Delivery in a CI/CD pipeline. CD in a mobile app context involves automatically generating and distributing builds either for internal testing, or for external distribution. Automating the creation and distribution of builds allows for consistent testing until a suitable Release Candidate build emerges that should make it through to the app’s live user base.
There are a number of reasons why CI’s general benefits are particularly attractive to mobile development teams:
In short, a well-implemented CI solution reduces risk, and enables teams to produce better and more stable releases at shorter intervals. Developers work more efficiently and confidently with the safety net that CI provides, and PMs and product owners know their teams can respond more quickly when fixes need to get out the door, or deadlines need to be met.
Today, the term ‘CI’ most commonly refers to the use of automated tools to advance the goal of continuous integration. In practice, this means configuring an automated CI pipeline to repeatedly run building, testing, and deployment tasks that would normally be executed manually by the team. For mobile teams, a basic CI pipeline might contain the following steps:
Often, a basic pipeline like the one described above can be set up to run whenever code is committed or merged into a main branch, guaranteeing that any and all changes being made are verified for regressions (via the unit testing step) and then distributed for testing or release.
These common pipeline tasks only scratch the surface of what’s possible with today’s modern CI tools. It’s now possible to automate many more of the logistically complicated and oft-repeated tasks that often bog developers down such as:
And the range of what’s possible using modern CI tools will only continue to grow as CI providers expand their capabilities, and as developers of open source and third party software continue to build automated solutions for common development tasks.
Once you have a CI system in place, it can supercharge your development cycle. Still, adopting and integrating CI into your workflow can pose certain challenges. Avoiding these CI speed bumps can help make the transition less disruptive and the end result more successful:
When it comes to choosing a third party CI provider, you’ll find there are a wide variety of options out there catering to different types of software development, teams, and particular contexts. Some can be quite feature-rich, offering functionality like early bug detection, conflict resolution, out-of-the-box automation and risk management, often with integrated tools that enhance collaboration and communication.
The ideal fit for a given team and app can vary widely depending on various factors: the need for scalability, current workload and number of parallel projects, existing infrastructure and tech ecosystem, and cost considerations. Evaluation of cost should extend beyond the CI’s subscription or licensing cost alone, and factor in time and labor required for onboarding and maintenance and purchase of any prerequisite software or hardware.
There are a few characteristics of any particular CI provider that should always be considered:
Clearly, there’s no “one-size-fits-all” choice here. Below, we compare five of the top CI platforms for mobile development, but remember that choosing the ideal provider is a highly individual process!
Bitrise is a Platform-as-a-service (PaaS) CI provider (with Public Cloud and Private Cloud options) that actually specializes in mobile app development for iOS and Android. It features a UI-based workflow builder and an impressive list of integrations with productivity tools, as well as robust support for popular build frameworks such as React Native, Xamarin, Flutter and Ionic/Cordova.
A free “Hobby tier” suited to very small projects is available; Public Cloud plans start at $40/month. You unlock higher concurrency, unlimited team members, and other features with higher paid tiers.
CircleCI is another cloud-based PaaS provider, with fully or partially self-hosted options also available. It can be configured to support several different languages and frameworks, including both Android and iOS, and to build in Windows, Linux, MacOS, and Docker environments. It’s used by some of the world’s leading tech giants, such as Facebook, Intuit, Spotify and Shopify.
CircleCI has a usage-based pricing model with a free bottom tier (that doesn’t include iOS). Higher-tier packages start at $15/month (for 3 users) and unlock additional usage credits as well as improved performance. Open-source developers are allotted a substantial amount of free usage credits per month.
GitLab is a popular open-source end-to-end software development platform. Although it shares a lot of DNA with GitHub, GitLab’s robust built-in CI capabilities and role-based access controls make life easier for DevOps teams, and for QA in particular. Huge names like Electronic Arts, Sony, and Uber use GitLab CI for their projects.
Gitlab’s paid, usage-based plans start at $4 per user/month, with a free tier that accommodates unlimited users but has a low usage cap.
Jenkins is an open-source CI server, founded as “Hudson” in 2006. Thanks to its modular and extensible architecture, developers have contributed hundreds of plugins that solve just about any need you can imagine, including a ton of integrations with popular productivity tools like Slack, Jira, AWS CodeDeploy, and more. Because of this large and active community of contributors, and its strong core feature set and configurability, Jenkins is still one of the most widely used CI tools out there. This despite the fact that it’s a bit less polished and is trickier to set up and maintain than other options.
Jenkins is completely free to use. It can run on Windows, macOS, and Unix-based systems, and it supports both Android and iOS app development. Some notable Jenkins users include Facebook, LinkedIn, and eBay.
While Visual Studio has a 20+ year history as a giant in the IDE space, App Center was launched in 2017 as an all-in-one solution for mobile developers. It supports the building, testing, distributing, and monitoring of apps for iOS, Android, Windows, React Native, Unity, and more. It’s a particularly popular choice for Xamarin development (not surprising, given that the framework is Microsoft-owned).
App Center offers a free plan that includes limited build time and only comes with a 30-day automated testing trial. However, you can use all other premium features. Pricing starts at $40/month.
You can also take advantage of Visual Studios’ rich collaboration and project management (Team Services) tools. Using frameworks like Appium, Espresso, and XCUITest, you can run tests on nearly any combination of device and configuration, in the cloud.
Continuous integration can pave the way for more streamlined app lifecycles by encouraging and enabling your team to develop, test, and integrate bite-sized chunks of code on a regular basis. As a practice, it’s key to a development and product culture that encourages collaboration and transparency. And, with a bit of tooling and automation, CI can become an invaluable part of a robust workflow that is vigilant about detecting and fixing issues at an early stage when it’s still cost-effective to do so.
Despite its potential, your team should approach the task of adding CI to an existing toolchain with proper planning and preparation. But once it’s integrated, with the necessary support and buy-in, you’ll wonder how you lived without it.