class XcodeArchiveCache::BuildSettings::Extractor

Constants

CONFIGURATION_KEY
CORRESPONDING_SIMULATOR_PLATFORM_NAME_KEY
EFFECTIVE_PLATFORM_NAME_KEY
PLATFORM_NAME_KEY
TARGET_NAME_KEY

Attributes

filter[R]

@return [Filter]

parser[R]

@return [Parser]

Public Class Methods

new() click to toggle source
# File lib/build_settings/extractor.rb, line 5
def initialize
  @parser = Parser.new
  @filter = Filter.new
end

Public Instance Methods

extract_per_target(build_settings, fix_simulator) click to toggle source

@param [String] build_settings

Raw `xcodebuild -alltargets -showBuildSettings` output

@return [Hash{String => Container}]

Target build settings keyed by target name
# File lib/build_settings/extractor.rb, line 16
def extract_per_target(build_settings, fix_simulator)
  per_target_settings = build_settings.split("Build settings for action")
  result = Hash.new

  per_target_settings.each do |target_settings|
    parsed_settings = parse(target_settings)
    target_name = get_target_name(parsed_settings)
    next unless target_name

    replace_platform_with_simulator(parsed_settings) if fix_simulator
    filtered_settings = filter.filter(parsed_settings)
    result[target_name] = Container.new(parsed_settings, filtered_settings)
  end

  result
end

Private Instance Methods

get_target_name(parsed_settings) click to toggle source

@param [Hash{String => String}] parsed_settings

@return [String]

Name of target that settings apply to
# File lib/build_settings/extractor.rb, line 97
def get_target_name(parsed_settings)
  parsed_settings[TARGET_NAME_KEY]
end
parse(settings) click to toggle source

@param [String] settings

@return [Hash{String => String}]

Setting values keyed by setting names
# File lib/build_settings/extractor.rb, line 48
def parse(settings)
  # remove leading spaces in each line, then split to lines
  lines = settings.strip.gsub(/\n\s{2,}/, "\n").split("\n")
  # drop "Build settings for action ..."
  lines.drop(1)

  result = Hash.new

  lines.each do |line|
    name = parser.parse_name(line)
    next unless name

    value = parser.parse_value(line)
    next unless value

    result[name] = value
  end

  result
end
replace_platform_with_simulator(settings) click to toggle source

@param [Hash{String => String}] settings

# File lib/build_settings/extractor.rb, line 72
def replace_platform_with_simulator(settings)
  original_platform = settings[EFFECTIVE_PLATFORM_NAME_KEY]
  simulator_platform = settings[CORRESPONDING_SIMULATOR_PLATFORM_NAME_KEY]
  settings[EFFECTIVE_PLATFORM_NAME_KEY] = "-#{simulator_platform}"
  settings[PLATFORM_NAME_KEY] = simulator_platform

  configuration = settings[CONFIGURATION_KEY]
  path_regexp = Regexp.new("#{configuration}#{original_platform}")
  simulator_path = "#{configuration}-#{simulator_platform}"
  settings.each do |key, value|
    settings[key] = value.gsub(path_regexp, simulator_path)
  end
end