Skip to main content
All posts
$less posts/mobile-ci-that-actually-works.txt
posts/mobile-ci-that-actually-works.txt0 min

Mobile CI That Actually Works

author Nikita Pochaevdate Jan 2026category DevOps

Mobile CI is harder than web CI. You’re dealing with signing certificates, provisioning profiles, Gradle daemons, Xcode build caches, and app distribution — all before your tests even run.

The stack

  • GitHub Actions for orchestration
  • Gradle remote cache (self-hosted)
  • Fastlane for iOS signing and distribution
  • Custom Gradle plugin for Android variant management

Key lessons

Cache everything. Gradle remote caching cut our Android build times from 12 minutes to 4. On iOS, derived data caching saves about 5 minutes per build.

Separate signing from building. Don’t bake certificates into your CI config. Use a dedicated signing step that pulls credentials from a vault.

Fail fast. Run lint and unit tests before the expensive build step. No point compiling a release APK if your code doesn’t pass ktlint.

The pipeline

  1. Lint + static analysis (2 min)
  2. Unit tests (3 min)
  3. Build debug variants (4 min)
  4. Build release + sign (6 min)
  5. Distribute to testers (1 min)

Total: ~16 minutes from push to testable build. Not perfect, but reliable.

#MobileOps#CI/CD
up 47d 6h 23mload 1.47 1.22 0.98tasks 406thr 1,247mem 37%
interactive shell -- try: help, ls posts/, cat meridian, open blog, neofetch
po4yka@ghostty:~$

© Nikita Pochaev · built with ghostty vibes