module XcTools::XcodeBuild
Constants
- Error
- Info
- NilOutputError
Public Class Methods
info(*args)
click to toggle source
# File lib/xctools/xcode_build.rb, line 23 def self.info(*args) output = execute_xcodebuild('-list', *args) info = parse_info_output(output) Info.new(info) end
parse_info_output(output)
click to toggle source
# File lib/xctools/xcode_build.rb, line 29 def self.parse_info_output(output) lines = output.split(/\n/) project_name = parse_info_project_name(lines.first) info, _ = lines.drop(1).reduce([{}, nil]) do |(info, group), line| parse_info_line(line, info, group) end info.each do |_, values| values.delete('') values.uniq! end info.merge(project: project_name) end
parse_info_project_name(line)
click to toggle source
# File lib/xctools/xcode_build.rb, line 46 def self.parse_info_project_name(line) $1 if line =~ /\"(.+)\"\:/ end
parse_settings_output(output)
click to toggle source
# File lib/xctools/xcode_build.rb, line 68 def self.parse_settings_output(output) lines = output.split(/\n/) lines.reduce([{}, nil]) do |(settings, target), line| parse_settings_line(line, settings, target) end.first end
parse_xcode_version(output)
click to toggle source
# File lib/xctools/xcode_build.rb, line 95 def self.parse_xcode_version(output) $1 if output =~ /([\d+\.?]+)/ end
settings(*args)
click to toggle source
# File lib/xctools/xcode_build.rb, line 62 def self.settings(*args) output = execute_xcodebuild('-showBuildSettings', *args) settings = parse_settings_output(output) Settings.new(settings) end
version()
click to toggle source
# File lib/xctools/xcode_build.rb, line 90 def self.version output = `xcodebuild -version` parse_xcode_version(output) end
Private Class Methods
args_from_options(options = {})
click to toggle source
# File lib/xctools/xcode_build.rb, line 110 def self.args_from_options(options = {}) options .reject { |_, value| value.nil? } .map { |key, value| "-#{key} '#{value}'" } end
execute_xcodebuild(*args)
click to toggle source
# File lib/xctools/xcode_build.rb, line 99 def self.execute_xcodebuild(*args) options = args.last.is_a?(Hash) ? args.pop : {} cmd_args = (args + args_from_options(options)).join(' ') output = `xcodebuild #{cmd_args} 2>&1` fail Error, $1 if output =~ /^xcodebuild\: error\: (.+)$/ fail NilOutputError unless output =~ /\S/ output end
parse_info_line(line, info, group)
click to toggle source
# File lib/xctools/xcode_build.rb, line 50 def self.parse_info_line(line, info, group) if line =~ /\:$/ group = line.strip[0...-1].downcase.gsub(/\s+/, '_') info[group] = [] else info[group] << line.strip unless group.nil? || line =~ /\.$/ end [info, group] end
parse_settings_line(line, settings, target)
click to toggle source
# File lib/xctools/xcode_build.rb, line 76 def self.parse_settings_line(line, settings, target) case line when /Build settings for action build and target \"?([^":]+)/ target = $1 settings[target] = {} else key, value = line.split(/\=/).map(&:strip) settings[target][key] = value if target end [settings, target] end