module FastlaneCore::Helper

rubocop:disable Metrics/ModuleLength

Public Class Methods

backticks(command, print: true) click to toggle source

Runs a given command using backticks (`) and prints them out using the UI.command method

# File lib/fastlane_core/helper.rb, line 16
def self.backticks(command, print: true)
  UI.command(command) if print
  result = `#{command}`
  UI.command_output(result) if print
  return result
end
buildlog_path() click to toggle source

Logs base directory

# File lib/fastlane_core/helper.rb, line 116
def self.buildlog_path
  return ENV["FL_BUILDLOG_PATH"] || "~/Library/Logs"
end
bundler?() click to toggle source

@return [boolean] true if executing with bundler (like 'bundle exec fastlane [action]')

# File lib/fastlane_core/helper.rb, line 34
def self.bundler?
  # Bundler environment variable
  ['BUNDLE_BIN_PATH', 'BUNDLE_GEMFILE'].each do |current|
    return true if ENV.key?(current)
  end
  return false
end
ci?() click to toggle source

@return [boolean] true if building in a known CI environment

# File lib/fastlane_core/helper.rb, line 65
def self.ci?
  # Check for Jenkins, Travis CI, ... environment variables
  ['JENKINS_HOME', 'JENKINS_URL', 'TRAVIS', 'CIRCLECI', 'CI', 'TEAMCITY_VERSION', 'GO_PIPELINE_NAME', 'bamboo_buildKey', 'GITLAB_CI', 'XCS'].each do |current|
    return true if ENV.key?(current)
  end
  return false
end
colors_disabled?() click to toggle source

Do we want to disable the colored output?

# File lib/fastlane_core/helper.rb, line 101
def self.colors_disabled?
  FastlaneCore::Env.truthy?("FASTLANE_DISABLE_COLORS")
end
contained_fastlane?() click to toggle source

Do we run from a bundled fastlane, which contains Ruby and OpenSSL? Usually this means the fastlane directory is ~/.fastlane/bin/ We set this value via the environment variable `FASTLANE_SELF_CONTAINED`

# File lib/fastlane_core/helper.rb, line 45
def self.contained_fastlane?
  ENV["FASTLANE_SELF_CONTAINED"].to_s == "true" && !self.homebrew?
end
fastlane_enabled?() click to toggle source
# File lib/fastlane_core/helper.rb, line 220
def self.fastlane_enabled?
  # This is called from the root context on the first start
  @enabled ||= (File.directory?("./fastlane") || File.directory?("./.fastlane"))
end
gem_path(gem_name) click to toggle source

DEPRECATED: Use the `ROOT` constant from the appropriate tool module instead e.g. File.join(Sigh::ROOT, 'lib', 'assets', 'resign.sh')

Path to the installed gem to load resources (e.g. resign.sh)

# File lib/fastlane_core/helper.rb, line 229
def self.gem_path(gem_name)
  UI.deprecated('`Helper.gem_path` is deprecated. Use the `ROOT` constant from the appropriate tool module instead.')

  if !Helper.is_test? and Gem::Specification.find_all_by_name(gem_name).any?
    return Gem::Specification.find_by_name(gem_name).gem_dir
  else
    return './'
  end
end
homebrew?() click to toggle source

returns true if fastlane was installed via Homebrew

# File lib/fastlane_core/helper.rb, line 55
def self.homebrew?
  ENV["FASTLANE_INSTALLED_VIA_HOMEBREW"].to_s == "true"
end
is_ci?() click to toggle source
# File lib/fastlane_core/helper.rb, line 92
def self.is_ci?
  ci?
end
is_mac?() click to toggle source
# File lib/fastlane_core/helper.rb, line 96
def self.is_mac?
  self.mac?
end
is_test?() click to toggle source

Use Helper.test? and Helper.ci? instead (legacy calls)

# File lib/fastlane_core/helper.rb, line 88
def self.is_test?
  self.test?
end
iterm?() click to toggle source

Does the user use iTerm?

# File lib/fastlane_core/helper.rb, line 111
def self.iterm?
  FastlaneCore::Env.truthy?("ITERM_SESSION_ID")
end
itms_path() click to toggle source

@return the full path to the iTMSTransporter executable

# File lib/fastlane_core/helper.rb, line 206
def self.itms_path
  return ENV["FASTLANE_ITUNES_TRANSPORTER_PATH"] if FastlaneCore::Env.truthy?("FASTLANE_ITUNES_TRANSPORTER_PATH")
  return '' unless self.is_mac? # so tests work on Linx too

  [
    "../Applications/Application Loader.app/Contents/MacOS/itms",
    "../Applications/Application Loader.app/Contents/itms"
  ].each do |path|
    result = File.expand_path(File.join(self.xcode_path, path))
    return result if File.exist?(result)
  end
  UI.user_error!("Could not find transporter at #{self.xcode_path}. Please make sure you set the correct path to your Xcode installation.")
end
keychain_path(name) click to toggle source
# File lib/fastlane_core/helper.rb, line 169
def self.keychain_path(name)
  # Existing code expects that a keychain name will be expanded into a default path to Libary/Keychains
  # in the user's home directory. However, this will not allow the user to pass an absolute path
  # for the keychain value
  #
  # So, if the passed value can't be resolved as a file in Library/Keychains, just use it as-is
  # as the keychain path.
  #
  # We need to expand each path because File.exist? won't handle directories including ~ properly
  #
  # We also try to append `-db` at the end of the file path, as with Sierra the default Keychain name
  # has changed for some users: https://github.com/fastlane/fastlane/issues/5649
  #

  # Remove the ".keychain" at the end of the name
  name.sub!(/\.keychain$/, "")

  possible_locations = [
    File.join(Dir.home, 'Library', 'Keychains', name),
    name
  ].map { |path| File.expand_path(path) }

  # Transforms ["thing"] to ["thing", "thing-db", "thing.keychain", "thing.keychain-db"]
  keychain_paths = []
  possible_locations.each do |location|
    keychain_paths << location
    keychain_paths << "#{location}-db"
    keychain_paths << "#{location}.keychain"
    keychain_paths << "#{location}.keychain-db"
  end

  keychain_path = keychain_paths.find { |path| File.exist?(path) }
  UI.user_error!("Could not locate the provided keychain. Tried:\n\t#{keychain_paths.join("\n\t")}") unless keychain_path
  keychain_path
end
linux?() click to toggle source
# File lib/fastlane_core/helper.rb, line 78
def self.linux?
  (/linux/ =~ RUBY_PLATFORM) != nil
end
log() click to toggle source

This method is deprecated, use the `UI` class github.com/fastlane/fastlane/blob/master/fastlane/docs/UI.md

# File lib/fastlane_core/helper.rb, line 9
def self.log
  UI.deprecated "Helper.log is deprecated. Use `UI` class instead"
  UI.current.log
end
mac?() click to toggle source

Is the currently running computer a Mac?

# File lib/fastlane_core/helper.rb, line 83
def self.mac?
  (/darwin/ =~ RUBY_PLATFORM) != nil
end
mac_app?() click to toggle source

returns true if fastlane was installed from the Fabric Mac app

# File lib/fastlane_core/helper.rb, line 50
def self.mac_app?
  ENV["FASTLANE_SELF_CONTAINED"].to_s == "false"
end
mac_stock_terminal?() click to toggle source

Does the user use the Mac stock terminal

# File lib/fastlane_core/helper.rb, line 106
def self.mac_stock_terminal?
  FastlaneCore::Env.truthy?("TERM_PROGRAM_VERSION")
end
rubygems?() click to toggle source

returns true if fastlane was installed via RubyGems

# File lib/fastlane_core/helper.rb, line 60
def self.rubygems?
  !self.bundler? && !self.contained_fastlane? && !self.homebrew? && !self.mac_app?
end
strip_ansi_colors(str) click to toggle source

removes ANSI colors from string

# File lib/fastlane_core/helper.rb, line 29
def self.strip_ansi_colors(str)
  str.gsub(/\e\[([;\d]+)?m/, '')
end
test?() click to toggle source

@return true if the currently running program is a unit test

# File lib/fastlane_core/helper.rb, line 24
def self.test?
  defined? SpecHelper
end
transporter_java_executable_path() click to toggle source
# File lib/fastlane_core/helper.rb, line 144
def self.transporter_java_executable_path
  return File.join(self.transporter_java_path, 'bin', 'java')
end
transporter_java_ext_dir() click to toggle source
# File lib/fastlane_core/helper.rb, line 148
def self.transporter_java_ext_dir
  return File.join(self.transporter_java_path, 'lib', 'ext')
end
transporter_java_jar_path() click to toggle source
# File lib/fastlane_core/helper.rb, line 152
def self.transporter_java_jar_path
  return File.join(self.itms_path, 'lib', 'itmstransporter-launcher.jar')
end
transporter_java_path() click to toggle source
# File lib/fastlane_core/helper.rb, line 160
def self.transporter_java_path
  return File.join(self.itms_path, 'java')
end
transporter_path() click to toggle source

@return the full path to the iTMSTransporter executable

# File lib/fastlane_core/helper.rb, line 165
def self.transporter_path
  return File.join(self.itms_path, 'bin', 'iTMSTransporter')
end
transporter_user_dir() click to toggle source
# File lib/fastlane_core/helper.rb, line 156
def self.transporter_user_dir
  return File.join(self.itms_path, 'bin')
end
windows?() click to toggle source
# File lib/fastlane_core/helper.rb, line 73
def self.windows?
  # taken from: http://stackoverflow.com/a/171011/1945875
  (/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM) != nil
end
xcode_path() click to toggle source

@return the full path to the Xcode developer tools of the currently

running system
# File lib/fastlane_core/helper.rb, line 125
def self.xcode_path
  return "" if self.is_test? and !self.is_mac?
  `xcode-select -p`.delete("\n") + "/"
end
xcode_version() click to toggle source

@return The version of the currently used Xcode installation (e.g. “7.0”)

# File lib/fastlane_core/helper.rb, line 131
def self.xcode_version
  return @xcode_version if @xcode_version

  begin
    output = `DEVELOPER_DIR='' "#{xcode_path}/usr/bin/xcodebuild" -version`
    @xcode_version = output.split("\n").first.split(' ')[1]
  rescue => ex
    UI.error(ex)
    UI.error("Error detecting currently used Xcode installation")
  end
  @xcode_version
end