New to fastlane? Click here to open the installation & setup instructions first
1) Install the latest Xcode command line tools
2) Install fastlane
# Using RubyGems sudo gem install fastlane -NV # Alternatively using Homebrew brew install fastlane
3) Navigate to your project and run
Deploy to Beta distribution services using fastlane
If you would like to distribute your beta builds to Google Play, please make sure you've done the steps from Setting up supply before continuing.
Building your app
fastlane takes care of building your app by delegating to your existing Gradle build. Just add the following to your
lane :beta do # Adjust the `build_type` and `flavor` params as needed to build the right APK for your setup gradle( task: 'assemble', build_type: 'Release' ) # ... end
Try running the lane with:
When that completes you should have the appropriate APK ready to go in the standard output directory.
To get a list of all available parameters for the
gradle action, run:
fastlane action gradle
Uploading your app
After building your app, it's ready to be uploaded to a beta testing service of your choice. The beauty of fastlane is that you can easily switch beta providers, or even upload to multiple at once, with a minimum of configuration. Follow that with a notification posted to the group messaging service of your choice to let the team know that you've shipped.
lane :beta do gradle(task: 'assemble', build_type: 'Release') upload_to_play_store(track: 'beta') slack(message: 'Successfully distributed a new beta build') end
Supported beta testing services
In order to distribute to Google Play with upload_to_play_store you will need to have your Google credentials set up. Make sure you've gone through Setting up supply before continuing!
lane :beta do # ... gradle( task: 'assemble', build_type: 'Release' ) upload_to_play_store(track: 'beta') # ... end
To get a list of all available options, run:
fastlane action upload_to_play_store
Firebase App Distribution
Install the Firebase App Distribution plugin:
fastlane add_plugin firebase_app_distribution
Authenticate with Firebase by running the
firebase_app_distribution_login action (or using one of the other authentication methods):
fastlane run firebase_app_distribution_login
Then add the
firebase_app_distribution action to your lane:
lane :beta do # ... gradle( task: 'assemble', build_type: 'Release' ) firebase_app_distribution( app: "1:123456789:android:abcd1234", groups: "qa-team, trusted-testers" ) # ... end
For more information and options (such as adding release notes) see the full Getting Started guide.
More information about additional supported beta testing services can be found in the list of "Beta" actions
Generate based on Git commits
You take the time to write great Git commit messages, right? Why not take advantage of them to automatically summarize the work done for your latest beta release?
lane :beta do # ... # Generate the changelog based on commit messages since your last tag changelog_from_git_commits # The crashlytics action knows how to use the generated changelog automatically crashlytics( api_token: '[insert_key_here]', build_secret: '[insert_secret_here]' ) end
You can get a list of all available options by running
fastlane action changelog_from_git_commits, but here are some examples:
changelog_from_git_commits( between: ['7b092b3', 'HEAD'], # Optional, lets you specify a revision/tag range between which to collect commit info merge_commit_filtering: 'exclude_merges' # Optional, lets you filter out merge commits )
Prompt for changelog
You can automatically be asked for the changelog in your terminal using the
lane :beta do # Variant 1: Ask for a one line input changelog = prompt(text: "Changelog: ") # Variant 2: Ask for a multi-line input # The user confirms their input by typing `END` and Enter changelog = prompt( text: "Changelog: ", multi_line_end_keyword: "END" ) crashlytics( api_token: '[insert_key_here]', build_secret: '[insert_secret_here]', notes: changelog ) end
Fetch the changelog from the file system or remote server
You can fetch values from anywhere, including the file system and remote server, by writing code in your
lane :beta do # Variant 1: Read from file system # note the `..`, since fastlane runs in the _fastlane_ directory changelog = File.read("../Changelog.txt") # Variant 2: Fetch data from a remote web server changelog = download(url: "https://lookatmycms.com/changelog.txt") crashlytics( api_token: '[insert_key_here]', build_secret: '[insert_secret_here]', notes: changelog ) end