First of all, let's understand what this tool is:
What is Fastlane?
It's an open-source tool that will help you improve the development process and the distribution of your android and ios applications. With this tool you can automate processes such as:
- Automatically generate screenshots for use in stores
- Distribute beta versions to testers
- Sign your own code
- Upload a new version to testflight
It is possible to use external plugins to implement new flows; these plugins are developed by the open-source community.
Read more in the documentation
How to configure on android?
- access your project and enter the android folder
cd myApp/android
- Initialize fastlane
Fastlane init
Now! you have to do configurations:
- In the terminal you will be asked to enter the package name found in the path NameOfApp/android/app/build.gradle and in the namespace field.
- As we are working with android at the moment, we need to make some settings in google. We'll have to generate the json file with some settings.
Google Configuration
- Open the google console
- Activate the api of the project you are working on, if you don't have a project created, create it here.
- Open the google service accounts and select the project you are working on.
Create google services
- Fill in the details and click done
- Copy the email address provided by the service and save it as we will need it later
- Create the keys, click on the 3 dots under actions
- Manage keys
- Create new key -> JSON -> Create
- We will place this json inside our project, place this file inside the android/fastlane folder and define a name for it
- We need to give permission for our service to work
User permissions
- Open the google console and go to users and permissions
- Invite user -> enter the email address of the service
- Set permissions to admin
Configuring the AppFile
json_key_file("android/fastlane/keys.json") # Path to the json secret
# find this data inside android/build.gradle, we use this to identify the app we are working on
package_name("com.nameofapp")
Installing an automatic version change plugin
- access the path yourProject/android/fastlane
- run this command
gem 'fastlane-plugin-increment_version_code'
Configuring FastFile
- This file is where we'll have our fastlane action flow
fastlane_require 'dotenv'
default_platform(:android)
# esta linha faz a leitura do arquivo gradle.properties para
# pegar algumas informações de config
def getGradleProperty(property_name)
gradle_properties_content = File.read('../gradle.properties')
property_regex = /^#{property_name}=(.+)/
match = gradle_properties_content.match(property_regex)
match[1] if match
end
platform :android do
desc "Deploy to test internal to Google Play"
lane :deployBeta do
pathKeyJson = "android/fastlane/keys.json"
# aumentar versão do build
previous_build_number = google_play_track_version_codes(
package_name: "com.nameofapp",
json_key: pathKeyJson,
track: "internal",
)[0]
current_build_number = previous_build_number + 1
increment_version_code(
gradle_file_path: "./app/build.gradle",
version_code: current_build_number
)
gradle(task: 'clean')
gradle(
task: 'bundleRelease',
properties: {
"storeFile" => "../app/release.keystore",
"android.injected.signing.store.password" => getGradleProperty('MYAPP_UPLOAD_STORE_PASSWORD'),
"android.injected.signing.key.alias" => getGradleProperty('MYAPP_UPLOAD_KEY_ALIAS'),
"android.injected.signing.key.password" => getGradleProperty('MYAPP_UPLOAD_KEY_PASSWORD'),
}
)
supply(
json_key: pathKeyJson,
package_name: "com.nameofapp",
track: 'internal',
skip_upload_metadata: true,
skip_upload_images: true,
skip_upload_screenshots: true,
skip_upload_apk: true,
skip_upload_aab: false
)
end
end
Create script package.json
"fastlane:android": "cd android/Fastlane && Fastlane deployBeta"
How to configure on ios?
- access your project and enter the android folder
cd myApp/android
- Initialize fastlane
Fastlane init
Tools we will use:
-
app_store_connect_api_key
: Tool that allows authentication with App Store Connect, this improves security and simplifies the implementation process. -
build_app
: Used to generate an ipa file of our application. -
upload_to_testflight
: Upload the ipa file to testflight
Generate api key
Select user and access, select tab api keys
Generate api key
Choose a name
Select the type of access -> generate the key
Paste the key file into the path myApp/ios/fastlane
Configuring AppFile
# enter your app identifier
app_identifier("your app_identifier")
# enter your apple_id
apple_id("your apple_id")
Configuring FastFile
default_platform(:ios)
platform :ios do
desc "Deploy App to Testflight"
lane :upload_testflight_beta do
build_app(
workspace: "myApp.xcworkspace",
scheme: "myApp",
silent: true,
clean: true,
)
api_key = app_store_connect_api_key(
key_id: "your key id",
issuer_id: "your issuer id",
key_filepath: "path to file auth key",
duration: 1200,
in_house: false
)
upload_to_testflight(
api_key: api_key,
skip_submission: true,
ipa: "myApp.ipa",
skip_waiting_for_build_processing: true,
)
end
end
Create script package.json
"fastlane:ios": "cd iod/Fastlane && Fastlane upload_testflight_beta"