What is Mobile DevOps in iOS and Android App Development?
And why repurposing your DevOps pipeline isn't enough.
Most software development teams are familiar with the concept of DevOps; the intersection of development and operations that empowers teams to ship high-quality software faster. DevOps also focuses on improving collaboration between product managers, developers, operations, and even security stakeholders. For mobile development, teams often re-purpose their existing DevOps pipelines for mobile or trudge through the manual processes of building and shipping a mobile app. Long-term, both of these solutions cause slowdowns in the mobile app release process and cause significant delays in shipping new features to users.
What is mobile DevOps? Mobile DevOps is a form of DevOps specifically tailored to the needs of mobile application development, including native builds, integrations, and methods of publishing and updating applications. Placing a focus on mobile DevOps means organizations can ship more frequently, getting features in front of customers faster and easier than ever.
In this article on mobile DevOps, we’ll discuss what makes mobile development unique, why traditional pipelines don’t work for mobile, and how to start solving these challenges today.
What makes mobile unique?
DevOps methodology focuses on speed and quality. In traditional web development, once a fix has been identified, the process of integration and deployment can be near-instant. A web app update has no real gatekeepers, and users simply have to refresh the page (and sometimes reset their cache) to enjoy the updated experience.
Unfortunately, there are a few more obstacles when it comes to deploying mobile updates.
Shipping an update requires app store approval
Assuming a fix has been identified and implemented, you still have to run it through a test environment, complete application testing, build your new app store assets, and submit it to the app stores to get released. Then, you wait. Getting a fix into a user’s phone can have a delay of a few days (or more) before the update is finally approved and published. In that time, users might grow frustrated with the mobile app experience and uninstall it altogether. To make matters worse, complaints about an app are broadcasted via the app stores for everybody to see.
Testing contains more edge cases
Most mobile app bugs and crashes are the result of an unexpected application state. Mobile devices are basically a superset of our modern computers with additional features (and complexities). We have various form factors and screen sizes, built-in GPS, ever-changing online/offline connectivity states, different operating systems and a long-tail of operating system versions. All of these variations can lead to unexpected application states, each of which have to be tested to some extent.
The long tail of mobile app versions
According to a user poll, anywhere from 40%-60% of users don’t auto-update their applications, meaning that they either don’t update at all or update on their own timeline. This leads to mobile developers being forced to support varying edge cases and different versions of their own app. Supporting older versions of an application that might use outdated commands or rely on legacy backend functionality adds to the complexity of shipping high quality mobile applications.
Where traditional DevOps drops the ball
Even though mobile applications are unique from traditional software development, it’s common to see companies trying to map their existing DevOps solution for mobile app development teams. There are many individual parts of the continuous integration pipeline that could be leveraged by existing infrastructure, but some tweaks need to be made. Here are the most common additions and customizations that need to be considered for mobile.
iOS builds require Macs and automation requires new knowledge
Building mobile applications for the Apple App Store absolutely requires Apple hardware, specifically a Mac. While many traditional DevOps pipelines run their builds through a Linux-based stack, dedicated Mac hardware is needed in order to compile an iOS mobile application. This leads companies to either provision special VMs with their hosting provider, or jury-rig a Mac in their IT closet.
Mobile-specific testing is difficult
In addition to all the edge cases listed above, there are also varying degrees of tests required for mobile development. When developing new functionality, most teams run unit tests and integration tests, as they would in traditional software testing. However after a build is made, extensive functional testing needs to take place as well. Teams now have to deal with differing test interfaces and tools, along with managing the distribution of alpha and beta releases to internal testers.
Deployment to app stores
Once a mobile app has been successfully tested and built, it needs to be submitted to an app store, which is often a manual process. Since app store submission is infrequent, it’s easy to forget steps or have to re-learn the process each time. From managing provisioning profiles and signing certificates to having the right asset requirements fulfilled to complete the submission workflow, traditional DevOps leaves it up to the mobile teams to figure it out on their own.
Defining Mobile DevOps
With all that in mind, here’s what you should expect from a mobile DevOps solution:
Managed infrastructure for iOS and Android builds
Creating and maintaining your own iOS and Android build environments means keeping up to date with the latest build tools, operating systems, patches, and upgrades. But navigating Android build environments or maintaining a dedicated macOS server shouldn’t be a developer’s responsibility. By selecting a solution that offers managed infrastructure that works out-of-the-box, teams can rely on stable environments to generate native applications.
Different build versions for development and production
During internal and external testing of a mobile application, developers might have different versions to manage based on the audience and stakeholders. Being able to easily delineate between a staging, quality assurance (QA), or production version allows teams to monitor and assess their latest features. Staging versions are useful for internal testing while QA versions can take advantage of TestFlight in iOS and testing tracks in Android to collect user feedback.
Built-in automation features
Automating the build and mobile application delivery pipeline removes the need for manually running builds, notifying reviewers, and managing the approval process. In addition to offering automation, a great mobile DevOps solution will provide smart defaults which don’t require deep DevOps expertise. Developers need to be able to leverage the solution to automate the entire delivery pipeline from native binary builds to app publishing.
Integration with your existing CI/CD pipelines
Mobile DevOps solutions should have the capability to work with your existing CI/CD platform of choice. Integration typically requires a command line interface so that mobile-specific tasks can be offloaded, while generic tasks can continue to function as expected. For instance, using GitHub Actions in order to trigger a specific task on a commit or a test, while the mobile DevOps solution is responsible for building the native binary and submitting the update to the app stores.
Seamless app store publishing
Once the app has been built, tested, and validated by all stakeholders, it should be a breeze to deploy directly to the iOS App Store and Google Play store. Mobile DevOps solutions make it simple to automate the release process by monitoring newly checked-in native builds and requiring just a single click (or no clicks) for publishing.
How to get started with Mobile App DevOps
You could try to hack together a DIY approach to mobile DevOps, or even try to adapt your existing DevOps infrastructure, but we believe that a dedicated solution is worth the investment. It’s why we created Appflow, a mobile CI/CD platform that automates key phases of mobile app development and delivery to improve agility and app quality.