Class: Thrust::XcodeTools

Inherits:
Object
  • Object
show all
Defined in:
lib/thrust/xcode_tools.rb

Constant Summary collapse

ProvisioningProfileNotFound =
Class.new(StandardError)
ProvisioningProfileNotEmbedded =
Class.new(StandardError)

Instance Method Summary collapse

Constructor Details

#initialize(thrust_executor, out, build_configuration, build_directory, options = {}) ⇒ XcodeTools



6
7
8
9
10
11
12
13
14
15
# File 'lib/thrust/xcode_tools.rb', line 6

def initialize(thrust_executor, out, build_configuration, build_directory, options = {})
  @thrust_executor = thrust_executor
  @out = out
  @git = Thrust::Git.new(@out, @thrust_executor)
  @build_configuration = build_configuration
  @build_directory = build_directory
  @project_name = options[:project_name]
  @workspace_name = options[:workspace_name]
  raise "project_name OR workspace_name required" unless @project_name.nil? ^ @workspace_name.nil?
end

Instance Method Details

#build_configuration_directoryObject



26
27
28
# File 'lib/thrust/xcode_tools.rb', line 26

def build_configuration_directory
  "#{@build_directory}/#{@build_configuration}-iphoneos"
end

#build_scheme(scheme, build_sdk, clean = false) ⇒ Object



35
36
37
38
# File 'lib/thrust/xcode_tools.rb', line 35

def build_scheme(scheme, build_sdk, clean = false)
  @out.puts 'Building...'
  build("-scheme \"#{scheme}\"", build_sdk, clean)
end

#build_target(target, build_sdk, clean = false) ⇒ Object



40
41
42
43
# File 'lib/thrust/xcode_tools.rb', line 40

def build_target(target, build_sdk, clean = false)
  @out.puts 'Building...'
  build("-target \"#{target}\"", build_sdk, clean)
end

#clean_buildObject



30
31
32
33
# File 'lib/thrust/xcode_tools.rb', line 30

def clean_build
  @out.puts 'Cleaning...'
  FileUtils.rm_rf(@build_directory)
end

#cleanly_create_ipa(target, app_name, signing_identity, provision_search_query = nil) ⇒ Object



17
18
19
20
21
22
23
24
# File 'lib/thrust/xcode_tools.rb', line 17

def cleanly_create_ipa(target, app_name, signing_identity, provision_search_query = nil)
  kill_simulator
  build_target(target, 'iphoneos', true)
  ipa_name = create_ipa(app_name, signing_identity, provision_search_query)
  verify_provision(app_name, provision_search_query)

  return ipa_name
end

#find_executable_name(scheme) ⇒ Object



69
70
71
72
73
# File 'lib/thrust/xcode_tools.rb', line 69

def find_executable_name(scheme)
  build_settings = @thrust_executor.capture_output_from_system("xcodebuild -scheme \"#{scheme}\" -showBuildSettings")
  matches = build_settings.match(/EXECUTABLE_NAME = (.*)$/)
  matches.captures.first
end

#kill_simulatorObject



62
63
64
65
66
67
# File 'lib/thrust/xcode_tools.rb', line 62

def kill_simulator
  @out.puts('Killing simulator...')
  @thrust_executor.system %q[killall -m -KILL "gdb"]
  @thrust_executor.system %q[killall -m -KILL "otest"]
  @thrust_executor.system %q[killall -m -KILL "iOS Simulator"]
end

#test(scheme, build_configuration, os_version, device_name, timeout, build_dir) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/thrust/xcode_tools.rb', line 45

def test(scheme, build_configuration, os_version, device_name, timeout, build_dir)
  destination = "OS=#{os_version},name=#{device_name}"
  timeout ||= "30"

  cmd = [
      "xcodebuild",
      "test",
      "-scheme '#{scheme}'",
      "-configuration '#{build_configuration}'",
      "-destination '#{destination}'",
      "-destination-timeout '#{timeout}'",
      "SYMROOT='#{build_dir}'"
  ].join(' ')

  @thrust_executor.check_command_for_failure(cmd)
end