Class: XcodeUtil

Inherits:
Object
  • Object
show all
Defined in:
lib/JenkinsUtil/xcode_util.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeXcodeUtil

Returns a new instance of XcodeUtil.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/JenkinsUtil/xcode_util.rb', line 7

def initialize
  @xcodebuild_version_major = nil

  @default_xcodebuild_path = '/usr/bin/xcodebuild'
  @ios_simulator_process_name = 'Simulator'

  #xcodebuild flags
  @xcodebuild_version_flag = '-version'

  unless File.exist?(@default_xcodebuild_path)
    LoggerUtil.log.fatal("xcodebuild not found: #{@default_xcodebuild_path}")
    abort
  end

  get_version
end

Class Method Details

.get_project_bundle_identifier(project_path, target_name, build_configuration_name) ⇒ Object



73
74
75
76
77
# File 'lib/JenkinsUtil/xcode_util.rb', line 73

def self.get_project_bundle_identifier(project_path, target_name, build_configuration_name)
  self.with_project_build_configuration(project_path, target_name, build_configuration_name) do |project, build_configuration|
    return build_configuration.build_settings['PRODUCT_BUNDLE_IDENTIFIER']
  end
end

.get_project_bundle_version(project_path, target_name, build_configuration_name) ⇒ Object



52
53
54
55
56
57
58
59
60
# File 'lib/JenkinsUtil/xcode_util.rb', line 52

def self.get_project_bundle_version(project_path, target_name, build_configuration_name)
  self.with_project_build_configuration(project_path, target_name, build_configuration_name) do |project, build_configuration|
    infoplist_file = build_configuration.build_settings['INFOPLIST_FILE']
    infoplist_path = File.join(File.dirname(project.path), infoplist_file)

    infoplist = Xcodeproj::Plist.read_from_path(infoplist_path)
    return infoplist['CFBundleVersion']
  end
end

.set_project_bundle_identifier(project_path, target_name, build_configuration_name, bundle_identifier) ⇒ Object



79
80
81
82
83
84
# File 'lib/JenkinsUtil/xcode_util.rb', line 79

def self.set_project_bundle_identifier(project_path, target_name, build_configuration_name, bundle_identifier)
  self.with_project_build_configuration(project_path, target_name, build_configuration_name) do |project, build_configuration|
    build_configuration.build_settings['PRODUCT_BUNDLE_IDENTIFIER'] = bundle_identifier
    project.save()
  end
end

.set_project_bundle_version(project_path, target_name, build_configuration_name, bundle_version) ⇒ Object



62
63
64
65
66
67
68
69
70
71
# File 'lib/JenkinsUtil/xcode_util.rb', line 62

def self.set_project_bundle_version(project_path, target_name, build_configuration_name, bundle_version)
  self.with_project_build_configuration(project_path, target_name, build_configuration_name) do |project, build_configuration|
    infoplist_file = build_configuration.build_settings['INFOPLIST_FILE']
    infoplist_path = File.join(File.dirname(project.path), infoplist_file)

    infoplist = Xcodeproj::Plist.read_from_path(infoplist_path)
    infoplist['CFBundleVersion'] = bundle_version
    Xcodeproj::Plist.write_to_path(infoplist, infoplist_path)
  end
end

.with_project_build_configuration(project_path, target_name, build_configuration_name) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/JenkinsUtil/xcode_util.rb', line 34

def self.with_project_build_configuration(project_path, target_name, build_configuration_name)
  project = Xcodeproj::Project.open(project_path)
  targets = project.native_targets
  targets.each do |target|
    if target.name != target_name
      next
    end

    target.build_configuration_list.build_configurations.each do |build_configuration|
      if build_configuration.name != build_configuration_name
        next
      end

      yield project, build_configuration
    end
  end
end

Instance Method Details

#get_versionObject



28
29
30
31
32
# File 'lib/JenkinsUtil/xcode_util.rb', line 28

def get_version
  xcode_process = CommandLineScript.new("#{@default_xcodebuild_path} #{@xcodebuild_version_flag}")
  @xcodebuild_version_major
  puts xcode_process.get_output
end

#kill_ios_simulatorObject



24
25
26
# File 'lib/JenkinsUtil/xcode_util.rb', line 24

def kill_ios_simulator
  ProcessUtil.kill_all_processes(@ios_simulator_process_name)
end