fastlane can be simply described as the easiest way to automate building and release your iOS and Android apps, via a suite of tools that can work either autonomously or in tandem to accomplish tasks such as:
- Automation of building and packaging iOS apps producing .ipa files
- Automation of taking screenshots of your app across different screen types, sizes, and languages
- Automation of uploading the screenshots and metadata and the packaged files to iTunes Connect directly, bypassing Xcode
- Automation of and management of refreshing, renewing, repairing, and managing signing certificates, provisioning profiles, and push notification profiles
- Synchronization and sharing of your certificates and profiles efficiently across to other team members
- Automation of managing and onboarding testers using your app, through TestFlight
- Automation of running tests for your app
The benefit of leveraging one or more fastlane actions is in your ability to save hours and even days, saving you the laborious task of having to submit, provision, and take screenshots manually, and instead allowing you to focus on what matters: that is, feature development. This is the mantra of Continuous Deployment and CD—the ability to code and release iteratively and rapidly, with minimal barriers. This is what fastlane is.
You also won't need to remember and call the individual fastlane actions individually; by using a Fastfile configuration file, you can store the actions in the sequence you want, under a grouping you can define and label, such as alpha testing, and call all the actions that belong to that grouping.
fastlane was the brainchild of Felix Krause (https://krausefx.com/), developed and open sourced on GitHub (https://github.com/fastlane/fastlane) back in 2014. After achieving a cult-like following by indie developers and eventually becoming mainstream and being used by thousands of companies, in late 2015, fastlane was acquired by Twitter (https://krausefx.com/blog/fastlane-is-now-part-of-fabric) as part of Twitter's Fabric development suite (https://fabric.io/login?redirect_url=%2Fhome). Just over a year later, in early 2017, Fabric itself was acquired by Google (https://krausefx.com/blog/fastlane-is-joining-google), as part of Google’s Firebase mobile development platform (https://firebase.google.com/), and the author moved to Google. Despite the project moving to Twitter and then Google, it very much remains an open source and active project.
fastlane is a Ruby-powered configuration file, called a Fastfile, grouped by lanes to serve different purposes and needs. For instance, you have a lane for deploying to the App Store, from which you have specific tasks, called actions, that you want to accomplish, such as incrementing your build number as you build your app, running actions such as cocoapods installment, running tests, taking screenshots, and uploading your app and associative metadata to the App Store. Take a look at the following code snippet:
lane :beta do
# Increment build number in XCode
increment_build_number
# Build your app
gym
# Upload to TestFlight
testflight
end
lane :appstore do
increment_build_number
# Run cocoapods install
cocoapods
# Run tests
scan
# Take screenshots
snapshot
# Provisioning
sigh
# Upload app, screenshots and meta-data
deliver
# Run your own custom script
sh "./customScript.sh"
...
# Notify your contacts on Slack
slack
end
As shown in the preceding Fastfile code snippet, you would have another lane for the beta, to beta test your app and run through the automated tasks (actions) you would associate with beta testing, from incrementing your build count to building your app and pushing it to TestFlight. Of course, you could plug in other third-party tools, such as pushing to Fabric instead of TestFlight, as we will demonstrate in later chapters.
The real power of fastlane is in its extensibility, its ability to integrate with all of your familiar existing tools; there are currently over 170 custom actions (https://docs.fastlane.tools/actions/), according to the official website, with the ability to integrate with all major CI systems, such as Jenkins, which we will cover in later chapters.