Skip to content

Instantly share code, notes, and snippets.

@KevinGong2013
Forked from rodydavis/Fastfile
Created March 29, 2019 10:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save KevinGong2013/eed226a82bd127d81cf6248ff1125a38 to your computer and use it in GitHub Desktop.
Save KevinGong2013/eed226a82bd127d81cf6248ff1125a38 to your computer and use it in GitHub Desktop.
Top-level Fastfile for Flutter
# This file contains the fastlane.tools configuration
# You can find the documentation at https://docs.fastlane.tools
#
# For a list of all available actions, check out
#
# https://docs.fastlane.tools/actions
#
# For a list of all available plugins, check out
#
# https://docs.fastlane.tools/plugins/available-plugins
#
# Uncomment the line if you want fastlane to automatically update itself
update_fastlane(nightly: true)
# You can either generate the build number on commits or increment by 1
# version: 0.0.1+1 in pubspec.yaml
# Change to false if not setup for project level version and build number
# true: generated build number off of commits in Git Repo
# false: increments build number
# Android Lane Need to Install: https://github.com/Jems22/fastlane-plugin-increment_version_code
# To Change with |options|:
# bundle exec fastlane beta flutter_version:true
flutterVersion = false
app_name = "APP_NAME_HERE" #{app_name}
project_path = "PROJECT_PATH_HERE" #{project_path}
username = "APPLE_ID_HERE" #{username} // Apple ID
crashlytics_api_key = "CRASHLYTICS_API_KEY_HERE"
crashlytics_build_secret = "CRASHLYTICS_BUILD_SECRET_HERE"
slack_url = "SLACK_WEBHOOK_INCOMING_URL_HERE"
build_number = 0
changelog = ""
# At the Project root you can run:
# 1. fastlane beta
# 2. fastlane release
desc "Deploy a new version to the Google Play Beta and TestFlight"
lane :beta do |options|
if options[:flutter_version]
flutterVersion = true
end
self.runner.current_platform = :android
beta
self.runner.current_platform = :ios
beta
end
desc "Deploy a new version to the Google Play and the App Store"
lane :release do |options|
if options[:flutter_version]
flutterVersion = true
end
ensure_git_status_clean
changelog = prompt(
text: "Changelog: ",
multi_line_end_keyword: "END"
)
self.runner.current_platform = :android
release
self.runner.current_platform = :ios
release
end
lane :build do |options|
if options[:flutter_version]
flutterVersion = true
end
self.runner.current_platform = :android
prepare
self.runner.current_platform = :ios
prepare
end
# default_platform(:android)
platform :android do
desc "Add Badge to Launcher Icon"
lane :beta_badge do |options|
Dir.chdir "#{project_path}/android" do
if options[:hide]
add_badge(no_badge: true, glob: "/android/app/src/main/res/mipmap-*/ic_launcher.png",)
else
add_badge(dark: true, glob: "/android/app/src/main/res/mipmap-*/ic_launcher.png",)
end
end
end
desc "Prepare and archive app"
lane :prepare do |options|
Dir.chdir ".." do
sh("flutter", "packages", "get")
sh("flutter", "clean")
if flutterVersion == true
build_number = number_of_commits(all: true)
sh("flutter", "build", "apk", "--build-number=#{build_number}")
else # Just Increment Build Number
Dir.chdir "#{project_path}/android" do
build_number = increment_version_code
end
sh("flutter", "build", "apk")
end
end
# beta_badge(hide: options[:release])
end
desc "Deploy a new version to the Google Play Beta"
lane :beta do
prepare(release: false)
# crashlytics(
# # crashlytics_path: "#{project_path}/ios/Pods/Crashlytics/", # path to your Crashlytics submit binary.
# api_token: crashlytics_api_key,
# build_secret: crashlytics_build_secret,
# apk_path: "#{project_path}/build/app/outputs/apk/release/app-release.apk",
# notes: changelog_from_git_commits,
# )
upload_to_play_store(
track: 'beta',
apk: "#{project_path}/build/app/outputs/apk/release/app-release.apk",
skip_upload_screenshots: true,
skip_upload_images: true)
# slack(
# message: "#{app_name} (#{build_number}): Android sent to beta",
# slack_url: slack_url,
# )
add_git_tag(build_number: build_number)
end
desc "Deploy a new version to the Google Play Production"
lane :release do
prepare(release: true)
upload_to_play_store(
track: 'production',
apk: "#{project_path}/build/app/outputs/apk/release/app-release.apk",
skip_upload_screenshots: true,
skip_upload_images: true,
)
# slack(
# message: "#{app_name} (#{build_number}): Android sent to production",
# slack_url: slack_url,
# )
add_git_tag(build_number: build_number)
end
end
platform :ios do
desc "Capture Screenshots"
lane :screenshots do
# sh "cd /Users/Shared/CrossMedia/Projects/MyUnifyMobile && flutter build ios"
#SNAPSHOT_FORCE_DELETE=1 fastlane snapshot reset_simulators && fastlane snapshot --number_of_retries 3
# reset_simulators
# sh "xcrun simctl erase all"
capture_ios_screenshots(
workspace: "#{project_path}/ios/Runner.xcworkspace",
erase_simulator: true,
concurrent_simulators: false,
number_of_retries: 1
)
# frame_screenshots(white: true)
upload_to_app_store
# slack(
# message: "#{app_name} (#{build_number}): Successfully captured new screenshots for iOS",
# slack_url: slack_url,
# )
end
desc "Add Badge to App Icon"
lane :beta_badge do |options|
Dir.chdir "#{project_path}/ios" do
if options[:hide]
add_badge(no_badge: true)
# sh 'git checkout -- <path>/Assets.xcassets/'
else
add_badge(dark: true)
end
end
end
desc "Prepare and archive app"
lane :prepare do |options|
Dir.chdir "#{project_path}/ios" do
sh('xcodebuild -sdk "${TARGET_SDK}" -xcconfig "${CONFIG_FILE_PATH}" -configuration Release clean')
end
Dir.chdir ".." do
sh("flutter", "packages", "get")
sh("flutter", "clean")
if flutterVersion == true
build_number = number_of_commits(all: true)
sh("flutter", "build", "ios", "--build-number=#{build_number}")
else # Just Increment Build Number
Dir.chdir "#{project_path}/ios" do
build_number = increment_build_number(xcodeproj: "#{project_path}/ios/Runner.xcodeproj")
end
sh("flutter", "build", "ios")
end
end
# beta_badge(hide: options[:release])
build_ios_app(workspace: "#{project_path}/ios/Runner.xcworkspace", scheme: "Runner")
end
desc "Push a new beta build to TestFlight"
lane :beta do
prepare(release: false)
# crashlytics(
# crashlytics_path: "#{project_path}/ios/Pods/Crashlytics/",
# api_token: crashlytics_api_key,
# build_secret: crashlytics_build_secret,
# ipa_path: "#{project_path}/Runner.ipa",
# notes: changelog_from_git_commits,
# )
upload_to_testflight(
skip_waiting_for_build_processing: true,
ipa: "#{project_path}/Runner.ipa",
username: username,
changelog: changelog_from_git_commits,
)
# slack(
# message: "#{app_name}: iOS sent to beta",
# slack_url: slack_url,
# )
add_git_tag(build_number: build_number)
end
desc "Push a new release build to the App Store"
lane :release do
prepare(release: true)
upload_to_app_store(
submit_for_review: true,
automatic_release: true,
skip_screenshots: true,
force: true,
ipa: "#{project_path}/Runner.ipa",
username: username,
)
# slack(
# message: "#{app_name} (#{build_number}): iOS sent to production",
# slack_url: slack_url,
# )
add_git_tag(build_number: build_number)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment