# Deep Dive into iOS Automation at Grab - Continuous Delivery

[Grab](https://yomu.fyi/company/grab) · Sun Xiangxin · Apr 23, 2017

**Type:** Explainer

## Summary

Grab manages continuous delivery for its iOS applications using four build configurations per target: Adhoc QA, Hot Dogfood, Dogfood, and Testflight. The engineering team moved away from Fastlane in favor of custom bash scripts under 100 lines that execute clean builds and archives via xcodebuild. To eliminate manual logins for build execution, Grab developed a server-side Swift application integrating SlackKit and a bot named Iris. Incoming Slack commands are parsed and scheduled onto a serial DispatchQueue to trigger the appropriate build scripts. Deployment and rollback of updates to Iris and its build scripts are handled through Capistrano.

## Context

To bypass the device whitelist limits of standard Apple developer accounts, Grab needed an internal beta app distribution system and a way to trigger builds without requiring manual logins to build machines.

## Approach / What changed

Grab implemented custom bash scripts around xcodebuild, created a server-side Swift Slackbot named Iris using SlackKit to queue archive jobs, and utilized Capistrano to manage Iris deployments.

## Takeaways

- Grab replaced Fastlane with concise, sub-100-line bash scripts using xcodebuild to reduce third-party dependencies and gain build flexibility.
- The Iris Slackbot enqueues archive tasks onto a serialized DispatchQueue to run shell scripts and post status updates back to Slack.
- Capistrano automates deployments and rollbacks for the Iris server application, linking shared configuration files across releases.

**Tags:** [CI/CD](https://yomu.fyi/topic/ci-cd), [Deployment](https://yomu.fyi/topic/deployment), [Developer Experience](https://yomu.fyi/topic/developer-experience), [iOS](https://yomu.fyi/topic/ios)

[Read original post](https://engineering.grab.com/deep-dive-into-ios-automation-at-grab-continuous-delivery)
