Class: XcodeUtil

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

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeXcodeUtil

Returns a new instance of XcodeUtil.



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

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.fatal("xcodebuild not found: #{@default_xcodebuild_path}")
    abort
  end

  version
end

Class Method Details

.build_name(archive_plist) ⇒ Object



70
71
72
73
74
75
# File 'lib/jenkins_util/xcode_util.rb', line 70

def self.build_name(archive_plist)
  plist_path = File.expand_path(archive_plist)
  plist = Plist.parse_xml(plist_path)
  LoggerUtil.fatal("name not found, make sure to pass in the archive plist #{archive_plist}") if plist.nil? || !plist.key?('Name')
  "#{plist['Name']}_v_#{plist['ApplicationProperties']['CFBundleShortVersionString']}_b_#{plist['ApplicationProperties']['CFBundleVersion']}"
end

.project_bundle_identifier(project_path, target_name, build_configuration_name, bundle_identifier = nil) ⇒ Object



61
62
63
64
65
66
67
68
# File 'lib/jenkins_util/xcode_util.rb', line 61

def self.project_bundle_identifier(project_path, target_name, build_configuration_name, bundle_identifier = nil)
  with_project_build_configuration(project_path, target_name, build_configuration_name) do |project, build_configuration|
    return build_configuration.build_settings['PRODUCT_BUNDLE_IDENTIFIER'] if bundle_identifier.nil?

    build_configuration.build_settings['PRODUCT_BUNDLE_IDENTIFIER'] = bundle_identifier
    project.save
  end
end

.project_bundle_version(project_path, target_name, build_configuration_name, build_number = nil) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/jenkins_util/xcode_util.rb', line 48

def self.project_bundle_version(project_path, target_name, build_configuration_name, build_number = nil)
  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'] if build_number.nil?

    infoplist['CFBundleVersion'] = "#{infoplist['CFBundleVersion']}.#{build_number}"
    Xcodeproj::Plist.write_to_path(infoplist, infoplist_path)
  end
end

.project_provisioning_style(project_path, is_automatic = nil) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/jenkins_util/xcode_util.rb', line 77

def self.project_provisioning_style(project_path, is_automatic = nil)
  project = Xcodeproj::Project.open(project_path)

  project.root_object.attributes['TargetAttributes'].values.each do |target_value|
    target_value.each do |attribute_key, attribute_value|
      return attribute_value if attribute_key == 'ProvisioningStyle' && is_automatic.nil?

      next unless attribute_key == 'ProvisioningStyle'
      target_value[attribute_key] = is_automatic ? 'Automatic' : 'Manual'
    end
  end
  return project.save unless is_automatic.nil?

  LoggerUtil.fatal("'ProvisioningStyle' key not found, please check and uncheck automatic signing")
end

.team_id_from_plist(plist_file) ⇒ Object



93
94
95
96
97
98
99
# File 'lib/jenkins_util/xcode_util.rb', line 93

def self.team_id_from_plist(plist_file)
  plist_path = File.expand_path(plist_file)
  plist = Plist.parse_xml(plist_path)
  LoggerUtil.fatal("teamID not found in #{plist_file}") if plist.nil? || !plist.key?('teamID')

  plist['teamID']
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
# File 'lib/jenkins_util/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|
    next if target.name != target_name

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

      yield project, build_configuration
    end
  end
end

Instance Method Details

#kill_ios_simulatorObject



25
26
27
# File 'lib/jenkins_util/xcode_util.rb', line 25

def kill_ios_simulator
  ProcessUtil.kill_all_processes(@ios_simulator_process_name)
end

#versionObject



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

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