How to automate the build and release of mobile apps? With Fastlane!
July 15, 2021
In our next technical article, we take a look at the topic of building and releasing apps for Android and iOS platforms. We reveal our approach to these activities and bring a brief tutorial for other developers.
App publishing = a relatively difficult process
When developing an app, it is appropriate to continuously test its finished parts. To do that the developer has to archive the app using the XCode developing environment and then upload the file for testers to Testflight (or to another testing portal). When the app is finished, clear of all flaws and ready for production release in the AppStore, it is necessary to repeat this process and upload the screenshots of the app in all supported languages. Moreover, it is crucial to administrate the certificates which can be a tedious task. Wouldn't it be great if we could avoid this thanks to a tool that would automate the whole process?
Fastlane tool - a very clever assistant
Fastlane is probably the easiest way to automate the build and release of apps for Android/iOS platforms. It will take care of certain steps which would otherwise needlessly occupy our time. We are speaking of automatic app version updates, app archiving, changelog, etc..
Fastlane functions:
Automatic generation of screenshots in all supported languages and for all supported devices
Beta Deployment - Creating a beta version of continuous development for the testers
AppStore Deployment - Release of the new production version for the AppStore
Code Signing - Administration of certificates required for the development and the release
After this process is over, Fastlane can send a message to Slack informing all members of the channel about the app's release. It is also possible to integrate Fastlane to an already existing CI (Bitrise, Jenkins,...), which makes the whole process even more comfortable.
Enough of theory, let's jump to its installation and implementation into a project!
There are more ways to install Fastlane. Here in Dactyl we have used Ruby, however, you can also install it by using HomeBrew.
HomeBrew installation:
brew install fastlane
Next, we recommend setting up a Fastlane match for certificate administration. We will not describe this process here, only paste a link to the setting as you can find a well-written manual on Fastlane's official website.
After having successfully installed Fastlane, we will now move to the project's folder and enter this formula in the terminal:
fastlane init
This will generate several new files in the project - Appfile, Gemfile, and Fastfile.
Let´s now add one more file named Pluginfile in the project. There, we will install the plugin for an automatic app version upgrade. This can be done by inserting one line in the newly created file.
gem 'fastlane-plugin-versioning'
Gemfile - serves for implementation of gems for Fastlane AppFile - contains an Apple ID Fastfile - administrates individual lanes.
In this tutorial, we will show you how to set up a lane so that Fastlane releases an app version for the testers. Nevertheless, the steps of each developer may vary because everyone has their own requirements so it is not necessary to strictly follow this manual.
We will set the app ID in the AppFile so that it matches the app_identifier in both Xcode and App Store Connect.
for_platform :ios do
for_lane :beta do
app_identifier 'bundle_id_aplikace'
end
Then, we can set up the last Fastfile. Firstly, we have to establish the name of the initial lane and define the steps which will take place throughout the process. In the beginning, it is recommended to create a few variables in the file which we can use with a higher number of lanes (for example one variable for beta, another one for the production release).
lane :beta do
buildFinalTarget = 'nameofYourTarget'
currentBranch = 'nameofBranch'
appleID = 'yourAppleId'
test_flight_build()
commit_version()
end
buildFinalTarget - the name of the target from which you will make the build
currentBranch - the name of the branch which will be used for the build
appleID - your Apple ID - can be retrieved from AppStore Connect.
test_flight_build() a commit_version() will be defined below.
Subsequently, we will addtest_flight_build(), which will build our app for TestFlight
lane :test_flight_build do
desc "Push a new #{buildFinalTarget} build to TestFlight"
increment_build_number(
xcodeproj: xcodeproj
)
sync_code_signing(
type: 'appstore',
readonly: true
)
build_app(
clean: false,
workspace: "lifeapp-ios.xcworkspace",
configuration: "VaseKonfigurace",
scheme: buildFinalTarget,
export_method: "app-store",
output_directory: "./build",
include_bitcode: true
)
Configuration can be for example “Release”, “Beta” etc.
The last step is the implementation of commit_version, which will create a commit with a new version. It is also possible to define your own commit or make other steps that you would like.
lane :commit_version do
build_number = get_build_number(xcodeproj: xcodeproj)
version = get_version_number(
xcodeproj: xcodeproj,
target: buildFinalTarget
)
commit_version_bump(
message: "Release-#{version}-#{build_number}",
)
add_git_tag(
grouping: "fastlane",
prefix: "#{version}-"
)
push_to_git_remote(
remote_branch: currentBranch,
force: true,
tags: true
)
end
Now, everything should be set and ready for our first build! Before you run the Fastlane itself, make sure that all the changes are committed and there are no unfinished ones. To launch the process you only have to go to the project folder and write this command:
fastlane beta
If everything is in order, you should see something like this!
We hope you will find this tutorial useful! If you have encountered a problem or you have any questions, do not hesitate to contact us!
The author of this text is Kevin Singh, our mobile team leader.
The control question - what are cookies? Choose the correct answer.
Cookies are not sweets, but text files
We want to have an overview of how it goes on our website. But you have the power to affect how much we know about your visit.
As application and web developers, we are very interested in analytical data, so we will be grateful for your absolute consent.
Cookies Setting
Select your preferred cookie permissions, the basic ones are necessary for operation, others we can use only with your consent.
Your personal data will be processed and information from your device (cookies, personality identifiers and other data collected) may be stored.
You can always change your mind and revoke your consent using the link in the footer of this website. For more information on the use of cookies, please visit this page.