<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/how-to-automate-flutter-releases-with-fastlane-and-github-actions-for-firebase-app-distribution-goo-cy1jtlc29" -->

---
title: How to Automate Flutter Releases with Fastlane and...
description: A comprehensive guide to automating Flutter app releases using Fastlane and GitHub Actions. Covers the full pipeline from credential setup to distribution:...
canonical: https://daily.dev/posts/how-to-automate-flutter-releases-with-fastlane-and-github-actions-for-firebase-app-distribution-goo-cy1jtlc29
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: How to Automate Flutter Releases with Fastlane and GitHub Actions for Firebase App Distribution, Google Play, TestFlight, and App Store Connect | daily.dev
og:description: A comprehensive guide to automating Flutter app releases using Fastlane and GitHub Actions. Covers the full pipeline from credential setup to distribution:...
og:url: https://daily.dev/posts/how-to-automate-flutter-releases-with-fastlane-and-github-actions-for-firebase-app-distribution-goo-cy1jtlc29
og:image: https://api.daily.dev/og/posts/CY1jtLC29.png
og:image:alt: How to Automate Flutter Releases with Fastlane and GitHub Actions for Firebase App Distribution, Google Play, TestFlight, and App Store Connect
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# How to Automate Flutter Releases with Fastlane and GitHub Actions for Firebase App Distribution, Google Play, TestFlight, and App Store Connect

**[freeCodeCamp](https://daily.dev/sources/freecodecamp)** · 35 min read · 0 upvotes · 0 comments

## Summary

A comprehensive guide to automating Flutter app releases using Fastlane and GitHub Actions. Covers the full pipeline from credential setup to distribution: encoding Android keystores and Apple .p8 keys as Base64 GitHub Secrets, configuring Fastlane lanes for Android (Firebase App Distribution, Google Play) and iOS (Firebase, TestFlight, App Store), and writing YAML workflows that branch on dev vs prod pushes. Includes Fastlane Match for iOS code signing, JVM memory tuning for Gradle on GitHub runners, build number strategies using GITHUB_RUN_NUMBER, and a detailed common-mistakes section covering issues like trailing newlines in Base64 encoding, wrong distribution types for Firebase iOS, and missing Play Console permissions.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://www.freecodecamp.org/news/how-to-automate-flutter-releases-with-fastlane-and-github-actions>

## Questions this post answers

### Why does my Fastlane Firebase App Distribution lane fail with an undefined method error?

The firebase_app_distribution action is not part of Fastlane's core installation; it comes from the fastlane-plugin-firebase_app_distribution gem, which must be declared in the Pluginfile. Without adding gem 'fastlane-plugin-firebase_app_distribution' to android/fastlane/Pluginfile or ios/fastlane/Pluginfile, calling firebase_app_distribution in a lane throws an undefined method error.

_Automating app distribution pitfalls like this are the kind of gotcha daily.dev keeps developers ahead of._

### Why does my iOS Fastlane CI build hang indefinitely during code signing?

Omitting setup_ci from the before_all block in the iOS Fastfile causes macOS to wait for interactive keychain access approval that never arrives in a headless CI runner, which looks like a timeout with a misleading error. Always include before_all do setup_ci end in any iOS Fastfile used in continuous integration to configure a temporary keychain and disable signing prompts.

_Debugging CI signing hangs is easier when daily.dev surfaces fixes like this for your Flutter pipeline._

### Why does Firebase App Distribution reject my iOS IPA build even though TestFlight accepted it?

Firebase App Distribution for iOS requires an ad-hoc distribution certificate, while TestFlight requires an App Store certificate; uploading an App Store-signed IPA to Firebase fails because ad-hoc builds are meant for direct device distribution outside the App Store. Fastlane Match must run with type: adhoc and build_app must use export_method: ad-hoc for the Firebase lane, versus type: appstore for the TestFlight lane.

_Getting signing types right across distribution targets is exactly the kind of detail daily.dev helps developers track._

## Similar posts on daily.dev

- [Simplifying Flutter App Releases with Fastlane: A Complete Guide](https://daily.dev/posts/simplifying-flutter-app-releases-with-fastlane-a-complete-guide-we8pm9qgz) · Medium · 0 upvotes · 0 comments
- [How to Build a Production-Ready Flutter CI/CD Pipeline with GitHub Actions: Quality Gates, Environments, and Store Deployment](https://daily.dev/posts/how-to-build-a-production-ready-flutter-ci-cd-pipeline-with-github-actions-quality-gates-environme-rpmoo0tv7) · freeCodeCamp · 1 upvotes · 0 comments
- [Medium](https://daily.dev/posts/medium-sntfm8mrk) · Medium · 1 upvotes · 0 comments
- [From Hobbyist to Pro: Automating Release Confidence with CalVer & Fastlane](https://daily.dev/posts/from-hobbyist-to-pro-automating-release-confidence-with-calver-fastlane-noflv3w4z) · ProAndroidDev · 0 upvotes · 0 comments
- [How to Build a Complete Flutter CI/CD Pipeline with Codemagic: From PR Quality Gates to Automated Store Releases](https://daily.dev/posts/how-to-build-a-complete-flutter-ci-cd-pipeline-with-codemagic-from-pr-quality-gates-to-automated-st-tjlcxj7yb) · freeCodeCamp · 2 upvotes · 0 comments

---

Tags: [#cicd](https://daily.dev/tags/cicd), [#flutter](https://daily.dev/tags/flutter), [#github-actions](https://daily.dev/tags/github-actions)

[View this post on daily.dev](https://daily.dev/posts/how-to-automate-flutter-releases-with-fastlane-and-github-actions-for-firebase-app-distribution-goo-cy1jtlc29)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"How to Automate Flutter Releases with Fastlane and GitHub Actions for Firebase App Distribution, Google Play, TestFlight, and App Store Connect","url":"https://daily.dev/posts/how-to-automate-flutter-releases-with-fastlane-and-github-actions-for-firebase-app-distribution-goo-cy1jtlc29","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/how-to-automate-flutter-releases-with-fastlane-and-github-actions-for-firebase-app-distribution-goo-cy1jtlc29"},"datePublished":"2026-08-11T21:43:09.018Z","dateModified":"2026-09-14T07:05:08.460Z","description":"A comprehensive guide to automating Flutter app releases using Fastlane and GitHub Actions. Covers the full pipeline from credential setup to distribution:...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/3f6545d34f948d6e5228da1951870686?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/3f6545d34f948d6e5228da1951870686?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"freeCodeCamp","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"freeCodeCamp","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1628412854/logos/freecodecamp","url":"https://daily.dev/sources/freecodecamp"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/how-to-automate-flutter-releases-with-fastlane-and-github-actions-for-firebase-app-distribution-goo-cy1jtlc29","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"cicd,flutter,github-actions","timeRequired":"PT35M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"freeCodeCamp","item":"https://daily.dev/sources/freecodecamp"},{"@type":"ListItem","position":3,"name":"How to Automate Flutter Releases with Fastlane and GitHub Actions for Firebase App Distribution, Google Play, TestFlight, and App Store Connect"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/how-to-automate-flutter-releases-with-fastlane-and-github-actions-for-firebase-app-distribution-goo-cy1jtlc29#faq","mainEntity":[{"@type":"Question","name":"Why does my Fastlane Firebase App Distribution lane fail with an undefined method error?","acceptedAnswer":{"@type":"Answer","text":"The firebase_app_distribution action is not part of Fastlane's core installation; it comes from the fastlane-plugin-firebase_app_distribution gem, which must be declared in the Pluginfile. Without adding gem 'fastlane-plugin-firebase_app_distribution' to android/fastlane/Pluginfile or ios/fastlane/Pluginfile, calling firebase_app_distribution in a lane throws an undefined method error. Automating app distribution pitfalls like this are the kind of gotcha daily.dev keeps developers ahead of."}},{"@type":"Question","name":"Why does my iOS Fastlane CI build hang indefinitely during code signing?","acceptedAnswer":{"@type":"Answer","text":"Omitting setup_ci from the before_all block in the iOS Fastfile causes macOS to wait for interactive keychain access approval that never arrives in a headless CI runner, which looks like a timeout with a misleading error. Always include before_all do setup_ci end in any iOS Fastfile used in continuous integration to configure a temporary keychain and disable signing prompts. Debugging CI signing hangs is easier when daily.dev surfaces fixes like this for your Flutter pipeline."}},{"@type":"Question","name":"Why does Firebase App Distribution reject my iOS IPA build even though TestFlight accepted it?","acceptedAnswer":{"@type":"Answer","text":"Firebase App Distribution for iOS requires an ad-hoc distribution certificate, while TestFlight requires an App Store certificate; uploading an App Store-signed IPA to Firebase fails because ad-hoc builds are meant for direct device distribution outside the App Store. Fastlane Match must run with type: adhoc and build_app must use export_method: ad-hoc for the Firebase lane, versus type: appstore for the TestFlight lane. Getting signing types right across distribution targets is exactly the kind of detail daily.dev helps developers track."}}]}
```

