diff --git a/lib/fastlane_core/project.rb b/lib/fastlane_core/project.rb index f9bd9f218a2..4b8c35c0ea0 100644 --- a/lib/fastlane_core/project.rb +++ b/lib/fastlane_core/project.rb @@ -80,6 +80,14 @@ def workspace? self.is_workspace end + def project_name + if is_workspace + return File.basename(options[:workspace], ".xcworkspace") + else + return File.basename(options[:project], ".xcodeproj") + end + end + # Get all available schemes in an array def schemes parsed_info.schemes @@ -109,15 +117,16 @@ def select_scheme(preferred_to_include: nil) if preferred_to_include and preferred.count == 1 options[:scheme] = preferred.last + elsif automated_scheme_selection? && schemes.include?(project_name) + Helper.log.info "Using scheme matching project name (#{project_name}).".yellow + options[:scheme] = project_name + elsif Helper.is_ci? + Helper.log.error "Multiple schemes found but you haven't specified one.".red + Helper.log.error "Since this is a CI, please pass one using the `scheme` option".red + raise "Multiple schemes found".red else - if Helper.is_ci? - Helper.log.error "Multiple schemes found but you haven't specified one.".red - Helper.log.error "Since this is a CI, please pass one using the `scheme` option".red - raise "Multiple schemes found".red - else - puts "Select Scheme: " - options[:scheme] = choose(*(schemes)) - end + puts "Select Scheme: " + options[:scheme] = choose(*(schemes)) end else Helper.log.error "Couldn't find any schemes in this project, make sure that the scheme is shared if you are using a workspace".red @@ -290,5 +299,11 @@ def parsed_info end @parsed_info end + + # If scheme not specified, do we want the scheme + # matching project name? + def automated_scheme_selection? + !!ENV["AUTOMATED_SCHEME_SELECTION"] + end end end diff --git a/spec/project_spec.rb b/spec/project_spec.rb index 95acf90c851..6b2d413549b 100644 --- a/spec/project_spec.rb +++ b/spec/project_spec.rb @@ -20,6 +20,10 @@ expect(@project.is_workspace).to eq(false) end + it "#project_name" do + expect(@project.project_name).to eq("Example") + end + it "#schemes returns all available schemes" do expect(@project.schemes).to eq(["Example"]) end