I have never worked in teams with dedicated Devops people for mobile app projects. Software developers were responsible for writing and supporting builds scripts and mobile CI infrastructure. If you one of them you might find these advices useful.

1. Use scripting languages for complex build scripts.

If developers are responsible for writing build scripts in your company, please use a programming language they understand. Honestly, I don’t know how to parse xml with shell script and I have never wanted to learn it. Basics of ruby, nodejs or python are relatively easy to learn. Your colleagues will be thankful.

2. Make research before choosing CI/CD software.

There are very flexible tools like Jenkins, but they require additional knowledge and administration time. Circleci or Travis are quite easy to set up, but you can feel limited in some cases. Personally I like Gitlab CI/CD, but won’t use it for any project. Spend some time to find what fits for your project the best.

3. Try to automate release routines.

I don’t like loosing focus for uploading builds for beta distribution services manually. Try to dedicate some time and automate beta and production deployment.

4. Learn CLI commands and flags of your package manager and build tool.

Most of them have flags you can use on CI.

For example, here are the commands for making sure packages and lock file match:

  • npm ci instead of npm install
  • yarn install --immutable instead of yarn install
  • pod install --deployment instead of pod install

Usually you can also set build cache location and installation folder so you can cache those on CI.

5. Use bundler for managing installation of cocoapods and fastlane.

https://bundler.io/ is a ruby package manager (similar to npm for javascript) which supports local installation and lock-files. It’s easy to use even locally.

6. Enable gradle lock files for android builds.

Gradle doesn’t lock dependencies by default. How many times your build or runtime have failed due to automatic updates of some firebase package? Learn more https://docs.gradle.org/current/userguide/dependency_locking.html.