-
-
Save WahdanZ/a0aad03567328c42a729bb5d1f3dc4db to your computer and use it in GitHub Desktop.
CI/CD In Flutter using GitLab and Fastlane Tutorial
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Automatically update fastlane | |
update_fastlane | |
default_platform(:ios) | |
# Default temporary keychain password and name, if not included from environment | |
TEMP_KEYCHAIN_NAME_DEFAULT = "fastlane_flutter" | |
TEMP_KEYCHAN_PASSWORD_DEFAULT = "temppassword" | |
# Remove the temporary keychain, if it exists | |
def delete_temp_keychain(name) | |
delete_keychain( | |
name: name | |
) if File.exist? File.expand_path("~/Library/Keychains/#{name}-db") | |
end | |
# Create the temporary keychain with name and password | |
def create_temp_keychain(name, password) | |
create_keychain( | |
name: name, | |
password: password, | |
unlock: false, | |
timeout: false | |
) | |
end | |
# Ensure we have a fresh, empty temporary keychain | |
def ensure_temp_keychain(name, password) | |
delete_temp_keychain(name) | |
create_temp_keychain(name, password) | |
end | |
platform :ios do | |
desc "Build & sign iOS app" | |
lane :build_ios do |options| | |
disable_automatic_code_signing( | |
path: "./Runner.xcodeproj", | |
team_id: CredentialsManager::AppfileConfig.try_fetch_value(:team_id), | |
profile_name: "match AppStore #{CredentialsManager::AppfileConfig.try_fetch_value(:app_identifier)}", | |
code_sign_identity: "iPhone Distribution" | |
) | |
keychain_name = ENV['TEMP_KEYCHAIN_NAME'] || TEMP_KEYCHAIN_NAME_DEFAULT | |
keychain_password = ENV['TEMP_KEYCHAIN_PASSWORD'] || TEMP_KEYCHAN_PASSWORD_DEFAULT | |
ensure_temp_keychain(keychain_name, keychain_password) | |
match( | |
app_identifier: CredentialsManager::AppfileConfig.try_fetch_value(:app_identifier), | |
type: "appstore", | |
readonly: is_ci, | |
keychain_name: keychain_name, | |
keychain_password: keychain_password | |
) | |
sh "./flutter_test.sh" | |
sh "./flutter_build.sh --clean" | |
build_ios_app( | |
export_options: { | |
method: "app-store" | |
} | |
) | |
delete_temp_keychain(keychain_name) | |
end | |
desc "Upload iOS app to app store" | |
lane :deploy_ios do |options| | |
# Upload to test flight or AppStore depending on caller parameters | |
if options[:testflight] | |
upload_to_testflight( | |
skip_submission: true, | |
ipa: "./Runner.ipa" | |
) | |
else | |
deliver( | |
skip_metadata: false, | |
skip_screenshots: true, | |
submit_for_review: true, | |
force: true, | |
ipa: "./Runner.ipa" | |
) | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment