{"id":12115,"date":"2025-04-15T13:09:58","date_gmt":"2025-04-15T13:09:58","guid":{"rendered":"https:\/\/dianapps.com\/blog\/?p=12115"},"modified":"2025-04-15T13:09:58","modified_gmt":"2025-04-15T13:09:58","slug":"how-to-start-with-fastlane-for-easy-android-and-ios-deployment","status":"publish","type":"post","link":"https:\/\/dianapps.com\/blog\/how-to-start-with-fastlane-for-easy-android-and-ios-deployment\/","title":{"rendered":"How to Get Started with Fastlane for Easy Android and iOS Deployment?"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">How can I speed up my mobile app deployment process without compromising on quality?<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This is a question that many developers, especially those working in <\/span><a href=\"https:\/\/dianapps.com\/mobile-app-development\"><b>mobile app development company<\/b><\/a><span style=\"font-weight: 400;\">, often ask. Every new app release brings a wave of challenges, such as setting up certificates, managing multiple build versions, and submitting apps to the store. Without the right tools, these tasks become repetitive, error-prone, and time-consuming.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This is where Fastlane comes in to make a difference. As an open-source platform, it automates tedious processes, saving developers countless hours while ensuring consistency and reducing human errors. With Fastlane, you can focus on building amazing features for your users while the platform handles your entire release workflow.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Without Fastlane, the deployment process often involves:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Manual Certificate Management:<\/b><span style=\"font-weight: 400;\"> Setting up and renewing certificates can be frustrating.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Time-Consuming App Store Submissions:<\/b><span style=\"font-weight: 400;\"> Manually submitting builds to app stores is slow and tedious.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Inconsistent Build Versions:<\/b><span style=\"font-weight: 400;\"> Ensuring consistency across multiple versions and environments can be tricky.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Fastlane solves these problems by automating essential tasks such as:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Code signing<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">App store deployment<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Versioning\u00a0<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">As a result, mobile app development service providers can streamline their workflows and push updates faster, making it an indispensable tool for teams that want to optimize their release process and minimize errors.<\/span><\/p>\n<h2><span class=\"ez-toc-section\" id=\"How-can-Android-and-iOS-Deployment-with-Fastlane-be-simplified\"><\/span><span style=\"font-weight: 400;\">How can Android and iOS Deployment with Fastlane be simplified?<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">The major role of the Fastlane comes with simplifying Android and iOS deployment. In this section, you will learn how Fastlane can automate every aspect of your release and development process:\u00a0<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Automate-Screenshots\"><\/span><span style=\"font-weight: 400;\">Automate Screenshots<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Fastlane, an open-source platform, has the potential to generate localized <\/span><a href=\"https:\/\/dianapps.com\/blog\/how-to-upload-an-app-to-google-play-store\/\"><span style=\"font-weight: 400;\">Google Play Store<\/span><\/a><span style=\"font-weight: 400;\"> and Apple App Store screenshots in minutes.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">This platform automatically captures screenshots based on the localized language device your app supports.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">It allows anyone from the team to generate screenshots if the configuration is stored.<\/span><\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Beta-Deployment\"><\/span><span style=\"font-weight: 400;\">Beta Deployment<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Now, the testing process can be fastened and automated with new beta builds provided to testers.\u00a0\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">It automates the most repetitive and time-consuming beta distribution steps, including code signing, building and uploading the app, setting a change log, and incrementing the build version.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">This open-source platform supports more than 15 beta testing services, such as Play, Hockey, TestFlight, and Crashlytics Beta.\u00a0<\/span><\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"App-Store-Deployment\"><\/span><span style=\"font-weight: 400;\">App Store Deployment<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Now, the deployment process can be automated by developing a repeatable custom workflow for uploading, building, and distributing new releases.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Now, all the metadata, including screenshots, can be automatically managed and uploaded.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Even the new version of the application can be automatically submitted for review.\u00a0<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Recommended Read: <\/span><a href=\"https:\/\/dianapps.com\/blog\/how-to-upload-an-app-to-app-store\/\"><span style=\"font-weight: 400;\">How To Upload An App To App Store?<\/span><\/a><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Code-Signing\"><\/span><span style=\"font-weight: 400;\">Code Signing<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Fastlane eliminates the need for managing code-signing identities.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Code-signing identities must be stored in their own private, encrypted git repositories to securely sync them across machines.\u00a0<\/span><\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Importance-of-Fastlane-in-Mobile-App-Deployment\"><\/span><span style=\"font-weight: 400;\">Importance of Fastlane in Mobile App Deployment\u00a0<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Today, manual iOS and Android app deployment processes have become difficult with multiple signing requirements, versions, and platform-specific configurations. This is where Fastlane is used to automate several tasks, given below:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>TestFlight &amp; Google Play Integration:<\/b><span style=\"font-weight: 400;\"> It allows efficient distribution of builds to testers.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Metadata &amp; Versioning Management:<\/b><span style=\"font-weight: 400;\"> Across multiple platforms, Fastlane ensures the version is consistent.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Automated Build &amp; Deployment: <\/b><span style=\"font-weight: 400;\">Fastlane can help in distributing and generating test builds for both iOS and Android applications with a single command.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Code Signing Management:<\/b><span style=\"font-weight: 400;\"> iOS provisioning profiles and certificates are handled more efficiently.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Recommended Read: <\/span><a href=\"https:\/\/dianapps.com\/blog\/key-differences-between-android-and-ios-app-development\/\"><span style=\"font-weight: 400;\">Key Differences Between Android and iOS App Development<\/span><\/a><\/p>\n<h2><span class=\"ez-toc-section\" id=\"How-to-Get-Started-With-Fastlane\"><\/span><span style=\"font-weight: 400;\">How to Get Started With Fastlane?<\/span><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Here, you will get to learn about the complete process of getting started with Fastlane. Let\u2019s first start with the installation process:<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Install-Fastlane\"><\/span><span style=\"font-weight: 400;\">Install Fastlane<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Android<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Install Ruby<\/span><\/li>\n<\/ol>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">To install Fastlane, you can leverage <\/span><a href=\"https:\/\/rubyinstaller.org\/\"><span style=\"font-weight: 400;\">RubyInstaller<\/span><\/a><span style=\"font-weight: 400;\"> or the terminal command shown below.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Be sure to open the terminal as an administrator, and remember that this is only for Windows users.<\/span><\/li>\n<\/ul>\n<pre class=\"theme:github font-size:14 nums:false lang:default decode:true\">choco install ruby # you must have Chocolatey package manager\u00a0\r\n\r\ngem install bundler\r\n\r\nruby --version<\/pre>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Install Fastlane<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">gem install fastlane<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Now, it\u2019s time to set environment variables<\/span>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">From the search bar, open environment variables<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Then, under the system variable option, you are required to add those keys and values<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-12117\" src=\"https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2025\/04\/image2-2.png\" alt=\"Image 1\" width=\"800\" height=\"753\" srcset=\"https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2025\/04\/image2-2.png 800w, https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2025\/04\/image2-2-768x723.png 768w, https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2025\/04\/image2-2-640x602.png 640w, https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2025\/04\/image2-2-400x377.png 400w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/p>\n<pre class=\"theme:github font-size:14 nums:false lang:default decode:true \">LC_ALL \u21d2 en_US.UTF-8\r\n\r\nLANG \u21d2 en_US.UTF-8\r\n\r\nFLUTTER_ROOT=&lt;Your flutter root file&gt;<\/pre>\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">macOS<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">install ruby<\/span><\/li>\n<\/ol>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Now you have to open the terminal to write the code<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">brew install ruby &amp;&amp; sudo gem install bundler &amp;&amp; ruby &#8211;version\u00a0<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Install Fastlane<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Now, before executing brew commands, homebrew needs to be installed, as new macOS users might not have this installed in their system.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">brew install fastlane<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Once installed, you need to set environment variables<\/span>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">First, you need to open Finder, then go to the top bar and click Go -&gt; Home.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">After the home tab is opened, click on cmd&amp;shift&amp;. to access the hidden files. After this open .zprofile file.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Now, you need to add the files given below in your .zprofile file.<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<pre class=\"theme:github font-size:14 nums:false lang:default decode:true\">export PATH=\"\/opt\/homebrew\/opt\/ruby\/bin:$PATH\u201d\r\n\r\nexport LC_ALL=en_US.UTF-8\r\n\r\nexport LANG=en_US.UTF-8\r\n\r\nexport FLUTTER_ROOT=\"&lt;Your flutter root file&gt;\" # examle \/Users\/alimaher\/fvm\/default\/<\/pre>\n<p>Fastlane for Android<\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Now\u00a0 it\u2019s time to <\/span><b>set up \u201cFastlane.\u201d<\/b>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Go to the Visual Studio Code terminal, identify the Android folder cd android<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Once the Android folder is navigated, run fastlance init.\u00a0<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Now, you will get a pop message asking you are ready to begin. A few more pieces of information will also be provided. Let\u2019s quickly get started.\u00a0<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">When asked, you need to immediately provide the package name for your application (for example, io.fabric.yourapp)<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Now you have to press enter when you are asked about the path to your JSON secret file.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">When you get a pop-up asking if you plan to upload info to Google Play via fastlane, then you must answer with \u2018n\u2019. (Moreover, You can set this section later on.)\u00a0<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400;\">After these steps, Fastlane will automatically generate a configuration for you based on the provided information.\u00a0\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">You can even access the newly created .\/fastlane directory, with the files given below:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Complete configuration information can be found in Appfile that is global to your app.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">The &#8220;lanes&#8221; that determine the fastlane&#8217;s behavior are defined by the fastfile.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Setting up *<\/span><i><span style=\"font-weight: 400;\">supply<\/span><\/i><span style=\"font-weight: 400;\">*<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">App metadata, screenshots, and binaries can be uploaded with supply \u2018a fastlane tool\u2019. It also allows users to select tracks for builds and promote builds to production.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">If you want to start with supply, be sure to have successfully uploaded an APK of your app in the Google Play Console at least once.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">If you want to set up, understand that you need to download credentials file from your Google Developers Service Account.<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Collect-Your-Google-Credentials\"><\/span><span style=\"font-weight: 400;\">Collect Your Google Credentials<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><b>Tip:<\/b><span style=\"font-weight: 400;\"> Everyone wants to use Google Play Console or Google Developers Console in their local language, and if it is visible in your local language, then add <\/span><b>&amp;hl=en<\/b><span style=\"font-weight: 400;\"> at the end of the URL (before the placement of #) to get back to English. Now, we are also providing some links that will help you find the correct buttons.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Note: If you face any problem with the steps shown here, you can refer to the <\/span><a href=\"https:\/\/developers.google.com\/android-publisher\/getting_started\/?hl=en\"><span style=\"font-weight: 400;\">document provided by Google.<\/span><\/a><span style=\"font-weight: 400;\">\u00a0<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Go to the Google Play Console<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Once a Google Play Console account is accessed, click Account Details and note the Developer Account ID listed there.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Now, by selecting an existing Google Cloud Project, enable the Google Play developers AI that fits your needs and then click <\/span><b>ENABLE<\/b><span style=\"font-weight: 400;\">.\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Now, if you do not have access to your existing project or prefer to have a dedicated one for Fastlane, be sure to create the new one and follow the complete guidelines.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Now, you need to go to the <\/span><b>Service Account on Google Cloud <\/b><span style=\"font-weight: 400;\">and select the project you would like to use.<\/span><b>\u00a0<\/b><\/li>\n<\/ul>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">First, click on the CREATE SERVICE ACCOUNT button shown on the top of the Google Cloud Platform Console page.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Now, it\u2019s time to verify whether you are on the correct Google Cloud Platform or not. It can be ensured by checking on to the Developer Account ID from earlier within the light gray text in the second input, preceding .iam.gserviceaccount.com, or verification can also be done by checking the project name in the navigation bar. If not, even open the picker from the top navigation bar and find the right one.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Now, you are required to provide a Service Account Name (suhc as fastlane-supply)<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Now you will get an email address below the Service Account ID, you need to copy this address field for further uses.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Now, it is time to click on the DONE button (do not click CREATE and CONTINUE as the optional steps because granting access is not required).<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Click on the **Actions** vertical three-dot icon of the service account you just created<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Select **Manage keys** on the menu<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Click **ADD KEY** \u2192 **Create New Key**<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Make sure **JSON** is selected as the `Key type`, and click **CREATE**<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Save the file on your computer when prompted and remember where it was saved.<\/span><\/li>\n<\/ul>\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-12118\" src=\"https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2025\/04\/image1-3.png\" alt=\"image 2\" width=\"800\" height=\"570\" srcset=\"https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2025\/04\/image1-3.png 800w, https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2025\/04\/image1-3-768x547.png 768w, https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2025\/04\/image1-3-640x456.png 640w, https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2025\/04\/image1-3-400x285.png 400w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Now, you need to open <\/span><a href=\"https:\/\/play.google.com\/console\/signup\"><span style=\"font-weight: 400;\">Google Play Console<\/span><\/a><span style=\"font-weight: 400;\"> and select the Users and Permissions option.\u00a0<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">First, click on <\/span><b>invite new users<\/b><span style=\"font-weight: 400;\">.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Then, in the email address field, you need to paste the email address that you saved for further usage.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Then click on Account Permissions.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">From the different types of permission, select the one that you would like this account to have. Admin (all permission) is highly recommended, but based on your needs, you might have to select all checkboxes that are required and leave a few permission features such as exclude devices, production release, and use Play App Signing.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Now, finally, you have to click on Invite User<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400;\">Now, if you want to test the connection of Google Play Store with the downloaded private key. Use the code given below<\/span><\/p>\n<pre class=\"theme:github font-size:14 nums:false lang:default decode:true\">(fastlane run validate_play_store_json_key json_key:\/path\/to\/your\/downloaded\/file.json]\r\n(https:\/\/docs.fastlane.tools\/actions\/validate_play_store_json_key\/).<\/pre>\n<p><span style=\"font-weight: 400;\">Once this code properly functions, add the paths to the JSON file to your Appfile.\u00a0<\/span><\/p>\n<pre class=\"theme:github font-size:14 nums:false lang:default decode:true\">json_key_file(\"path\/to\/your\/play-store-credentials.json\")\r\n\r\npackage_name(\"my.package.name\")<\/pre>\n<h3><span class=\"ez-toc-section\" id=\"Fetch-your-app-metadata\"><\/span><span style=\"font-weight: 400;\">Fetch your app metadata<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400;\">If your app is developed on the Google Play Developer Console, then your app is ready to start using Supply to manage it! Run:<\/span><\/p>\n<pre class=\"theme:github font-size:14 nums:false lang:default decode:true \">fastlane supply init<\/pre>\n<p><span style=\"font-weight: 400;\">Moreover, all the latest Google Play Store metadata will be downloaded to fastlane\/metadata\/android.<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Test-and-Deploy\"><\/span><span style=\"font-weight: 400;\">Test and Deploy<\/span><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Now, an app must undergo internal test<\/span>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">First, open the <\/span><b>android\/fastlane\/Fastfile<\/b><span style=\"font-weight: 400;\"> file. Then, in this file, you can add your setting for the upload new tab for internal testing.<\/span><\/li>\n<\/ul>\n<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\">\n<pre class=\"theme:github font-size:14 nums:false lang:default decode:true \">default_platform(:android)\r\n\r\n\r\n\r\n\r\n# upload to internal test to Google Play\r\n\r\nlane :internal do\u00a0\r\n\r\n\u00a0\u00a0# build the app bundle if you haven't already\u00a0\r\n\r\n\u00a0\u00a0gradle(task: 'bundleRelease')\r\n\r\n\u00a0\u00a0# Upload to internal test\r\n\r\n\u00a0\u00a0upload_to_play_store(\r\n\r\n\u00a0\u00a0\u00a0\u00a0track: 'internal',\r\n\r\n\u00a0\u00a0\u00a0\u00a0aab: '..\/build\/app\/outputs\/bundle\/release\/app-release.aab', # Update this path if your AAB is generated in a different location\r\n\r\n\u00a0\u00a0\u00a0\u00a0skip_upload_apk: true,\r\n\r\n\u00a0\u00a0\u00a0\u00a0skip_upload_images: true,\r\n\r\n\u00a0\u00a0\u00a0\u00a0skip_upload_screenshots: true,\r\n\r\n\u00a0\u00a0\u00a0\u00a0skip_upload_metadata: true,\r\n\r\n\u00a0\u00a0\u00a0\u00a0skip_upload_changelogs: true,\r\n\r\n\u00a0\u00a0\u00a0\u00a0skip_upload_aab: false,\r\n\r\n\u00a0\u00a0)<\/pre>\n<p><span style=\"font-weight: 400;\">Then you can increase your build number in pubspec.yaml<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Then, go to the terminal and run the following code.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">\n<pre class=\"theme:github font-size:14 nums:false lang:default decode:true \">flutter clean\r\n\r\nflutter pub get\r\n\r\nflutter build appbundle\r\n\r\ncd .\/android\/\r\n\r\nfastlane internal # Now you will push your aab to the internal test\r\n\r\ncd ..<\/pre>\n<p><span style=\"font-weight: 400;\">Release<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">First, open the android\/fastlane\/Fastfile file. Then, in this file, you can add your setting for the upload new tab for internal testing.<\/span><\/li>\n<\/ul>\n<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\">\n<pre class=\"theme:github font-size:14 nums:false lang:default decode:true \">default_platform(:android)\r\n\r\n\r\n\r\n\r\n# upload release to Google Play\r\n\r\nlane :release do\r\n\r\n\u00a0\u00a0gradle(task: 'bundleRelease')\r\n\r\n\u00a0\u00a0# Upload to internal test\r\n\r\n\u00a0\u00a0upload_to_play_store(\r\n\r\n\u00a0\u00a0\u00a0\u00a0track: 'production',\r\n\r\n\u00a0\u00a0\u00a0\u00a0aab: '..\/build\/app\/outputs\/bundle\/release\/app-release.aab', # Update this path if your AAB is generated in a different location\r\n\r\n\u00a0\u00a0\u00a0\u00a0skip_upload_apk: true,\r\n\r\n\u00a0\u00a0\u00a0\u00a0skip_upload_images: true,\r\n\r\n\u00a0\u00a0\u00a0\u00a0skip_upload_screenshots: true,\r\n\r\n\u00a0\u00a0\u00a0\u00a0skip_upload_metadata: true,\r\n\r\n\u00a0\u00a0\u00a0\u00a0skip_upload_changelogs: true,\r\n\r\n\u00a0\u00a0\u00a0\u00a0skip_upload_aab: false,\r\n\r\n\u00a0\u00a0)<\/pre>\n<p><span style=\"font-weight: 400;\">Then you can increase your build number in pubspec.yaml<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Then, go to the terminal and run the following code.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">\n<pre class=\"theme:github font-size:14 nums:false lang:default decode:true \">flutter clean\r\n\r\nflutter pub get\r\n\r\nflutter build appbundle\r\n\r\ncd .\/android\/\r\n\r\nfastlane release # Now you will push your aab to the internal test\r\n\r\ncd ..<\/pre>\n<p><span style=\"font-weight: 400;\">It increases the version number automatically.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Then, add the script.rb file.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Now, it\u2019s time to create a new file script.rb in the android folder: andoird\/script.rb. Furthermore, this code will edit in your pubspec.yaml file to increase your version.\u00a0<\/span><\/li>\n<\/ul>\n<pre class=\"theme:github font-size:14 nums:false lang:default decode:true\"># pubspec_path = '..\/pubspec.yaml'\r\n\r\npubspec_path = File.expand_path('..\/..\/pubspec.yaml', __FILE__)\r\n\r\n\r\n\r\n\r\n# Read the file into an array of lines\r\n\r\nlines = File.readlines(pubspec_path)\r\n\r\n\r\n\r\n\r\n# Find the line containing the version and update it\r\n\r\nlines.map! do |line|\r\n\r\n\u00a0\u00a0if line.strip.start_with?('version:')\r\n\r\n\u00a0\u00a0\u00a0\u00a0if line =~ \/(\\d+)\\.(\\d+)\\.(\\d+)\\+(\\d+)\/\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0major, minor, patch, build = $1.to_i, $2.to_i, $3.to_i, $4.to_i\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0patch += 1\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0build += 1\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0line = \"version: #{major}.#{minor}.#{patch}+#{build}\\n\"\r\n\r\n\u00a0\u00a0\u00a0\u00a0end\r\n\r\n\u00a0\u00a0end\r\n\r\n\u00a0\u00a0line\r\n\r\nend\r\n\r\n\r\n\r\n\r\n# Write the updated lines back to the file\r\n\r\nFile.open(pubspec_path, 'w') { |file| file.puts(lines) }<\/pre>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Once you have run the above code, be sure to open the android\/fastlane\/Fastfile file. In this file, you will get an option to add your sitting for increasing your version number automatically.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">lane :icrease_build_number do<\/span><\/p>\n<pre class=\"theme:github font-size:14 nums:false lang:default decode:true\"># script.rb is a ruby script that increments the build number in pubspec.yaml\r\n\r\n\u00a0\u00a0system(\"ruby ..\/script.rb\")\r\n\r\nend<\/pre>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Now, it\u2019s time to increase your build number in pubspec.yaml<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Now run the following commands in your terminal.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">\n<pre class=\"theme:github font-size:14 nums:false lang:default decode:true \">cd .\/android\/\r\n\r\nfastlane icrease_build_number\u00a0\r\n\r\ncd ..<\/pre>\n<p><span style=\"font-weight: 400;\">You can use this code to completely automate your deployment steps utilizing both the internal and icrease_build_number fastlane actions:<\/span><\/li>\n<\/ul>\n<pre class=\"theme:github font-size:14 nums:false lang:default decode:true\">cd .\/android\/\r\n\r\nfastlane icrease_build_number\r\n\r\ncd ..\r\n\r\nflutter clean\r\n\r\nflutter pub get\r\n\r\nflutter build appbundle\r\n\r\ncd .\/android\/\r\n\r\nfastlane release # or use internal\u00a0\r\n\r\ncd ..<\/pre>\n<h2><span class=\"ez-toc-section\" id=\"Final-Words\"><\/span>Final Words<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Finally, through this blog, you must have understood how to get started with Fastlane for your Flutter, Android, and iOS app using GitHub Actions and Fastlane.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Fastlane is an automated platform that builds and deploys an app directly to the Play Store and App Store. This open-source platform has reduced the role of developers and allowed them to relax, sit back, and let automation complete most of the repetitive tasks.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This blog has also covered how Fastlane can simplify the Flutter app development process. So, if you want to leverage this technology, be sure to connect with a leading developer from an Android or <\/span><a href=\"https:\/\/dianapps.com\/ios-app-development\"><b>iOS app development company<\/b><\/a><span style=\"font-weight: 400;\">.\u00a0<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>How can I speed up my mobile app deployment process without compromising on quality? This is a question that many developers, especially those working in mobile app development company, often ask. Every new app release brings a wave of challenges, such as setting up certificates, managing multiple build versions, and submitting apps to the store. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":12120,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_wp_applaud_exclude":false,"footnotes":""},"categories":[3],"tags":[1300,1299,726],"class_list":["post-12115","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-app-development","tag-fastlane-for-android-development","tag-fastlane-for-easy-android-and-ios-deployment","tag-ios-app-development"],"featured_image_src":{"landsacpe":["https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2025\/04\/Fastlane-for-Easy-Android-and-iOS-Deployment-1140x445.png",1140,445,true],"list":["https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2025\/04\/Fastlane-for-Easy-Android-and-iOS-Deployment-463x348.png",463,348,true],"medium":["https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2025\/04\/Fastlane-for-Easy-Android-and-iOS-Deployment-300x169.png",300,169,true],"full":["https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2025\/04\/Fastlane-for-Easy-Android-and-iOS-Deployment.png",1536,864,false]},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.12 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to Start with Fastlane for Easy Android &amp; iOS Deployment?<\/title>\n<meta name=\"description\" content=\"Learn how to get started with Fastlane to streamline Android and iOS deployment for your Flutter app with ease and efficiency.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/dianapps.com\/blog\/how-to-start-with-fastlane-for-easy-android-and-ios-deployment\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Start with Fastlane for Easy Android &amp; iOS Deployment?\" \/>\n<meta property=\"og:description\" content=\"Learn how to get started with Fastlane to streamline Android and iOS deployment for your Flutter app with ease and efficiency.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/dianapps.com\/blog\/how-to-start-with-fastlane-for-easy-android-and-ios-deployment\/\" \/>\n<meta property=\"og:site_name\" content=\"Learn About Digital Transformation &amp; Development | DianApps Blog\" \/>\n<meta property=\"article:published_time\" content=\"2025-04-15T13:09:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2025\/04\/Fastlane-for-Easy-Android-and-iOS-Deployment.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1536\" \/>\n\t<meta property=\"og:image:height\" content=\"864\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Vikash Soni\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Vikash Soni\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to Start with Fastlane for Easy Android & iOS Deployment?","description":"Learn how to get started with Fastlane to streamline Android and iOS deployment for your Flutter app with ease and efficiency.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/dianapps.com\/blog\/how-to-start-with-fastlane-for-easy-android-and-ios-deployment\/","og_locale":"en_US","og_type":"article","og_title":"How to Start with Fastlane for Easy Android & iOS Deployment?","og_description":"Learn how to get started with Fastlane to streamline Android and iOS deployment for your Flutter app with ease and efficiency.","og_url":"https:\/\/dianapps.com\/blog\/how-to-start-with-fastlane-for-easy-android-and-ios-deployment\/","og_site_name":"Learn About Digital Transformation &amp; Development | DianApps Blog","article_published_time":"2025-04-15T13:09:58+00:00","og_image":[{"width":1536,"height":864,"url":"https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2025\/04\/Fastlane-for-Easy-Android-and-iOS-Deployment.png","type":"image\/png"}],"author":"Vikash Soni","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Vikash Soni","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/dianapps.com\/blog\/how-to-start-with-fastlane-for-easy-android-and-ios-deployment\/","url":"https:\/\/dianapps.com\/blog\/how-to-start-with-fastlane-for-easy-android-and-ios-deployment\/","name":"How to Start with Fastlane for Easy Android & iOS Deployment?","isPartOf":{"@id":"https:\/\/dianapps.com\/blog\/#website"},"datePublished":"2025-04-15T13:09:58+00:00","dateModified":"2025-04-15T13:09:58+00:00","author":{"@id":"https:\/\/dianapps.com\/blog\/#\/schema\/person\/0126fafc83e42bece2acbfe92f7d0f4f"},"description":"Learn how to get started with Fastlane to streamline Android and iOS deployment for your Flutter app with ease and efficiency.","breadcrumb":{"@id":"https:\/\/dianapps.com\/blog\/how-to-start-with-fastlane-for-easy-android-and-ios-deployment\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/dianapps.com\/blog\/how-to-start-with-fastlane-for-easy-android-and-ios-deployment\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/dianapps.com\/blog\/how-to-start-with-fastlane-for-easy-android-and-ios-deployment\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/dianapps.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to Get Started with Fastlane for Easy Android and iOS Deployment?"}]},{"@type":"WebSite","@id":"https:\/\/dianapps.com\/blog\/#website","url":"https:\/\/dianapps.com\/blog\/","name":"Learn About Digital Transformation &amp; Development | DianApps Blog","description":"Dianapps","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/dianapps.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/dianapps.com\/blog\/#\/schema\/person\/0126fafc83e42bece2acbfe92f7d0f4f","name":"Vikash Soni","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/dianapps.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2022\/07\/cropped-vikash-96x96.png","contentUrl":"https:\/\/dianapps.com\/blog\/wp-content\/uploads\/2022\/07\/cropped-vikash-96x96.png","caption":"Vikash Soni"},"description":"Vikash Soni, the visionary CEO and Co-founder of DianApps. With his profound expertise in Android and iOS app development, he leads the team to deliver top-notch solutions to clients worldwide. Under his guidance, the company has achieved remarkable success, earning a reputation as a leading web and mobile app development company.","sameAs":["https:\/\/www.linkedin.com\/in\/vikash-soni-59726530\/"],"url":"https:\/\/dianapps.com\/blog\/author\/infodianapps-com\/"}]}},"_links":{"self":[{"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/posts\/12115","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/comments?post=12115"}],"version-history":[{"count":3,"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/posts\/12115\/revisions"}],"predecessor-version":[{"id":12121,"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/posts\/12115\/revisions\/12121"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/media\/12120"}],"wp:attachment":[{"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/media?parent=12115"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/categories?post=12115"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dianapps.com\/blog\/wp-json\/wp\/v2\/tags?post=12115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}