At Whitesmith, we like to get quality right from the first time and to guarantee that we use some common practices that have gained a lot of traction over the last few years: Continuous Integration and Continuous Deployment.
Those practices help us on removing long time repetitive tasks using automation as first class citizen. They also force us writing good tests for our code.
Current iOS app deployment steps
Taking as example the iOS app of Qold® - a cold chain monitoring service, to deploy a new version we need to check these steps:
- Run tests (including UI tests)
- Increment build number (and version number if required)
- Check provisioning profiles and certificates for code signing
- Build new binary version
- Generate release notes
- Take screenshots for every device and every supported localisation
- Prepare new version on iTunes Connect (and TestFlight)
- Upload binary to iTunes Connect
- Share with internal and external testers
That is a lot to handle in one day!
So we got one dilemma: How to optimize this flow?
CI&D as a Service
We knew the answer passed by using a CI&D as a Service. But then we got another dilemma: Which service to use for our CI and CD process?
Fortunately, there are many services for this task - some of them in an early stage, some others reliable but outdated for current needs. It is a tough decision, but we definitely wanted something with Android and iOS support that included fast runners/virtual machines updates.
Introducing Fastlane 1.0
The answer that we found for the two dilemmas is Fastlane. A perfect tool for cross-automation because it allows us to:
- build one unique deployment flow with different pipelines
- eliminate our repetitive tasks
- publish more frequent and smaller releases
- any person can release updates
Briefly, each flow on Fastlane is defined with a lane. It is possible to setup each lane with actions. There is a list of actions where it is possible to test, build or submit an app and much more like
After defining a lane with the common iOS app deployment actions, the only step to do is executing the Fastlane file and nothing more 🚀. So, if you use CircleCI with the CI&D flow defined with Fastlane, then you can run the same flow on another service. You just need to guarantee the same Fastlane version on both services and you are done.
CircleCI YAML configuration example
# Configuration: https://circleci.com/docs/configuration # More info: https://circleci.com/docs/ios machine: timezone: # Timezone: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones Europe/Lisbon environment: # CocoaPods versions greater than 0.34 require # your terminal to be using UTF-8 encoding. LANG: en_US.UTF-8 xcode: version: "6.4" dependencies: pre: - brew update override: - sudo gem install fastlane test: override: - fastlane ios test setup:true slack:true deployment: beta: # Beta release branch: master commands: - fastlane ios beta slack:true release: # AppStore release # RegEx: v1, v1.2, and v1.2.3 (and so on) all match. tag: /v[0-9]+(\.[0-9]+)*/ commands: - fastlane ios appstore slack:true
Bitrise YAML configuration example
format_version: 1.0.0 default_step_lib_source: https://github.com/bitrise-io/bitrise-steplib.git title: Template configuration. summary: |- Template 'bitrise.yml', generated by 'bitrise init'. app: envs: - BITRISE_APP_TITLE: "Qold-iOS-app" - BITRISE_DEV_BRANCH: "master" trigger_map: - pattern: test** is_pull_request_allowed: true workflow: test - pattern: "*" is_pull_request_allowed: true workflow: fallback workflows: beta: description: |- You can use this workflow by running: bitrise run beta steps: - timestamp: outputs: - UNIX_TIMESTAMP: - ISO_DATETIME: - script: title: Beta release inputs: - content: |- #!/bin/bash fastlane ios beta
Fastlane + Twitter Fabric
Fastlane is now part of Fabric, a software development kit, and it is great news because it gives Fastlane a future development guaranty. Another neat part: Fastlane has started supporting Android as well.
Stay tuned for our next article about - How we setup our Qold app with Fastlane. Follow us on twitter and if you have any question, just shoot us a tweet.
Images from KrauseFx, developer of Fastlane.