Created
June 3, 2019 15:34
-
-
Save Valpertui/e50559a77e23827b1c44a157d45e7ce8 to your computer and use it in GitHub Desktop.
Fastfile with different schemes and configs
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
fastlane_require 'xcodeproj' | |
update_fastlane | |
default_platform(:ios) | |
platform :ios do | |
@xcodeproj = "ProjectName.xcodeproj" | |
@xcworkspace = "WorkspaceName.xcworkspace" | |
@target = "TargetName" | |
@version_number = get_version_number(xcodeproj: @xcodeproj, target: @target) | |
@default_production_release_config = "AppStore" | |
@default_production_scheme = "AppStore" | |
@default_beta_release_config = "Beta" | |
@default_beta_scheme = "Beta" | |
@default_staging_release_config = "Staging Release" | |
@default_staging_scheme = "Staging" | |
@default_dev_release_config = "Dev Release" | |
@default_dev_scheme = "Dev" | |
before_all do |lane, options| | |
print lane | |
if lane == :tests | |
next | |
end | |
if git_branch == "master" | |
UI.user_error!("Fastlane should never run directly on master, please create a release branch") | |
next | |
end | |
ensure_git_status_clean | |
if lane == :release | |
xcode_select "/Applications/Xcode.app" | |
ensure_xcode_version | |
end | |
clear_derived_data | |
cocoapods | |
end | |
def tag_name(build_type:, version_number: get_version_number, build_number: get_build_number) | |
"#{build_type}/#{version_number}/#{build_number}" | |
end | |
desc "Push a new production beta build to TestFlight" | |
lane :beta do |options| | |
testflight_beta(scheme: @default_production_scheme, configuration: @default_production_release_config) | |
end | |
desc "Push a new private beta build to TestFlight" | |
lane :private_beta do |options| | |
testflight_beta(scheme: @default_beta_scheme, configuration: @default_beta_release_config) | |
end | |
desc "Push a new staging beta build to TestFlight" | |
lane :staging do |options| | |
testflight_beta(scheme: @default_staging_scheme, configuration: @default_staging_release_config) | |
end | |
desc "Push a new dev beta build to TestFlight" | |
lane :dev do |options| | |
testflight_beta(scheme: @default_dev_scheme, configuration: @default_dev_release_config) | |
end | |
private_lane :testflight_beta do |options| | |
configuration = options[:configuration] | |
remote_build_number = 0 | |
begin | |
remote_build_number = latest_testflight_build_number(version: @version_number) | |
rescue | |
end | |
bump(remote_build_number: remote_build_number) | |
build_appstore_app(scheme: options[:scheme], configuration: configuration) | |
upload_to_testflight(skip_waiting_for_build_processing: true) | |
upload_symbols(configuration: configuration) | |
validate_upload | |
end | |
lane :release do | |
configuration = @default_production_release_config | |
bump(remote_build_number: app_store_build_number(version: @version_number)) | |
build_appstore_app(scheme: @default_production_scheme, configuration: configuration) | |
add_git_tag(tag: "#{tag_name(build_type: "release", version_number: version_number)}") | |
upload_to_app_store | |
upload_symbols(configuration: configuration) | |
validate_upload | |
end | |
# Specific to my project | |
def upload_symbols(configuration:) | |
project = Xcodeproj::Project.open("../#{@xcodeproj}") | |
plistPath = "./XXX/FirebasePlists/" + project.targets.find { |target| target.name == @target }.build_configurations.find { |config| config.name == configuration }.build_settings['FIREBASE_PLIST_NAME'] + ".plist" | |
upload_symbols_to_crashlytics(dsym_path: "./XXX.app.dSYM.zip", gsp_path: plistPath) | |
end | |
def validate_upload | |
push_to_git_remote | |
end | |
def bump(remote_build_number:) | |
local_build_number = get_build_number(xcodeproj: @xcodeproj) | |
increment_build_number(xcodeproj: @xcodeproj, build_number: [remote_build_number.to_i, local_build_number.to_i].max + 1) | |
commit_version_bump(xcodeproj: @xcodeproj, force: true) | |
end | |
def build_appstore_app(scheme: @default_production_scheme, configuration: @default_production_release_config) | |
build_app(workspace: @xcworkspace, scheme: scheme, configuration: configuration, include_bitcode: true, include_symbols: true, export_xcargs: "-allowProvisioningUpdates") | |
end | |
lane :tests do |options| | |
run_all_tests = options[:all] || options == nil | |
run_logic_tests = run_all_tests || options[:logic] | |
run_release_build = run_all_tests || options[:release_build] | |
run_debug_build = run_all_tests || options[:debug_build] | |
if run_logic_tests | |
run_tests(workspace: @xcworkspace, scheme: "LogicTests") | |
end | |
if run_release_build | |
run_tests(workspace: @xcworkspace, scheme: "UITestsRelease") | |
end | |
if run_debug_build | |
run_tests(workspace: @xcworkspace, scheme: "UITestsDebug") | |
end | |
end | |
error do |lane, options| | |
if lane == :tests | |
next | |
end | |
reset_git_repo(skip_clean: true) | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment